1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 3<html xmlns="http://www.w3.org/1999/xhtml"> 4<head> 5<meta charset="utf-8" /> 6<meta name="referrer" value="origin-when-cross-origin"/> 7<link rel="canonical" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1" /> 8<meta http-equiv="Content-Location" content="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1" /> 9<link rel="alternate" hreflang="it" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=italian" /> 10<link rel="alternate" hreflang="en" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1" /> 11<link rel="alternate" hreflang="sv" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=swedish" /> 12<link rel="alternate" hreflang="es" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=spanish" /> 13<link rel="alternate" hreflang="fr" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=french" /> 14<link rel="alternate" hreflang="zh" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=chinese" /> 15<link rel="alternate" hreflang="ja" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=japanese" /> 16<link rel="alternate" hreflang="pt" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=portuguese" /> 17<link rel="alternate" hreflang="nl" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=dutch" /> 18<link rel="alternate" hreflang="de" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&lang=german" /> 19<link rel="stylesheet" type="text/css" href="/images/bdsm/css/partner/11837.header.css" /> 20<link rel="shortcut icon" type="image/x-icon" href="https://secureimage.securedataimages.com/images/bdsm/favicon_2.ico" /> 21<link rel="meta" href="https://secureimage.securedataimages.com/images/ICRA_labels_rdf_adult.rdf" type="application/rdf+xml" title="ICRA labels" /> 22<meta http-equiv="pics-Label" content='(pics-1.1 "http://www.icra.org/pics/vocabularyv03/" l gen true for "http://bdsm.com" r (n 3 s 3 v 0 l 3 oa 0 ob 0 oc 0 od 0 oe 0 of 0 og 0 oh 0 c 3) gen true for "http://www.bdsm.com" r (n 3 s 3 v 0 l 3 oa 0 ob 0 oc 0 od 0 oe 0 of 0 og 0 oh 0 c 3))' /> 23<meta name="RATING" content="RTA-5042-1996-1400-1577-RTA" /> 24<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 25<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/login-1389134707.css"> 26<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/register-1389134059.css"> 27<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/password_meter-1485319682.css"> 28<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400&display=swap" rel="stylesheet"> 29<meta http-equiv="X-UA-Compatible" content="IE=11" /> 30<meta charset="UTF-8"/> 31<link rel="stylesheet" type="text/css" href="/css/live_cd/bdsm/english/11837/secure/font_face-1553209930.css"> 32<meta http-equiv="X-UA-Compatible" content="IE=11" /> 33<meta charset="UTF-8"/> 34<link rel="stylesheet" type="text/css" href="/css/live_cd/bdsm/english/11837/secure/font_face-1553209930.css"> 35<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/jquery_custom-1414007383.css"> 36<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/vice_desktop_globals-1662436773.css"> 37<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/reset-1414447400.css"> 38<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/notification-1486612312.css"> 39<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/notification_bdsm-1468379094.css"> 40<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/content_filter-1689216134.css"> 41<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/site-1645079046.css"> 42<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/dcb_member_core-1468989646.css"> 43<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/lightbox_popup-1490204639.css"> 44<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/fruit2-1559284285.css"> 45<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/fruit2_theme_alt-1536794415.css"> 46<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/ffimarkup-1389134709.css"> 47<link rel="stylesheet" type="text/css" href="/css/live_cd/bdsm/english/11837/secure/font_face-1553209930.css"> 48<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/fruit_v1_0_0-1466044269.css"> 49<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/site_bdsm-1749544279.css"> 50<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/member_cell_styles-1679369305.css"> 51<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/badges-1480563791.css"> 52<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/site_theme_bdsm-1480563791.css"> 53<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/navbar_41326-1718159294.css"> 54<link rel="stylesheet" type="text/css" href="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/navigation-1447318042.css"> 55<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" rel="stylesheet"> 56<title>BDSM.com - Forgot Login</title> 57<style> 58 .email_help { margin:10px 0 20px 250px; } 59 .email_instructions_title { font-size:18px; font-weight:700; } 60 61 /*NEW CSS*/ 62 #tmpl_forgot_login { min-height:300px; } 63 #tmpl_forgot_login #mp_email_antispam td.desc_cell { width:285px; } 64 65 /* Step 1 */ 66 #captcha { height:30px; } 67 #captcha .reg_question_wrapper { margin:0; } 68 .reg_question_wrapper { width:100%; float:left; margin:0 0 10px 0; } 69 .reg_question { width:30%; float:left; font-weight:700; margin:5px 10px 0 0; text-align:right; padding:3px 0 0 0; } 70 .reg_answer { width:64%; float:left; } 71 .forgot_login_error, .captcha_error { color:red; font-size:11px; margin-left:31%; } 72 .captcha_desc, .reg_required { display:none; } 73 .antispam_question { position:relative; top:-13px; } 74 .antispam_number { position:relative; top:1px; } 75 .antispam_input { font-size:12px; } 76 .error_top_box { margin:5px auto; border:1px solid red; color:red; background-color:#FBEE85; padding:5px 15px 5px 15px; width:70%; } 77 /* Step 2 */ 78 .confirmation_code_wrapper { margin:30px 0 50px 0; overflow:hidden; } 79 .email_help, .page_title { margin-left:295px !important; } 80 #toggleMailImage_try_following, #toggleMailImage_click_here, #toggleMailImage_displayText { cursor:pointer; color:#FFFFFF; } 81 .check_email { margin:5px auto; border:1px solid #4AE817; background-color:#FBEE85; padding:5px 15px 5px 15px; width:70%; color: #000; }
82 .invalid_link { margin:5px auto; border:1px solid red; background-color:#FBEE85; padding:10px 15px; width:70%; font-weight:700; } 83 .email_sent { margin:5px 0 0 1px; border:1px solid #4AE817; background-color:#FBEE85; padding:5px 15px 5px 15px; width:60%; font-weight:700; font-size:14px; display:none; } 84 .email_instructions { margin:10px 0 10px 30px; } 85 .email_instructions ol { margin:10px 0 10px 18px; padding:0; } 86 .contact_cs { margin:40px 0 0 0; } 87 .reg_question_wrapper input[type="password"] { 88 width: 203px; 89 } 90 /* new style for 1.5AFF */ 91 input:focus, select:focus, textarea:focus, button:focus {outline: none;} 92 #tmpl_forgot_login { min-height: 600px; } 93 .new15-title {color: #ffffff;font-size: 29px;font-weight:300;padding: 55px 0 9px;text-align: center;} 94 .new15-desc {font-size: 14px; font-weight:300; color: #ffffff;text-align: center;} 95 .password-box {display: flex;justify-content: space-between;align-items: flex-end;width: 356px;margin: 15px auto 0;padding: 23px 23px 17px 20px;border-radius: 10px;box-shadow: 1px 1px 2px rgba(0,0,0,0.4);background: #f0f0f0;box-sizing: border-box;} 96 .password-box input{font-family: 'Open Sans', 'å¾®è»æ£é»é«', sans-serif;outline: none;} 97 .password-box input[type="password"] {width: 184px;height: 35px;padding:0;font-size:14px;border: 1px solid #ccc;border-radius: 10px;background-color: #fff;box-shadow: inset 1px 1px 2px rgba(0,0,0,0.4);text-indent: 7px;} 98 #french .password-box input[type="password"], .french .password-box input[type="password"] {width: 200px;font-size: 12px;} 99 #set_new_pw_confirm{margin-top: 20px;} 100 #submit_new_pw {width: 88px; height: 35px;border-radius: 10px;font-size: 14px;color:#fff;text-transform: uppercase;text-align: center;background-color: #f70202;border: 0;} 101 #french #submit_new_pw, .french #submit_new_pw, #spanish #submit_new_pw, .spanish #submit_new_pw, #portuguese #submit_new_pw, .portuguese #submit_new_pw {font-size: 12px;} 102 .new15-error {width: 356px; margin: 10px auto 0;font-size: 13px; line-height: 18px;color: #df0000; display: none; text-align: left;} 103 #forgot_login.show15err .new15-error {display: block;} 104 #forgot_login.show15err input[type="password"] {border-color: #df0000;} 105 .new15-invalid-box {width: 540px;padding:20px;margin: 40px auto 0;border-radius: 10px;box-shadow: 1px 1px 2px rgba(0,0,0,0.4);background-color: #f0f0f0;box-sizing: border-box;} 106 .new15-invalid-title{padding:8px 12px;border-radius: 5px;border:1px solid #ff0707;background-color: #faf37e;font-size: 14px;line-height: 22px;text-align: left;box-sizing: border-box;} 107 .new15-invalid-content {width: 310px; margin: 0 auto;} 108 .new15-invalid-c-title {font-size: 13px;font-weight:300; padding: 13px 0;} 109 .new15-invalid-input {width: 100%;height: 35px;border: 1px solid #cccccc;border-radius: 10px;background: #fff;font-size: 14px!important;box-shadow: inset 1px 1px 2px rgba(0,0,0,0.4);text-indent: 5px;font-family: 'Open Sans', 'å¾®è»æ£é»é«', sans-serif!important;} 110 .new15-invalid-btnbox {text-align: center;padding: 17px 0;} 111 .new15-invalid-submit {min-width: 88px;padding: 0 20px;height: 35px!important;line-height: 35px;background-color: #ff0707;border-radius: 10px;font-size: 14px;color: #fff;border:0;text-transform: uppercase;} 112 .new15-invalid-submit:hover{background-color: #ff0707;} 113 114 </style> 115<style> 116 [id^="__threeds"] { 117 display: none !important; 118 }
119 [id^="__threeds"].showchal { 120 display: block !important; 121 height: 100%; 122 width: 100%; 123 max-height: 450px; 124 max-width: 350px; 125 position: fixed; 126 box-shadow: none; 127 z-index: 20000; 128 top: 50%; 129 left: 50%; 130 transform: translate(-50%, -50%); 131 border-radius: 20px; 132 padding-top: 50px; 133 background-color: #fff; 134 } 135</style> 136<style type="text/css"> 137 #navigation ul li ul li ul li { text-transform: lowercase; } 138 #navigation ul li ul li ul li a:first-letter { text-transform: uppercase; } 139 </style> 140<style> 141.models-banner-container { 142 background: url('https://secureimage.securedataimages.com/images/bdsm/common/model_banner.png') no-repeat; 143} 144ul.enc_up_now { 145 margin-top: 24px; 146 margin-right: 16px; 147} 148ul.enc_up_now a.btn.btn-red { 149 color: #FFFFFF; 150} 151</style> 152<style> 153 /*if we dont need to test on debug_cookie=newstyle:2, move this code to css-site*/ 154 body .member #logo { margin-top: 0; min-height: 71px;} 155 body .guest #logo { margin: 20px 0 } 156 157 .member .logo_with_href { display: block; min-height: 45px; position: relative; } 158 .member #logo a img { margin: 15px 0 0; bottom: 0; position: absolute; } 159 .guest #logo a img { margin-left:0; } 160 #logo #site_logo { width: auto; height: auto; background: none; } 161 .guest-links.login { position: absolute; top: 25px; right: 0; text-align: right; } 162 .guest .guest-links.login { display: block !important;} 163 #login_handle, #login_password { font-size: 12px; min-height: 16px; width: 150px;} 164 165 /*if we dont need to test on debug_cookie=newstyle:2, move this code to css-navbar_41326*/ 166 .guest #tagline { display: inline-block; float: none; } 167 .guest #logo a { display: inline-block; vertical-align: sub; float: none;} 168 #out .guest #logo a { vertical-align: middle; } 169 .guest #navigation-bar { height: 38px; } 170 .guest .nav > li { height: 38px; line-height: 38px; margin-right: 0} 171 .guest .nav .nav_join { background:#554E44 172 ; } 173 .nav > li .guest-tab-label { color: #fff;; padding: 12px 16px; font-size: 14px; font-weight: bold; } 174 .nav > li .guest-tab-label:hover { color: #000; background: #fff;} 175 176 177 body #header .member_interaction_btns { width: initial;} 178 body #header .member_interaction_btns .nav-chat-wrap { position: relative; bottom:initial; padding-right: 20px; } 179 body #header .member_interaction_btns > a { float: none; display: inline-block; } 180 #bdsm #navigation-bar .open .nav-sprite::after { border-bottom-color: #262e32; } 181 #bdsm #notification_dropdown_viewall { background: none; } 182 #bdsm .notification_section_header_first, #bdsm .notification_section_header { background: #464646; } 183 #bdsm #notification_page_container .member_cell_container { background: none; } 184 185 /*if we dont need to test on debug_cookie=newstyle:2, move this code to css-member_cell_styles*/ 186 html .grid_cell .member_cell_right .activity_container.vertical{ margin: 0 0 6px 0; } 187 html #ffadult .grid_cell .member_cell_right .activity_container.vertical{ margin: 0 -6px 6px -6px; } 188 189 /*if we dont need to test on debug_cookie=newstyle:2, move this code to css-notification_bdsm*/ 190 #bdsm #notification_page_container .member_cell_info_container .details .messages_container .message_container { background: none; color: #fff; margin-bottom: 0; padding:0; } 191 #bdsm #site_logo {background: none;} 192 #bdsm #header, #getiton #header {max-height: 90px;} 193 #getiton #site_logo {width: auto; height: auto;} 194 </style> 195<style type="text/css"> 196.imc_dropdown_container { 197 background-color: #262e32; 198} 199#imcw { 200 width: 380px; 201 font-family: "Open Sans", Calibri, Candara, Arial, sans-serif; 202 font-weight: normal; 203 line-height: 1.1; 204 color: inherit; 205} 206#imcw #imcw_messages { 207 max-height: 610px; 208 overflow-x: hidden; 209 overflow-y: auto; 210} 211#imcw #imcw_no_messages { 212 padding: 40px; 213 text-align: center; 214} 215#imcw svg { 216 height: 20px; 217 width: inherit; 218} 219#imcw svg.gold { 220 fill: #DFAF51; 221} 222#imcw svg.confirmid { 223 fill: #9377B5; 224} 225#imcw svg.vip{ 226 fill: #434345; 227} 228#imcw svg.broadcasting { 229 fill: #00AF4C; 230} 231#imcw svg.vmore { 232 height: 30px; 233} 234#imcw svg.dismiss { 235 fill: #FFFFFF; 236 height: 20px; 237} 238#imcw svg.reply { 239 fill: #FFFFFF; 240 height: 20px; 241} 242#imcw .filter_box:after { 243 content: ''; 244} 245.imcw_header { 246 margin: 10px; 247 height: 25px; 248 padding-top: 4px; 249} 250.imcw_header .title { 251 font-size: 18px; 252} 253.imcw_header .imcw_title { 254 float: left; 255 background-color: #F0F0F0; 256 padding: 10px; 257} 258.imcw_header .imcw_toggle { 259 float: right; 260} 261.imcw_body { 262 top: 30px; 263} 264.imcw_body .imcw_title { 265 padding: 10px; 266 font-size: 14px; 267 background-color: #999999; 268} 269.imcw_body .messenger_preview { 270 height: 60px; 271 border-top: 1px solid #F0F0F0; 272} 273.imcw_body .member_cell_container { 274 position:relative; 275 background-color: #262e32; 276 border-bottom: 1px solid #e5e5e5; 277 border-top: 0; 278 border-right: 0; 279 border-left: 0; 280 clear: both; 281 padding: 0; 282 margin: 0; 283 zoom: 1; 284 font-size: 14px; 285 width: 100%; 286} 287.imcw_body .member_cell_container:hover { 288 background-color: #666; 289} 290.imcw_body .messenger_preview .member_cell_image img { 291 height: 60px; 292} 293.imcw_body .messenger_preview .member_cell_info { 294 float: left; 295 position: relative; 296 color: #DDD; 297 padding: 4px 0 5px 10px; 298} 299.imcw_body .messenger_preview .member_cell_info .handle { 300 display: inline-table; 301 margin-right: 3px; 302 font-size: 16px; 303 color: #3366CC; 304} 305.imcw_body .messenger_preview .member_cell_info .gender { 306 display: inline-table; 307 margin-right: 3px; 308 font-size: 12px; 309} 310.imcw_body .messenger_preview .member_cell_info .badge_container { 311 position: relative; 312 top: 0; 313 right: 0; 314 display: inline-table; 315 margin: 0px 3px 0px 0px; 316 font-size: 11px; 317 font-weight: bold; 318 padding-top: 3px; 319} 320.imcw_body .messenger_preview.collapsed .member_cell_info .title_message { 321 display: block; 322 color: #DDD;} 323.imcw_footer { 324 border-top: 1px solid #F0F0F0; 325} 326.imcw_footer .dismiss_all {
327 padding: 10px; 328 float: right; 329 cursor: pointer; 330 color: #FFFFFF; 331} 332 333 334/***** IMC Popup/Lightbox *****/ 335#imcw_popup { 336 width: 540px; 337 height: 370px; 338} 339 340#imcw_popup .panel-heading { 341 padding: 10px 15px; 342 color: #ffffff; 343 background-color: #428bca; 344 border-color: #428bca; 345} 346#imcw_popup .panel-heading .panel-title { 347 font-size: 17px; 348} 349#imcw_popup .messages { 350 height: 255px; 351 overflow-y: scroll; 352} 353#imcw_popup .message { 354 font-size: 15px; 355 padding: 15px 15px; 356 border-bottom: 1px solid #ccc; 357 position: relative; 358} 359#imcw_popup .message .buttons { 360 position: absolute; 361 right: 8px; 362 top: 6px; 363} 364#imcw_popup .message .buttons .watch-btn { 365 fill: #428bca; 366} 367#imcw_popup .buttons .btn_bg { 368 display: inline-block; 369 height: 30px; 370 width: 30px; 371 margin-left: 15px; 372} 373#imcw_popup .buttons svg { 374 height: 23px; 375 width: 23px; 376 padding: 5px; 377} 378#imcw_popup .panel-body .lb_buttons { 379 width: 50%; 380 margin: 0 auto; 381} 382#imcw_popup .panel-body .lb_buttons button { 383 padding: 5px 15px; 384 margin: 0px 10px; 385} 386#imc_popup .btn-blue:hover, .btn.primary:hover, .btn-primary:hover, .btn-blue:active, .btn.primary:active, .btn-primary:active { 387 color: #ffffff; 388} 389/************ Activity Buttons Drawer Styles ***************/ 390 391.member_cell_btn.expandable { 392 padding:0; 393 position:absolute; 394 top:0; 395 right:0; 396 bottom:-1px; 397 max-width:0; 398 transition: max-width .5s; 399 background:#428bca; 400} 401.member_cell_btn.expandable.open { 402 max-width:100%; 403 min-width:35%; 404 box-shadow: -2px 0px 2px rgba(0,0,0,.6); 405} 406.member_cell_btn.expandable .activity_container { 407 position:absolute; 408 top:0; 409 right:-1px; 410 bottom:0; 411 z-index:10; 412 width:0%; 413 transition: width .5s; 414 padding:0; 415 overflow:hidden; 416 font-size:0px; 417} 418.member_cell_btn.expandable .activity_container.open { 419 width:100%; 420} 421 422.member_cell_btn.expandable .activity_container a { 423 position:absolute; 424 font-size:12px; 425 top:0; 426 bottom:0; 427 display:inline; 428 margin:0; 429 padding:13px 0 0; 430 float:left; 431 text-align:center; 432 color:#FFF; 433} 434 435.member_cell_btn.expandable .activity_container a span { 436 display: block; 437 white-space:nowrap; 438} 439 440.member_cell_btn.expandable .activity_container a span:before { 441 color:#fff; 442 font-size:28px; 443 height: 28px; 444 width: 28px; 445} 446 447.member_cell_btn.expandable .open-btn { 448 Position:absolute; 449 left:-40px; 450 width:50px; 451 top:0; 452 bottom:0; 453 transition: left .2s; 454 padding-top:15px; 455} 456.member_cell_btn.expandable .open-btn:before { 457 width:22px; 458 height:22px; 459 line-height:1em; 460 padding:0; 461 color:#999; 462 margin:0; 463 font-size:22px; 464 position:absolute; 465 left:0; 466 width:50px; 467 top:0; 468 bottom:0; 469 top:50%; 470 transform: translateY(-50%); 471} 472 473.member_cell_container .member_cell_btn.expandable .closed.green:before { 474 color:#00AF4C; 475} 476 477.member_cell_btn.expandable .open-btn.open { 478 left:-25px; 479 width:25px; 480 background:#4c66a4; 481 box-shadow: -2px 0px 2px rgba(0,0,0,.6); 482} 483.member_cell_btn.expandable .open-btn.open:before { 484 color:#fff; 485 width:25px; 486} 487 488.member_cell_btn.expandable .open-btn.open.green:before { 489 color:#fff !important; 490} 491 492/* The switch - the box around the slider */ 493.switch { 494 position: relative; 495 display: inline-block; 496 width: auto; 497 margin: 0; 498} 499 500/* Hide default HTML checkbox */ 501.switch input {display:none;} 502 503/* The slider */ 504.slider { 505 cursor: pointer; 506 background-color: #f41002; 507 -webkit-transition: .4s; 508 transition: .4s; 509 font-size: 12px; 510 min-height: 19px; 511 min-width: 30px; 512 color: #FFFFFF; 513} 514 515.slider:before { 516 position: absolute; 517 content: ""; 518 height: 15px; 519 width: 15px; 520 top:2px; 521 left: 2px; 522 background-color: #FFFFFF; 523 -webkit-transition: .4s; 524 transition: .4s; 525} 526 527input:checked + .slider { 528 background-color: #00AF4C; 529} 530 531input:checked + .slider .off{ 532 display:inline-block; 533} 534 535input:checked + .slider .on{ 536 display:none; 537} 538 539.slider .off{ 540 display:none; 541 padding: 0 20px 0 10px; 542 line-height: 18px; 543 vertical-align: middle; 544} 545.slider .on{ 546 display: inline-block; 547 padding: 0 10px 0 20px; 548 line-height: 18px; 549 vertical-align: middle; 550} 551 552 553input:focus + .slider { 554 box-shadow: 0 0 1px #FE9F25; 555} 556 557input:checked + .slider:before { 558 -webkit-transform: translateX(-17px); 559 -ms-transform: translateX(-17px); 560 transform: translateX(-17px); 561 left: 100%; 562} 563 564/* Rounded sliders */ 565.slider.round { 566 border-radius: 16px; 567 line-height: 18px; 568} 569 570.slider.round:before { 571 border-radius: 50%; 572} 573 574 575/***** Alert Bar *****/ 576.alert-broadcast-invite { 577 display: block; 578 background: #CCD9F2; 579 position: relative; 580 margin: 0 auto; 581} 582.alert-broadcast-invite .page { 583 padding: 5px 0; 584} 585.alert-broadcast-invite .message_container { 586 position: relative; 587 margin-right: 10px; 588 padding-right: 10px; 589 line-height: normal; 590} 591.alert-broadcast-invite .buttons { 592 position: absolute; 593 top: -7px; 594 right: 0; 595} 596.alert-broadcast-invite .buttons .btn_bg { 597 display: inline-block; 598 height: 30px; 599 width: 30px; 600 background-color: #e9e9e9; 601 border-radius: 50%; 602 margin-left: 15px; 603} 604.alert-broadcast-invite .buttons svg { 605 height: 20px;
606 width: 20px; 607 padding: 5px; 608} 609.alert-broadcast-invite .buttons .watch-btn svg { 610 fill: #428bca; 611} 612.alert-broadcast-invite .buttons .ignore-btn svg { 613 fill: #949597; 614} 615</style> 616<style> 617.imc_trainer_lb .modal { 618 width: 800px; 619 margin-left: -400px; 620} 621.imc_trainer_lb .close { 622 font-size: 50px; 623 margin-top: 15px; 624 margin-right: 10px; 625} 626.imc_trainer_lb .trainer_image { 627 width: 430px; 628} 629#imc_trainer { 630 width: 790px; 631 padding: 5px; 632} 633#imc_trainer .modal_header { 634 border-bottom: 1px solid #E6E6E6; 635} 636#imc_trainer .modal_header h4 { 637 margin: 10px 15px; 638 font-size: 19px; 639} 640#imc_trainer .head { 641 font-weight: 600; 642 margin-bottom: 15px; 643 font-size: 19px; 644} 645#imc_trainer .body { 646 font-weight: 300; 647 font-size: 15px; 648} 649#imc_trainer .step1 img { 650 margin-left: 10px; 651} 652#imc_trainer .step1 .text { 653 top: 21px; 654 left: -15px; 655} 656#imc_trainer .step2 .text { 657 top: 26px; 658 left: -20px 659} 660#imc_trainer .step3 .text { 661 top: 44px; 662 left: -20px 663} 664#imc_trainer .trainer_button { 665 text-align: center; 666 margin: 5px 0px 10px 0px; 667} 668#imc_trainer btn:hover { 669 color: #FFFFFF; 670} 671 672.improvements_lb { 673 width: 750px; 674 padding: 5px; 675} 676.improvements_lb .modal_header { 677 border-bottom: 1px solid #E6E6E6; 678} 679.improvements_lb .modal_header h4 { 680 margin: 10px 15px; 681 font-size: 19px; 682} 683.improvements_lb .head { 684 font-weight: 600; 685 margin-bottom: 15px; 686 font-size: 19px; 687} 688.improvements_lb .modal_body { 689 margin: 10px 15px; 690} 691.improvements_lb .body { 692 font-weight: 300; 693 font-size: 15px; 694} 695.improvements_lb .close_button { 696 text-align: center; 697 margin: 5px 0px 10px 0px; 698} 699.improvements_lb btn:hover { 700 color: #FFFFFF; 701} 702 703#broadcaster_improvements .step1 { 704 padding-top: 40px; 705} 706#broadcaster_improvements .step1 .text { 707 top: 21px; 708} 709#broadcaster_improvements .step2 { 710 padding-top: 40px; 711} 712#broadcaster_improvements .step2 img { 713 padding: 10px 0px 0px 50px; 714} 715#broadcaster_improvements .step3 { 716 padding-top: 10px; 717} 718#broadcaster_improvements .step3 .text { 719 top: 44px; 720} 721#broadcaster_improvements .step3 img { 722 padding-left: 110px; 723} 724 725#messenger_improvements .number { 726 display: inline-block; 727 border-radius: 30px; 728 border: 2px solid black; 729 padding: 4px 10px; 730 font-size: 16px; 731 font-weight: bold; 732} 733 734#messenger_improvements .col-md-1 { 735 width: 40px; 736} 737</style> 738<style type="text/css"> 739.navbar-light .nav-home.active, 740.navbar-light .nav-home:hover{ 741 background-position: -132px -82px; 742} 743.navbar-light .nav-home { 744 background-position: -329px -82px; 745} 746 747.navbar-light .nav-inbox.active, 748.navbar-light .nav-inbox:hover { 749 background-position: -51px -3px; 750} 751.navbar-light .nav-inbox { 752 background-position: -248px -3px; 753} 754 755.navbar-light .notification-toggle.active, 756.navbar-light .notification-toggle:hover { 757 background-position: -171px -3px; 758} 759.navbar-light .notification-toggle { 760 background-position: -368px -3px; 761} 762.navbar-light .nav > li .nav-sprite svg.icon{ 763 fill: #666666; 764} 765.navbar-light .nav > li .nav-sprite svg.icon:hover { 766 fill: #333333; 767} 768#navigation-bar.navbar-light .tab-label.active_tab, 769#navigation-bar.navbar-light .hover .tab-label, 770#navigation-bar.navbar-light .tab:hover .tab-label, 771#navigation-bar.navbar-light .back-btn-link:hover { 772 color: #666666; 773} 774#navigation-bar.navbar-light .tab-label, 775#navigation-bar.navbar-light .back-btn-link { 776 color: #333333; 777} 778</style> 779<style> 780 .tip-popup .modal{ 781 width: 285px; 782 display: block; 783 left: 50%; 784 margin-left: -142px; 785 top: 20%; 786 } 787 788 .tip-popup .modal .close { 789 position: absolute; 790 right: 5px; 791 top: 5px; 792 z-index: 50; 793 float: none; 794 } 795 .tip-popup .lightbox-wrapper{ 796 min-height: 200px; 797 padding: 10px; 798 box-sizing: border-box; 799 800 } 801 .tip-popup .title{ 802 font-size: 16px; 803 font-weight: bold; 804 width: 93%; 805 806 } 807 .tip-popup .tips-selector{ 808 dispay: block; 809 margin: 20px; 810 } 811 .tip-popup .user-points{ 812 font-size: 10px; 813 } 814 .tip-popup .handle { 815 color: #3366cc; 816 font-weight: 600; 817 } 818 .tip-popup .points { 819 color: #16951f; 820 font-weight: bold; 821 } 822 .tip-info{ 823 margin-top:30px; 824 } 825 .tip-popup .action-btn{ 826 text-align: center; 827 margin: 30px 0px 5px 0px; 828 } 829 .tip-popup .action-btn .btn{ 830 padding: 5px 25px; 831 } 832 .custom-dropdown:hover{ 833 cursor: pointer; 834 } 835 [data-role=view].custom-dropdown, .custom-dropdown { 836 position: absolute; 837 z-index: 5; 838 border: 1px solid #ccc; 839 border-radius: 3px; 840 -webkit-border-radius: 3px; 841 white-space: nowrap; 842 background-color: #FFF; 843 color: #333; 844 font-size: 16px; 845 width: 100%; 846 847 } 848 849 .custom-dropdown .custom-options { 850 border-top: 1px solid #ccc; 851 } 852 853 .custom-dropdown .custom-options >div { 854 padding: 6px 5px; 855 } 856 .custom-dropdown .custom-options > div:hover { 857 background-color: #EEEEEE; 858 cursor: pointer; 859 } 860 861 .dropdown-display { 862 position: relative; 863 min-height: 30px; 864 box-sizing: border-box; 865 -webkit-box-sizing: border-box; 866 padding: 7px 10px; 867 } 868 869 870 .dropdown-display:after { 871 display: block; 872 position: absolute; 873 right: 13px; 874 top: 47%; 875 content: ""; 876 height: 0; 877 width: 0; 878 padding: 0; 879 border: 5px solid transparent; 880 border-top-color: #777 881 } 882 883 .custom-dropdown .dropdown-link { 884 color: #3366cc; 885 } 886 887 .custom-dropdown._disabled .dropdown-display { 888 color: #888; 889 background-color: #eee 890 } 891 .tip-options{ 892 display: table; 893 margin-top: 10px; 894 position: relative; 895 width: 100%; 896 } 897 .tip-options .dropdown-label{ 898 display: table-cell; 899 padding-right: 10px; 900 font-size: 12px; 901 vertical-align: bottom; 902 } 903 .d-select{ 904 display: table-cell; 905 position: relative; 906 min-width: 120px; 907 height: 21px; 908 } 909 910 .custom-options > div._disabled { 911 color: #d8d8d8; 912 } 913 </style> 914<style type="text/css"> 915 .qb-points .d-select { 916 width: 100%; 917 display: block; 918 float: left; 919 height: 34px; 920 margin-bottom: 32px; 921 } 922 923 .discounted .strike { 924 color:red; 925 text-decoration:line-through; 926 927 } 928 .discounted .strike .price{ 929 color: #000000; 930 } 931 932 .qb-points h2 { 933 font-size: 24px; 934 height: auto; 935 display: block; 936 float: none; 937 line-height: 32px; 938 font-weight: normal; 939 margin-bottom: 15px; 940 } 941 942 .qb-points .dropdown-display { 943 padding-right: 32px; 944 } 945 946 .quickbuy-lb .custom-dropdown { 947 width: 100%; 948 border-radius: 5px; 949 -webkit-border-radius: 5px; 950 padding: 5px 0px; 951 } 952 953 .quickbuy-lb .vat-info { 954 text-align: center; 955 display: block; 956 color: #666666; 957 font-size: 12px; 958 position: relative; 959 } 960 961 .qb-points .error { 962 margin-top: 22px; 963 max-width: 390px; 964 } 965 .quickbuy-lb { 966 position: relative; 967 z-index: 1100; 968 } 969 .quickbuy-lb .l-body{ 970 padding: 48px 10px; 971 } 972 .quickbuy-lb.desktop [data-content="lightbox"] { 973 padding: 20px 15px 48px 15px; 974 } 975 .quickbuy-lb .inner-wrap { 976 text-align: left; 977 } 978 .quickbuy-lb .loading, 979 .quickbuy-lb .action-btn, 980 .quickbuy-lb .success { 981 text-align: center; 982 } 983 .quickbuy-lb .success { 984 margin-bottom: 32px; 985 margin-top: 35px; 986 font-size: 18px; 987 } 988 989 .quickbuy-lb.desktop .lightbox-wrapper { 990 width: 370px; 991 margin-left: -185px; 992 } 993 .quickbuy-lb.desktop .custom-dropdown * { 994 font-size: 14px; 995 } 996 .quickbuy-lb.desktop .action-btn { 997 margin-top: 105px; 998 float: none; 999 opacity: 1; 1000 } 1001 .quickbuy-lb.desktop .action-btn.close { 1002 margin-top: 42px 1003 } 1004 .quickbuy-lb.desktop .error .link { 1005 text-decoration: underline; 1006 color: #3366cc; 1007 cursor: pointer; 1008 } 1009 .quickbuy-lb.desktop .ql_spinner { 1010 background: url(https://secureimage.securedataimages.com/images/common/icons/loading.gif) no-repeat center center; 1011 height: 32px; 1012 width: 100%; 1013 display: block; 1014 } 1015 .quickbuy-lb.desktop .modal { 1016 top: 10%; 1017 } 1018 .virtual_gift_popup { 1019 position: relative; 1020 z-index: 100; 1021 } 1022 1023 [id^=chatviewer] .quickbuy-lb { 1024 position: fixed; 1025 } 1026 [id^=chatviewer] .quickbuy-lb .modal-dialog { 1027 width: 400px; 1028 } 1029 [id^=chatviewer] .quickbuy-lb.desktop .lightbox-wrapper { 1030 width: auto; 1031 margin-left: auto; 1032 } 1033 1034 [id^=chatviewer] .modal-backdrop:nth-child(2) { 1035 z-index: 1060; 1036 } 1037 1038 [id^=chatviewer] .quickbuy-lb.desktop .btn-blue { 1039 background-image: none; 1040 filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); 1041 border-radius: 0; 1042 border-style: solid; 1043 border-width: 1px; 1044 box-shadow: none; 1045 text-shadow: none; 1046 padding: 3px 11px; 1047 border: 1px solid #428bca; 1048 background-color: #428bca; 1049 color: #ffffff; 1050 } 1051 1052 [id^=chatviewer] .quickbuy-lb.desktop .btn-blue:hover { 1053 background-color: #034e8f; 1054 border-color: #034e8f; 1055 } 1056 1057 [id^=chatviewer] .quickbuy-lb.desktop .btn-large { 1058 padding: 11px 19px; 1059 font-size: 18px; 1060 } 1061 1062 [id^=chatviewer] .quickbuy-lb.desktop .loading { 1063 top: 0; 1064 } 1065 1066 [id^=chatviewer] .quickbuy-lb.desktop [data-content="lightbox"] { 1067 padding: 0px 10px 48px 10px; 1068 } 1069 1070 .quickbuy-lb .indent { 1071 margin-left: 20px; 1072 } 1073 1074 .quickbuy-lb .indent p { 1075 margin: 0; 1076 } 1077 1078 .quickbuy-lb .bold{ 1079 font-weight: bold; 1080 } 1081 .quickbuy-lb .d-select [type="checkbox"] { 1082 position: absolute; 1083 top: 2px; 1084 left: 0; 1085 margin: 0; 1086 } 1087 1088 .quickbuy-lb .autoload_row { 1089 display: none; 1090 margin-bottom: 60px; 1091 } 1092 .german .quickbuy-lb .autoload_row { 1093 margin-bottom: 80px; 1094 } 1095 1096 .price .plus_vat, .strike .plus_vat { 1097 font-size:.5rem !important; 1098 } 1099 1100 .custom_options .plus_vat { 1101 display: none; 1102 } 1103 1104 .vat_options .plus_vat { 1105 display: inline-block !important; 1106 font-size:.5rem !important; 1107 } 1108 1109 .insufficient_funds { 1110 display:none; 1111 } 1112 1113 1114 1115</style> 1116<style> 1117 *{ 1118 box-sizing: border-box; 1119 } 1120 *:before, 1121 *:after { 1122 box-sizing: border-box; 1123 } 1124 h1, h2, h3, h4, h5, h6, ul, p, form, input { 1125 margin: 0px; 1126 padding: 0px; 1127 outline: none; 1128 list-style-type: none; 1129 } 1130 input:focus, select:focus, textarea:focus, button:focus {outline: none;} 1131 button:focus {outline:0;} 1132 button, input {font-family: 'Open Sans', 'å¾®è»æ£é»é«', sans-serif;} 1133 .fgtpwd-popup { 1134 position: fixed; 1135 top: 0; 1136 left: 0; 1137 right: 0; 1138 bottom: 0; 1139 width: 100%; 1140 height: 100%; 1141 background-color: rgba(0, 0, 0, 0.8); 1142 z-index: -1; 1143 opacity: 0; 1144 visibility: hidden; 1145 transition: opacity 0.2s linear; 1146 text-align: center; 1147 } 1148 .fgtpwd-popup.popup { 1149 z-index: 999; 1150 visibility: visible; 1151 opacity: 1; 1152 } 1153 1154 html.popup,body.popup { 1155 height: 100%; 1156 overflow: hidden; 1157 } 1158 1159 .fgtpwd-box { 1160 display: inline-block; 1161 width: 540px; 1162 margin: 210px auto 0; 1163 box-shadow: 1px 1px 2px rgba(0,0,0,0.6); 1164 border-radius: 10px; 1165 } 1166 1167 .fgtpwd-title { 1168 font-size: 36px; 1169 font-weight: 300; 1170 line-height: 58px; 1171 padding-left: 30px; 1172 color: #fff; 1173 background: #a1a1a1; 1174 border-top-left-radius: 10px; 1175 border-top-right-radius: 10px; 1176 text-align: left; 1177 } 1178 1179 .fgtpwd-cotent {
1180 padding: 25px 30px 45px; 1181 background: #f0f0f0; 1182 border-bottom-left-radius: 10px; 1183 border-bottom-right-radius: 10px; 1184 } 1185 1186 #rest-2 .fgtpwd-cotent {padding-bottom: 20px;} 1187 1188 .fgtpwd-desc { 1189 font-size: 14px; 1190 font-weight: 300; 1191 text-align: left; 1192 color: #212121; 1193 } 1194 1195 .fgtpwd-btns { 1196 display: flex; 1197 justify-content: center; 1198 padding-top: 20px; 1199 } 1200 1201 .fgtpwd-box .btn-no { 1202 line-height: 35px; 1203 cursor: pointer; 1204 } 1205 1206 .fgtpwd-box .btn-no, 1207 .fgtpwd-box button { 1208 min-width: 88px; 1209 height: 35px; 1210 border: 0; 1211 border-radius: 10px; 1212 font-size: 14px; 1213 text-transform: uppercase; 1214 color: #fff; 1215 } 1216 1217 #rest-1 .fgtpwd-btns .btn-no 1218 #rest-1 .fgtpwd-btns button { 1219 width: calc((100% - 10px)/2); 1220 } 1221 1222 .btn-no, .btn-no:hover {background-color: #a7a7a7;margin-right: 10px;} 1223 .btn-ys, .btn-ys:hover,.btn-ys:disabled {background-color: #f70202;} 1224 .btn-ys:disabled {cursor: not-allowed;} 1225 .btn, button, [type="submit"], [type="button"], [type="reset"] {padding: 0;} 1226 .reset-box { 1227 padding-top: 20px; 1228 width: 185px; 1229 margin: 0 auto; 1230 text-align: center; 1231 } 1232 1233 /* multiple langs */ 1234 #japanese .reset-box, .japanese .reset-box{width: 230px;} 1235 #japanese .reset-input input::placeholder, .japanese .reset-input input::placeholder {font-size: 12px;letter-spacing: -1px;} 1236 #japanese .fgtpwd-title, .japanese .fgtpwd-title {font-size: 28px;letter-spacing: -1px;} 1237 #korean .fgtpwd-title, .korean .fgtpwd-title, #italian .fgtpwd-title, .italian .fgtpwd-title, #french .fgtpwd-title, .french .fgtpwd-title, 1238 #german .fgtpwd-title, .german .fgtpwd-title, #dutch .fgtpwd-title, .dutch .fgtpwd-title {font-size: 32px;} 1239 #portuguese .reset-box, .portuguese .reset-box, #spanish .reset-box, .spanish .reset-box, #french .reset-box, .french .reset-box, 1240 #german .reset-box, .german .reset-box, #dutch .reset-box, .dutch .reset-box{width: 210px;} 1241 #portuguese .fgtpwd-title, .portuguese .fgtpwd-title, #spanish .fgtpwd-title, .spanish .fgtpwd-title {font-size: 30px;} 1242 /* [END] multiple langs */ 1243 1244 .reset-input { 1245 position: relative; 1246 display: block; 1247 width: 100%; 1248 } 1249 1250 .reset-input::before { 1251 content: ""; 1252 position: absolute; 1253 left: 8px; 1254 top: 10px; 1255 width: 18px; 1256 height: 18px; 1257 background-image: url(https://secureimage.securedataimages.com/images/ffadult/39850/Icon-email.svg); 1258 } 1259 1260 .reset-input input { 1261 width: 100%; 1262 border: 1px solid #cccccc; 1263 border-radius: 10px; 1264 height: 35px; 1265 font-size: 13px; 1266 font-weight: 300; 1267 color: #212121; 1268 box-shadow: inset 1px 1px 2px rgba(0,0,0,0.4); 1269 padding-left: 30px; 1270 box-sizing: border-box; 1271 } 1272 1273 .errormsg { 1274 display: none; 1275 color: #df0000; 1276 font-size: 12px; 1277 font-weight: 300; 1278 text-align: left; 1279 } 1280 1281 .error .fgtpwd-cotent input {border-color: #df0000;} 1282 .error .errormsg {display: block;} 1283 .confirm-box { 1284 width: 310px; 1285 margin: -10px auto 15px; 1286 } 1287 .confirm-title { 1288 display: flex; 1289 align-items: center; 1290 background-color: #fff; 1291 border-radius: 5px; 1292 box-shadow: inset 0px 1px 2px rgba(0,0,0,0.2); 1293 padding: 16px 22px 20px; 1294 } 1295 .confirm-title-txt { 1296 font-size: 14px; 1297 font-weight: 300; 1298 line-height: 24px; 1299 color: #212121; 1300 text-align: left; 1301 } 1302 1303 .confirm-title-txt span { 1304 font-size: 16px; 1305 font-weight: 600; 1306 } 1307 1308 .confirm-code-desc,.confirm-code-desc2 { 1309 padding: 11px 0; 1310 font-size: 13px; 1311 line-height: 18px; 1312 font-weight: 300; 1313 color: #212121; 1314 text-align: left; 1315 } 1316 1317 .confirm-code-desc2 { 1318 font-size: 14px; 1319 line-height: 19px; 1320 padding: 17px 0 4px; 1321 } 1322 1323 .confirm-code-box { 1324 display: flex; 1325 justify-content: space-between; 1326 } 1327 1328 .confirm-code-box input { 1329 width: 200px; 1330 border: 1px solid #cccccc; 1331 border-radius: 10px; 1332 height: 35px; 1333 font-size: 14px; 1334 color: #212121; 1335 box-shadow: inset 1px 1px 2px rgba(0,0,0,0.4); 1336 text-indent: 8px; 1337 box-sizing: border-box; 1338 } 1339 .confirm-fn li { 1340 position: relative; 1341 display: block; 1342 font-size: 14px; 1343 font-weight: 600; 1344 line-height: 22px; 1345 color: #3366cc; 1346 padding-left: 20px; 1347 text-align: left; 1348 cursor: pointer; 1349 } 1350 1351 .confirm-fn li:before { 1352 content: ""; 1353 position: absolute; 1354 left: 0; 1355 top: 9px; 1356 width: 4px; 1357 height: 4px; 1358 background: #3366cc; 1359 } 1360 1361 .confirm-bottom { 1362 font-size: 11px; 1363 font-weight: 300; 1364 line-height: 22px; 1365 text-align: center; 1366 color: #212121; 1367 } 1368 1369 .confirm-bottom a {color: #3366cc;} 1370</style> 1371<style> 1372/*footer*/ 1373 #bdsm #footer a, 1374 #footer a { 1375 color: #fff; 1376 } 1377 #footer div { 1378 font-family: 'PT Sans', sans-serif; 1379 line-height: 17px; 1380 } 1381 #footer {overflow: unset !important; background-color: #1a1a1a; font-size: 12px;} 1382 .footer_wrapper { margin: 0 auto; width: 952px; padding: 20px 0 50px 0; } 1383 .copy, .links, .logos { display: inline-block; vertical-align: top;} 1384 .copy a { text-decoration: underline; } 1385 .copy { 1386 width: 347px; 1387 padding: 0 28px 0 6px; 1388 } 1389 .links { 1390 width: 422px; 1391 padding: 0 49px 0 47px; 1392 } 1393 .logos { 1394 padding: 0; 1395 width: 165px; 1396 } 1397 .languages { padding: 20px 0; } 1398 #footer .languages li { position:relative; float:left; width: 100%; } 1399 #footer .languages li a { display:block; color:#000; } 1400 #footer .languages li a.selected { color: #fff; font-size:16px; float:left; padding-right:11px; text-decoration:none; no-repeat right -648px; cursor:pointer; background: url('https://secureimage.securedataimages.com/images/bdsm.com/cover/images/sprite_newaff.png') no-repeat right -645px; } 1401 #footer .languages li ul { display:none; position:absolute; bottom:100%; left:-10px; padding:3px 10px; background:#FFFFFF; border:1px solid #CECECE; -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; -moz-box-shadow:0 0 1px 1px #CECECE; -webkit-box-shadow:0 0 1px 1px #CECECE; box-shadow:0 0 1px 1px #CECECE; z-index:201; } 1402 #footer .languages li:hover ul { display:block; } 1403 #footer .languages li ul li { color: #000; cursor: pointer; padding: 3px 0; } 1404 #footer .languages li ul li:hover { background: #eee; } 1405 @media screen and (max-width:980px) { 1406 #footer { padding-bottom: 20px; } 1407 #footer .footer_wrapper { width: 100%; } 1408 #footer .copy, #footer .links, #footer .logos { width: 80%; padding: 10px 0; margin: 0 auto; display: block; } 1409 #footer .rta, #footer .languages { display: inline-block; vertical-align: middle; } 1410 #footer .languages { padding-left: 50px; } 1411 } 1412 @media screen and (max-width:839px) { 1413 #footer .copy, #footer .links, #footer .logos { width: 80%; padding: 10px 0; margin: 0 auto; display: block; } 1414 #footer .rta, #footer .languages { display: inline-block; vertical-align: middle; } 1415 #footer .languages { padding-left: 50px; } 1416 } 1417</style> 1418<style type="text/css"> 1419 .logos { padding: 0 10px; } 1420 .cc_icon { margin-top: 30px; } 1421 .cc_icon img { height: 30px; } 1422 </style> 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446</head> 1447 1448<!-- from 181.215.65.66 to si210-162 on live_cd --> 1449 1450 1451 1452 1453 1454 1455 1456
1456<script src="https://secureimage.securedataimages.com/images/common/js/zxcvbn-async.js"></script>
1456 1457
1457<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-password_meter-1485319689.js"></script>
1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471
1471<script>/* header fruit2 */</script>
1471 1472 1473 1474 1475
1476<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-domLoadEvent-1559284417.js"></script>
1476 1477 1478 1479 1480<!-- COBRAND: bdsm.com --> 1481 1482 1483
1484<script src="//cdn.3dsintegrator.com/threeds.2.2.20240920.min.js"></script>
1484 1485 1486 1487 1488 1489
1490<script> 1491 if (!window.onerror) { 1492 window.onerror = function() {}; 1493 }</script>
1493 1494<!-- --><!-- --> 1495 1496<!-- SOC 33339 project start... --> 1497 1498<!-- SOC 33339 project end... var def->soc_33339_migrate ; var def->pgsite_message_center; var def->pgsites_profile-->
1498<script type="text/javascript" src="https://secureimage.securedataimages.com/images/js/vice/jquery-3.5.1.min.js"></script>
vendor: 1 bytes, line 1498
1498
1499<script type="text/javascript" src="https://secureimage.securedataimages.com/images/js/vice/jquery-migrate-3.3.0.js"></script>
1499<!-- -->
1500<script> 1501 //COMPATIBILITY - temporary legacy jQuery support fix 1502 jQuery.fn.live = function() { 1503 var len = arguments.length, 1504 events = arguments[0], 1505 data, 1506 handler; 1507 if (len == 3) { 1508 data = arguments[1]; 1509 handler = arguments[2]; 1510 } else { 1511 handler = arguments[1]; 1512 } 1513 return jQuery(document).on(events, this.selector, data, handler); 1514 };</script>
1514 1515
1516<script type="text/javascript" src="https://secureimage.securedataimages.com/images/js/handlebars/handlebars-v2.0.0.js"></script>
vendor: 1 bytes, line 1516
1516
1517<script src="https://secureimage.securedataimages.com/images/common/js/lodash/lodash.compat.min.js"></script>
vendor: 1 bytes, line 1517
1517
1518<script src="https://secureimage.securedataimages.com/images/js/vice/ffn_lowdash_mixins.js"></script>
vendor: 1 bytes, line 1518
1518
1519<script src="https://secureimage.securedataimages.com/images/js/jquery.storage_custom.js"></script>
vendor: 1 bytes, line 1519
1519
1520<script src="https://secureimage.securedataimages.com/images/common/js/jquery.cookie.js"></script>
vendor: 1 bytes, line 1520
1520
1521<script src="https://secureimage.securedataimages.com/images/common/js/jquery-ui-1.10.3.custom.min.js"></script>
1521 1522 1523
1523<script src="https://secureimage.securedataimages.com/images/common/js/backbone-min-1.1.2.js"></script>
1523 1524
1524<script type="text/javascript"> 1525 window.NO_FX_OVERRIDE = true; 1526 1527 </script>
1527 1528
1528<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-vice_desktop_core-1578007935.js"></script>
1528 1529 1530 1531 1532
1532<script id="messenger_main" type="text/x-handlebars-template" charset="utf-8"><ul class="tabs messenger-tabs"> 1533 <li data-tab-name="whos_online" class="active whos_online"><a href="#whos_online" data-role="button" data-click="selectTab"><span id="total_count" class="tab_count">0</span> {{lang.labels.tabs.whos_online}}</a></li> 1534 <li data-tab-name="friends" class="friends"><a href="#friends" data-role="button" data-click="selectTab">{{lang.labels.tabs.friends}} (<span id="friends_count" class="tab_count">0</span>)</a></li> 1535 <li data-tab-name="incoming" class="incoming"><a href="#incoming" data-role="button" data-click="selectTab">{{lang.labels.tabs.incoming}} (<span id="incoming_count" class="tab_count">0</span>)</a></li> 1536</ul> 1537 1538<div class="messenger-button-container"> 1539 <button data-click="handleMessengerHelpClick" class="btn btn-small help messenger-help-button" rel="tooltip" data-original-title="{{lang.tooltips.help_button}}"><i class="sprite-help"></i></button> 1540 <button data-click="handleMessengerMuteClick" class="btn btn-small volume messenger-mute-button" rel="tooltip" data-original-title="{{#if mute_incoming}}{{lang.tooltips.unmute_button}}{{else}}{{lang.tooltips.mute_button}}{{/if}}"><i class="sprite-volume"></i></button> 1541</div> 1542 1543<div class="messenger-body-section main-content no-broadcast">
1544 <div id="left-content" class="half-page-container"> 1545 1546 <button class="btn btn-blue btn-small messenger-broadcast-button" data-click="launchBroadcaster" data-istate="public">{{lang.buttons.startbroadcast}}</button> 1547 1548 <div class="messenger-body-section messenger-controls"> 1549 1550 <div class="messenger-search-container messenger-control" data-role="form" data-name="MessengerSearchForm" data-submit="MessengerView:searchWhosOnline"> 1551 <input type="text" name="search_terms" class="search-text messenger-search-text" placeholder="Username" data-submit-on-enter="true" data-required="true" /> 1552 <button class="btn btn-small messenger-search-button" data-click="MessengerSearchForm:submit"><i class="sprite-search"></i></button> 1553 </div> 1554 1555 {{filterPanel this}} 1556 1557 <div class="messenger-refresh-container messenger-control"> 1558 <button class="btn btn-small messenger-refresh-button" rel="tooltip-above" data-original-title="{{lang.tooltips.refresh_button}}" data-click="refreshWhosOnline"><i class="sprite-refresh"></i><span id="refresh_counter">--:--</span></button> 1559 <div class="messenger-refresh-indicator"></div> 1560 <div class="messenger-refresh-message"></div> 1561 <div class="messenger-pagination-container"></div> 1562 </div> 1563 1564 <div class="sort-container messenger-control"> 1565 <label id="messenger_sort_label" for="messenger_sortby">{{lang.labels.sort_by}}</label> 1566 <select id="messenger_sortby"> 1567 <option value="distance">{{lang.labels.distance}}</option> 1568 <option value="handle">{{lang.labels.handle}}</option> 1569 <option value="age">{{lang.labels.age}}</option> 1570 {{#if allow_public_broadcast}}<option value="webcam_dist">{{lang.labels.broadcasting_now}}</option>{{/if}} 1571 </select> 1572 </div> 1573 1574 </div> 1575 1576 {{>tab_container}} 1577 1578 <div class="passport-container"> 1579 <div class = "passport-row" 1580 data-role = "view" 1581 data-name = "MessengerPassportView" 1582 data-view = "MessengerPassport" 1583 data-messenger = "MessengerView" 1584 ></div> 1585 </div> 1586 </div> 1587 <!-- END LEFT CONTENT --> 1588 <!-- BEGIN RIGHT CONTENT --> 1589 <div id="right-content" class="half-page-container hide"> 1590 {{broadcasterPanel this}} 1591 </div> 1592 <!-- END RIGHT CONTENT --> 1593</div> 1594 1595</script>
vendor: 1 bytes, line 1595
1595
1596<script id="messenger_connection_dialog" type="text/x-handlebars-template" charset="utf-8"><div class='messenger-connection-dialog'> 1597 <center class="spinner_container"> 1598 Connecting to Instant Messenger...<br /> 1599 <span class="loading-spinner spinner-dots"><div class="spinner-animate"></div></span> 1600 <span class="dialog">{{dialogText}}</span> 1601 </center> 1602</div> 1603</script>
vendor: 1 bytes, line 1603
1603
1604<script id="chat_window_tmpl" type="text/x-handlebars-template" charset="utf-8"><div id="{{hash}}" class="page-engine-chan chat one-counter" data-type="{{data_type}}" data-handle="{{handle}}"> 1605 {{#unless is_embedded}}<div class="top {{hash}}">{{{chatheader}}}</div> 1606 <div class="video-container"><div id="lvp" width="0" height="0"></div></div>{{/unless}} 1607 <div class="content" id="chat-content">{{#if is_standard}}{{{messenger_paywall}}}{{/if}}{{{chathistory}}}</div> 1608 <div class="text"> 1609 <div class="broadcast"> 1610 <!-- Smilies Button --> 1611 <div class="chat-tools-content chat-tools-smileys btn-group"> 1612 <button class = "btn btn-small disabled" 1613 rel = "tooltip-above" 1614 data-role = "button" 1615 data-original-title = "{{smilies_button_tooltip}}" 1616 data-click = "handleSmileysButtonClick" 1617 > 1618 <span class="sprite-smiley sprite-smilies"></span> 1619 <span class="caret"></span> 1620 </button> 1621 </div> 1622 <!-- end Smilies Button --> 1623 <!-- Photo Upload Button --> 1624 <div class="chat-tools-content chat-tools-file"> 1625 <button class = "btn btn-small disabled" 1626 rel = "tooltip-above" 1627 data-role = "button" 1628 data-original-title = "{{photo_button_tooltip}}" 1629 data-click = "handleAddPhotoButtonClick" 1630 ><span class="sprite-photos"></span></button></div> 1631 <!-- end Photo Upload Button --> 1632 <!-- Interactions Button --> 1633 <div class="chat-tools-content chat-tools-interactions btn-group"> 1634 <button class ="btn btn-small dropdown-toggle interactions-button disabled" 1635 rel ="tooltip-below" 1636 data-role = "button" 1637 data-original-title ="{{report_button_tooltip}}" 1638 data-click ="handleInteractionsButtonClick" 1639 > 1640 <span class="sprite-interact"></span> 1641 <span class="caret"></span> 1642 </button> 1643 <ul class="dropdown-menu pull-up dropdown-menu-btn activity_container" pwsid="{{pwsid}}" handle="{{handle}}"> 1644 <li to_pwsid="{{to_pwsid}}" class="btn-action"> 1645 <a href="{{profile_url}}#EMAIL" target="ffmain"><span class="message_btn" url="{{message_btn_url}}" target="_blank">{{message_button_text}}</span></a> 1646 </li> 1647 1648 1649 <!-- hotlist button --> 1650 <span class="btn-action active_state" data-name="chat_hotlist_state" data-role="render" data-events="Parent.hotlist_state:set_state"> 1651 1652 <li class="btn-action" data-state='hotlist'> 1653 <a data-click="addToHotlist"> 1654 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">Hotlist</span> 1655 </a> 1656 </li> 1657 1658 <li class="btn-action" data-state='become_a_fan'> 1659 <a data-click="becomeAFan"> 1660 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">Be a Top Fan</span> 1661 </a> 1662 </li> 1663 1664 <li class="btn-action" data-state='hotlisted'> 1665 <a class="hotlist_btn "> 1666 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">In My Hotlist</span> 1667 </a> 1668 </li> 1669 1670 <li class="btn-action" data-state='bid_more'> 1671 <a class="top_fans_btn" data-click="bidOnMember">
1672 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">Bid More</span> 1673 </a> 1674 </li> 1675 1676 <li class="btn-action" data-state='top_fan'> 1677 <a class="top_fans_btn" data-click="bidOnMember"> 1678 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">#1 Fan</span> 1679 </a> 1680 </li> 1681 1682 <li class="btn-action" data-state='fan_rank' data-render-on-active="true"> 1683 <a class="hotlist_btn" data-click="bidOnMember"> 1684 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">#\{{getFanRank i_am_fan_of_rank}} Fan</span> 1685 </a> 1686 </li> 1687 1688 </span> 1689 1690 <!-- flirt button --> 1691 <span class="btn-action active_state" data-name="chat_flirtState" data-role="render" data-events="Parent.flirt_state:set_state" data-default_value="true"> 1692 1693 <li class="btn-action" data-state="can_flirt"> 1694 <a data-click="sendFlirt"> 1695 <span class="flirt_btn" rel="tooltip" data-tooltip-placement="above">Flirt</span> 1696 </a> 1697 </li> 1698 1699 <li class="btn-action" data-state="cant_flirt_standard"> 1700 <a data-click="redirectOrderFlirt"> 1701 <span class="flirt_btn" rel="tooltip" data-tooltip-placement="above">Flirt</i></span> 1702 </a> 1703 </li> 1704 1705 <li class="btn-action" data-state="cant_flirt"> 1706 <span class="flirt_btn" rel="tooltip" data-tooltip-placement="above">Flirted</span> 1707 </li> 1708 1709 </span> 1710 1711 <!-- friend button --> 1712 <span class="btn-action active_state" data-name="chat_friendState" data-role="render" data-events="Parent.friend_status:set_state" data-default_value="true"> 1713 1714 <li class="btn-action" data-state="can_friend"> 1715 <a data-click="handleFriendInvite"> 1716 <span class="friend_btn">Add Friend</span> 1717 </a> 1718 </li> 1719 1720 <li class="btn-action" data-state="invite_sent"> 1721 <span class="friend_btn">Request Sent</span> 1722 </li> 1723 1724 <li class="btn-action" data-state="is_friend"> 1725 <span class="friend_btn">Already Friends</span> 1726 </li> 1727 </span> 1728 1729 <li class="btn-action"><a data-click="handleBanMemberClick" class="messenger_block">Block this member</a></li> 1730 <li class="btn-action"><a data-click="handleReportAbuseClick" class="messenger_report">Report abuse</a></li> 1731 </ul> 1732 </div> 1733 <!-- end Interactions Button --> 1734 <!-- Virtual Gifts Button --> 1735 <div class="chat-tools-content chat-tools-vgift"><button class="btn btn-small disabled" rel="tooltip-above" data-click="launchVGift" data-original-title="Virtual Gifts" data-pwsid="{{pwsid}}" data-handle="{{handle}}"><span class="sprite-virtual_gift"></span></button></div> 1736 <!-- end Virtual Gifts Button --> 1737 <!-- Tipping Button --> 1738 <div class="chat-tools-content chat-tools-tip"><button class="btn btn-small btn-blue send-tip" rel="tooltip-above" data-click="sendTip" data-original-title="Send Tips" data-pwsid="{{pwsid}}" data-handle="{{handle}}"><span class="sprite-coins-white"></span><span class="btn-text">Tip</span></button></div> 1739 <!-- end Tipping Button --> 1740 <!-- Start Webcam Button --> 1741 <button id="chat_broadcast_button" data-role="button" class="btn btn-small disabled" data-click="handleSendWebcamButtonClick">{{start_webcam_btn}}</button> 1742 <!-- end Start Webcam Button --> 1743 </div> 1744 <div class="compose"> 1745 <div class="textarea_container"> 1746 <div class="textarea_left"> 1747 <textarea class="message-area focusable" data-chatstates="true" /></textarea> 1748 </div> 1749 <div class="textarea_right"> 1750 <button class="btn btn-small send_chat_button" data-role="button" data-click="sendMessage">{{send_btn}}</button> 1751 </div> 1752 </div> 1753 </div> 1754 <div class="footer">{{#if show_chat_invite_number}}Chat invites left:<span id='chat_invite_num' class="chat_invite_num">{{chat_invite_num}}</span>{{/if}}</div> 1755 <iframe class="submit_frame" name="submit_frame"></iframe> 1756 </div> 1757</div> 1758{{#if host_messenger}}<iframe class="embedded messenger" src="{{messenger_url}}"/>{{/if}} 1759</script>
vendor: 1 bytes, line 1759
1759
1760<script id="chat_window_row" type="text/x-handlebars-template" charset="utf-8"><span class="date">{{message_time}}<i class="delivery{{#if outgoing}} sprite-delivery-pending" rel="tooltip-left" data-original-title="Delivering...{{/if}}"></i></span> 1761<b class="name {{message_is_from}}">{{message_is_from_text}}: </b> 1762<div 1763 class="message_text" 1764 data-id="{{message_id}}" 1765> 1766 {{{message_text}}} 1767</div> 1768</script>
vendor: 1 bytes, line 1768
1768
1769<script id="messenger_row" type="text/x-handlebars-template" charset="utf-8"><div class="member_cell_image_container"> 1770 <a data-profile-url="{{{profile_url}}}" data-click="handleProfileLinkClick" data-target="ffmain"> 1771 <div class="filter_box"> 1772 <img src="{{img}}" class="filter rating{{from_rating}}" border="0"/> 1773 </div> 1774 </a> 1775 1776 {{#if image_overlay}}<span class="image_overlay_text">{{image_overlay}}</span>{{/if}} 1777</div> 1778<div class="member_cell_right"> 1779 {{#unless is_passport}} {{messenger_buttons rowtype id}} {{/unless}} 1780 {{#if video_header_row}}{{messenger_buttons "chatheader" id}}{{/if}} 1781 {{#if video_header_row}} <a class="report-abuse-link" data-click="VideoViewer:handleAbuseLinkClick">Report abuse</a> {{/if}} 1782</div> 1783<div class="member_cell_info_container"> 1784 <div class="member_cell_info_row1"> 1785 <a data-profile-url="{{{profile_url}}}" data-click="handleProfileLinkClick" data-target="ffmain"><strong class="handle">{{handle}}</strong></a> 1786 <span class="gender">{{gender}}</span> 1787 1788 {{#unless is_passport}} {{badge_container}} {{/unless}} 1789 1790 </div> 1791 <div class="member_cell_info_row2"> 1792 <div class="location">{{{location}}}{{#if distance_text}} ({{distance_text}}){{/if}}</div> 1793 <div class="details"> 1794 {{#if is_passport}} 1795 {{passport_details this}} 1796 {{else}} 1797 {{#if message_body}}<div class="incoming_message" rel="tooltip" data-id="{{message_id}}" data-original-title="{{message_body}}">{{message_body}}</div>{{/if}} 1798 {{/if}} 1799 </div> 1800 </div> 1801</div> 1802</script>
vendor: 1 bytes, line 1802
1802
1803<script id="badge_container" type="text/x-handlebars-template" charset="utf-8"><div class="badge_container v20"> 1804{{#unless no_badges}} 1805 {{!-- VERIFIED MEMBER --}} 1806 {{{showConfirmed this icon_only show_tiny_icon}}} 1807 1808 {{!-- GOLD MEMBER --}} 1809 {{#unless vip_member}}{{#if gold_member}} 1810 <span {{#unless no_tooltip}}data-original-title="Gold Member" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge gold{{/unless}}"><i class="{{#if show_icon}}sprite-badge-crown{{/if}}{{#if show_tiny_icon}} sprite-tiny-gold{{/if}}"></i>{{#unless icon_only}}Gold{{/unless}}</span> 1811 {{/if}}{{/unless}} 1812 {{!-- VIP MEMBER --}} 1813 {{#if vip_member}} 1814 <span {{#unless no_tooltip}}data-original-title="VIP Member" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge vip{{/unless}}"><i class="{{#if show_icon}}sprite-badge-crown{{/if}}{{#if show_tiny_icon}} sprite-tiny-vip{{/if}}"></i>{{#unless icon_only}}VIP{{/unless}}</span> 1815 {{/if}} 1816 1817 {{!-- ONLINE BADGES - ONLY ONE OF THESE SHOULD BE DISPLAYED --}} 1818 {{!-- ONLINE --}} 1819 {{#if badges.online}}<span {{#unless no_tooltip}}data-original-title="Online Now" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-online{{/if}}{{#if show_tiny_icon}} sprite-tiny-online{{/if}}"></i>{{#unless icon_only}}Online{{/unless}}</span>{{/if}} 1820 {{!-- ON IM --}} 1821 {{#if badges.on_im}}<span data-click="openIM" {{#unless no_tooltip}}data-original-title="On IM Now" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-imc{{/if}}{{#if show_tiny_icon}} sprite-tiny-imc{{/if}}"></i>{{#unless icon_only}}On IM{{/unless}}</span>{{/if}} 1822 {{!-- ON MOBILE IM --}} 1823 {{#if badges.on_mobile_im}}<span data-click="openIM" {{#unless no_tooltip}}data-original-title="On Mobile IM" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-mobile-im{{/if}}{{#if show_tiny_icon}} sprite-tiny-mobile-im{{/if}}"></i>{{#unless icon_only}}On Mobile IM{{/unless}}</span>{{/if}} 1824 {{!-- BROADCASTING --}} 1825 {{#if badges.broadcasting}}{{#if broadcasting_url}}<a href="{{{broadcasting_url}}}">{{/if}}<span data-click="launchViewer" data-stream="{{stream_id}}" {{#unless no_tooltip}}data-original-title="Broadcasting Now" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-broadcasting{{/if}}{{#if show_tiny_icon}} sprite-tiny-broadcasting{{/if}}"></i>{{#unless icon_only}}Live on Cam{{/unless}}</span>{{#if broadcasting_url}}</a>{{/if}}{{/if}} 1826 1827 {{!-- FRIENDS --}} 1828 {{#if is_friend}} 1829 <span {{#unless no_tooltip}}data-original-title="Already Friends" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge friends{{/unless}}"><i class="{{#if show_icon}}sprite-badge-friends{{/if}}{{#if show_tiny_icon}} sprite-tiny-friends{{/if}}"></i>{{#unless icon_only}}Friends{{/unless}}</span> 1830 {{/if}} 1831 1832 {{!-- TOP FAN --}} 1833 {{#if fan_of_mine_rank}} 1834 <span {{#unless no_tooltip}}data-original-title="{{#if rank_display_limit}} #99+ Fan {{else}} #{{fan_of_mine_rank}} Fan{{/if}}" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge{{/unless}} {{get_fan_rank_css fan_of_mine_rank "stat"}}"> 1835 <i class="{{#if show_icon}}sprite-topfan{{/if}}{{#if show_tiny_icon}} sprite-tiny-topfan sprite-tiny-topfans{{/if}}"></i>{{#unless icon_only}}{{#if rank_display_limit}} #99+ Fan {{else}} #{{fan_of_mine_rank}} Fan{{/if}}{{/unless}} 1836 </span> 1837 {{/if}} 1838{{/unless}} 1839</div> 1840</script>
vendor: 1 bytes, line 1840
1840
1841<script id="messenger_row_buttons" type="text/x-handlebars-template" charset="utf-8">{{#unless incomplete}} 1842 {{#if is_incoming_row}} 1843 <button 1844 data-click = "launchConversation" 1845 rid = "{{id}}" 1846 class = "btn btn-tiny chat_button messenger_reply btn-inverse" 1847 > 1848 {{lang.buttons.reply}} 1849 </button> 1850 {{/if}} 1851 {{#unless can_not_chat}} 1852 {{showbutton rowtype this}} 1853 {{/unless}} 1854 {{#if is_viewer_row}} 1855 <span class="broadcast_vote_box"><span class="label _badge warning">{{broadcast_vote}}</span></span> 1856 {{/if}} 1857 {{#unless chat_header_row}} 1858 {{#unless is_self}} 1859 {{#if webcam_on}} 1860 <button 1861 data-role="button" 1862 rid="{{id}}" 1863 class="btn btn-tiny broadcast_button{{#unless can_view_their_broadcast}} disabled{{/unless}}" 1864 data-stream="{{stream_id}}" 1865 rel="tooltip" 1866 data-tooltip-placement="below" 1867 data-original-title="{{broadcast_button_tooltip}}" 1868 data-click="launchViewer" 1869 > 1870 <i class="sprite-broadcast{{#if has_audio}}-audio{{/if}}"></i> 1871 </button> 1872 {{/if}} 1873 {{/unless}} 1874 {{/unless}} 1875{{/unless}} 1876{{#if incomplete}}<span class="spinner_dots"></span>{{/if}} 1877</script>
vendor: 1 bytes, line 1877
1877
1878<script id="messenger_chatheader_button" type="text/x-handlebars-template" charset="utf-8">{{#unless has_video}} 1879<button 1880 data-role = "button" 1881 class = "btn btn-tiny view_webcam_button{{#unless can_view_their_broadcast}} disabled{{/unless}}" 1882 data-stream = "{{stream_id}}" 1883 data-click = "launchVideo" 1884 data-handle = "{{handle}}" 1885 rid = "{{id}}" 1886> 1887{{view_button_text}} 1888</button> 1889 {{/unless}} 1890 {{#if has_video}} 1891<button 1892 data-role = "button" 1893 class = "btn btn-tiny close_webcam_button" 1894 data-click = "closeVideo" 1895 data-handle = "{{handle}}" 1896 rid = "{{id}}" 1897> 1898{{close_button_text}} 1899</button> 1900{{/if}} 1901</script>
vendor: 1 bytes, line 1901
1901
1902<script id="messenger_paywall" type="text/x-handlebars-template" charset="utf-8"><div class="messenger_paywall"> 1903 <div class="paywall_header">Want UNLIMITED chat on Instant Messenger?</div> 1904 <a href="https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=IMCPaywall&trlid=handlebars-messenger_paywall-1" target="ffmain"><button class="paywall_button btn btn-small btn-red">Upgrade to Gold</button></a> 1905 <div class="paywall_text">Standard members can only start 5 instant messenger conversations per day. We do this to give our Gold members more access to other members.</div> 1906</div> 1907 1908 1909 1910 1911</script>
vendor: 1 bytes, line 1911
1911
1912<script id="messenger_filters" type="text/x-handlebars-template" charset="utf-8"><!-- BEGIN FILTERS DROPDOWN--> 1913<div class="btn-group click_hide_only messenger-filter-container messenger-control"> 1914 <a id="messenger_filter_button" class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#" afterClick="CD.messenger.resizeWindow()"><span>{{lang.buttons.filters}}</span> (<span id="online_count">0</span>)<span class="caret"></span></a> 1915 <ul class="dropdown-menu dropdown-menu-btn"> 1916 <li> 1917 <div class="messenger-filter-form" data-role="form" data-name="MessengerFilterForm" data-submit="MessengerView:filterWhosOnline"> 1918 {{#if filters.show_sex}} 1919 <div id="filter_find_sex_container" class="messenger_filter_container" data-filter-section-name="show_sex"> 1920 <div class="filter_section_header">{{lang.labels.form.show}}:</div> 1921 <div class="filter_section filter_section_left"> 1922 <label for="find_sex_1"><input type="checkbox" id="find_sex_1" value="1" name="find_sex" />{{global_lang.gender.men}}</label> 1923 <label for="find_sex_2"><input type="checkbox" id="find_sex_2" value="2" name="find_sex" />{{global_lang.gender.women}}</label> 1924 <label for="find_sex_3"><input type="checkbox" id="find_sex_3" value="3" name="find_sex" />{{global_lang.gender.couples}}</label> 1925 <label for="find_sex_7"><input type="checkbox" id="find_sex_7" value="7" name="find_sex" />{{global_lang.gender.trans}}</label> 1926 </div> 1927 <div class="filter_section filter_section_right"> 1928 <label for="find_sex_4"><input type="checkbox" id="find_sex_4" value="4" name="find_sex" />{{global_lang.gender.groups}}</label> 1929 <label for="find_sex_5"><input type="checkbox" id="find_sex_5" value="5" name="find_sex" />{{global_lang.gender.lesbiancouples}}</label> 1930 <label for="find_sex_6"><input type="checkbox" id="find_sex_6" value="6" name="find_sex" />{{global_lang.gender.gaycouples}}</label> 1931 <div class="filter_section_deselect">{{lang.buttons.uncheck_all}}</div> 1932 </div> 1933 </div> 1934 {{/if}} 1935 <div id="filter_find_age_container" class="messenger_filter_container" data-filter-section-name="age"> 1936 <div class="left_column">{{lang.labels.form.between}}:</div> 1937 <div> 1938 <input type="text" id="min_age" size="3" /> {{lang.labels.form.and}} <input type="text" id="max_age" size="3" /> 1939 </div> 1940 </div> 1941 1942 <!-- BEGIN ADDITIONAL FILTERS (40543)--> 1943 {{#if filters.race}} 1944 <div id="filter_find_race_container" class="messenger_filter_container collapsible open" data-filter-section-name="race"> 1945 <div class="toggle-sprite-arrow-up"></div> 1946 <div class="filter_section_header">{{lang.labels.form.race}}:</div> 1947 <div class="filter_section filter_section_left"> 1948 <label for="find_race_1"><input type="checkbox" id="find_race_1" value="1" name="find_race" />{{global_lang.race.nativeamerican}}</label> 1949 <label for="find_race_2"><input type="checkbox" id="find_race_2" value="2" name="find_race" />{{global_lang.race.asian}}</label> 1950 <label for="find_race_3"><input type="checkbox" id="find_race_3" value="3" name="find_race" />{{global_lang.race.black}}</label> 1951 <label for="find_race_4"><input type="checkbox" id="find_race_4" value="4" name="find_race" />{{global_lang.race.caucasian}}</label> 1952 <label for="find_race_5"><input type="checkbox" id="find_race_5" value="5" name="find_race" />{{global_lang.race.eastindian}}</label> 1953 </div> 1954 <div class="filter_section filter_section_right"> 1955 <label for="find_race_6"><input type="checkbox" id="find_race_6" value="6" name="find_race" />{{global_lang.race.hispanic}}</label> 1956 <label for="find_race_7"><input type="checkbox" id="find_race_7" value="7" name="find_race" />{{global_lang.race.middleeastern}}</label> 1957 <label for="find_race_8"><input type="checkbox" id="find_race_8" value="8" name="find_race" />{{global_lang.race.mixed}}</label> 1958 <label for="find_race_9"><input type="checkbox" id="find_race_9" value="9" name="find_race" />{{global_lang.race.other}}</label> 1959 <div class="filter_section_deselect">{{lang.buttons.uncheck_all}}</div> 1960 </div> 1961 </div> 1962 {{/if}} 1963 {{#if filters.body_type}} 1964 <div id="filter_find_bodytype_container" class="messenger_filter_container collapsible" data-filter-section-name="body_type"> 1965 <div class="toggle-sprite-arrow-down"></div> 1966 <div class="filter_section_header">{{lang.labels.form.bodytype}}:</div> 1967 <div class="filter_section filter_section_left"> 1968 <label for="find_bodytype_1"><input type="checkbox" id="find_bodytype_1" value="1" name="find_bodytype" />{{global_lang.bodytype.average}}</label> 1969 <label for="find_bodytype_2"><input type="checkbox" id="find_bodytype_2" value="2" name="find_bodytype" />{{global_lang.bodytype.slimpetite}}</label> 1970 <label for="find_bodytype_3"><input type="checkbox" id="find_bodytype_3" value="3" name="find_bodytype" />{{global_lang.bodytype.athletic}}</label> 1971 <div class="filter_section_deselect">{{lang.buttons.uncheck_all}}</div> 1972 </div> 1973 <div class="filter_section filter_section_right"> 1974 <label for="find_bodytype_4"><input type="checkbox" id="find_bodytype_4" value="4" name="find_bodytype" />{{global_lang.bodytype.ample}}</label> 1975 <label for="find_bodytype_5"><input type="checkbox" id="find_bodytype_5" value="5" name="find_bodytype" />{{global_lang.bodytype.extrapadding}}</label> 1976 <label for="find_bodytype_6"><input type="checkbox" id="find_bodytype_6" value="6" name="find_bodytype" />{{global_lang.bodytype.large}}</label> 1977 </div> 1978 </div> 1979 {{/if}} 1980 {{#if filters.sex_orient}} 1981 <div id="filter_find_orientation_container" class="messenger_filter_container collapsible" data-filter-section-name="sex_orient"> 1982 <div class="toggle-sprite-arrow-down"></div> 1983 <div class="filter_section_header">{{lang.labels.form.orientation}}:</div> 1984 <div class="filter_section filter_section_left"> 1985 <label for="find_orientation_1"><input type="checkbox" id="find_orientation_1" value="1" name="find_orientation" />{{global_lang.orientation.straight}}</label> 1986 <label for="find_orientation_2"><input type="checkbox" id="find_orientation_2" value="2" name="find_orientation" />{{global_lang.orientation.bisexual}}</label> 1987 <div class="filter_section_deselect">{{lang.buttons.uncheck_all}}</div> 1988 </div> 1989 <div class="filter_section filter_section_right"> 1990 <label for="find_orientation_3"><input type="checkbox" id="find_orientation_3" value="3" name="find_orientation" />{{global_lang.orientation.bicurious}}</label> 1991 <label for="find_orientation_4"><input type="checkbox" id="find_orientation_4" value="4" name="find_orientation" />{{global_lang.orientation.gay}}</label> 1992 </div> 1993 </div> 1994 {{/if}} 1995 {{#if filters.marital_status}} 1996 <div id="filter_find_maritalstatus_container" class="messenger_filter_container collapsible" data-filter-section-name="marital_status"> 1997 <div class="toggle-sprite-arrow-down"></div> 1998 <div class="filter_section_header">{{lang.labels.form.maritalstatus}}:</div> 1999 <div class="filter_section filter_section_left"> 2000 <label for="find_maritalstatus_1"><input type="checkbox" id="find_maritalstatus_1" value="1" name="find_maritalstatus" />{{global_lang.maritalstatus.single}}</label> 2001 <label for="find_maritalstatus_2"><input type="checkbox" id="find_maritalstatus_2" value="2" name="find_maritalstatus" />{{global_lang.maritalstatus.married}}</label> 2002 <label for="find_maritalstatus_3"><input type="checkbox" id="find_maritalstatus_3" value="3" name="find_maritalstatus" />{{global_lang.maritalstatus.divorced}}</label> 2003 <div class="filter_section_deselect">{{lang.buttons.uncheck_all}}</div> 2004 </div> 2005 <div class="filter_section filter_section_right"> 2006 <label for="find_maritalstatus_4"><input type="checkbox" id="find_maritalstatus_4" value="4" name="find_maritalstatus" />{{global_lang.maritalstatus.separated}}</label> 2007 <label for="find_maritalstatus_5"><input type="checkbox" id="find_maritalstatus_5" value="5" name="find_maritalstatus" />{{global_lang.maritalstatus.attached}}</label> 2008 <label for="find_maritalstatus_6"><input type="checkbox" id="find_maritalstatus_6" value="6" name="find_maritalstatus" />{{global_lang.maritalstatus.widowed}}</label> 2009 </div> 2010 </div> 2011 {{/if}} 2012 <!-- END ADDITIONAL FILTERS--> 2013 2014 <div id="filter_find_show_container" class="messenger_filter_container" data-filter-section-name="show"> 2015 <div class="left_column">{{lang.labels.form.options}}:</div> 2016 <div id="filter_find_show_left" class="filter_section_right"> 2017 <label for="show_all"><input type="radio" id="show_all" value="show_all" name="find_show" checked />{{lang.labels.filter.allmembers}}</label> 2018 <label for="show_only_photos"><input type="radio" id="show_only_photos" value="show_only_photos" name="find_show" />{{lang.labels.filter.withphotos}}</label> 2019 <label for="show_only_broadcasting"><input type="radio" id="show_only_broadcasting" value="show_only_broadcasting" name="find_show" />{{lang.labels.filter.broadcasting}}</label> 2020 <label for="show_only_wsound"><input type="radio" id="show_only_wsound" value="show_only_wsound" name="find_show" />{{lang.labels.filter.broadcastingsound}}</label> 2021 </div> 2022 </div> 2023 <div id="filter_find_apply_container" class="messenger_filter_container"> 2024 <label for="apply_incoming"><input type="checkbox" id="apply_incoming" value="1" name="apply_incoming" />{{lang.labels.filter.applytoincoming}}</label> 2025 </div> 2026 <div id="filter_find_button_container"> 2027 <button id="update_filter_button" class="btn btn-small primary" data-click="MessengerFilterForm:submit">{{lang.buttons.filterupdate}}</button> 2028 <button id="update_cancel_button" class="btn btn-small" data-click="MessengerVie
2028w:handleFilterCancelClick">{{lang.buttons.filtercancel}}</button> 2029 </div> 2030 </div> 2031 </li> 2032 </ul> 2033</div> 2034<!-- END FILTERS DROPDOWN--> 2035</script>
vendor: 1 bytes, line 2035
2035
2036<script id="messenger_tab_container" type="text/x-handlebars-template" charset="utf-8"><div id="tab_content_container" class="tab_container"> 2037 <div class="dialog"></div> 2038 <div class="whos_online tab_content whos_online_content"> 2039 2040 <div class = "messenger_container tab_content_rows" 2041 data-role = "view" 2042 data-name = "MessengerWhosOnlineView" 2043 data-tab = "whos_online" 2044 data-view = "MessengerRowContainer" 2045 data-collection = "MessengerWhosOnline" 2046 data-use-filters = "true" 2047 data-pagination-limit = "50" 2048 data-messenger = "MessengerView" 2049 data-list-item-view = "MessengerRow" 2050 ></div> 2051 2052 2053 <a id="messenger_view_more" class="more-link hide" data-click="handleViewMoreClick"> 2054 <span id="messenger_view_more_link" class="more-link-text">View More</span> 2055 </a> 2056 2057 </div> 2058 2059 <div class="friends tab_content friends_content hide"> 2060 <div class = "messenger_container tab_content_rows" 2061 data-role = "view" 2062 data-name = "MessengerFriendsView" 2063 data-tab = "friends" 2064 data-view = "MessengerRowContainer" 2065 data-collection = "MessengerFriends" 2066 data-messenger = "MessengerView" 2067 data-list-item-view = "MessengerRow" 2068 > 2069 <div class="no-friends">No friends are online.</div> 2070 </div> 2071 2072 </div> 2073 2074 <div class="incoming tab_content incoming_content hide"> 2075 <div class = "messenger_container tab_content_rows" 2076 data-role = "view" 2077 data-name = "MessengerIncomingView" 2078 data-tab = "incoming" 2079 data-view = "MessengerRowContainer" 2080 data-collection = "MessengerIncoming" 2081 data-messenger = "MessengerView" 2082 data-list-item-view = "MessengerRow" 2083 data-rowtype = "incoming" 2084 > 2085 <div class="no-incoming">You currently don't have any incoming messages.</div> 2086 </div> 2087 2088 <div class="missed_incoming_content hide" id="missed_incoming_container"> 2089 <a class="btn-link missed_incoming_link hide" data-click="toggleMissedIncoming"><span>See missed chat messages</span><span class="caret"></span></a> 2090 <div id="missed_incoming_rows" class="tab_content_rows hide"></div> 2091 </div> 2092 2093 </div> 2094 2095</div> 2096</script>
vendor: 1 bytes, line 2096
2096
2097<script id="messenger_incoming_button" type="text/x-handlebars-template" charset="utf-8"><div class="decline btn-group"><button rid="{{id}}" class="btn btn-tiny dropdown-toggle" data-toggle="dropdown" data-click="handleIncomingDeclineButtonClick"><span>{{decline_button_text}}</span><span class="caret"></span></button> 2098 <ul class="dropdown-menu anchor-right dropdown-menu-btn"> 2099 <li><a data-click="handleBlockMemberClick" class="messenger_ignore">{{ignore_button_text}}</a></li> 2100 <li><a data-click="handleBanMemberClick" class="messenger_block">{{block_button_text}}</a></li> 2101 <li><a data-click="handleAutoreplyClick" class="messenger_autoreply">{{autoreply_button_text}}</a></li> 2102 <li class="hide"> 2103 <textarea class="messenger_autoreply_field" placeholder="Type message here..."></textarea> 2104 <button class="messenger_autoreply_button btn btn-blue btn-small" data-click="handleAutoreplyButtonClick">Send</button> 2105 </li> 2106 </ul> 2107</div> 2108</script>
vendor: 1 bytes, line 2108
2108
2109<script id="messenger_viewer_button" type="text/x-handlebars-template" charset="utf-8"><div class="btn-group"> 2110 <button 2111 rid="{{id}}" 2112 class="btn btn-tiny dropdown-toggle" 2113 data-toggle="dropdown" 2114 data-click="handleViewerRowDropdownToggle" 2115 ><span>{{more_button_text}}</span><span class="caret"></span></button> 2116 <ul class="dropdown-menu dropdown-menu-btn"> 2117 <li><a href="#" class="viewer_sendim" data-click="launchConversation">{{send_button_text}}</a></li> 2118 <li><a href="#" class="viewer_remove" data-click="handleRemoveViewer">{{remove_button_text}}</a></li> 2119 <li><a href="#" class="viewer_block" data-click="handleBlockViewer">{{block_button_text}}</a></li> 2120 </ul> 2121</div> 2122</script>
vendor: 1 bytes, line 2122
2122
2123<script id="messenger_member_button" type="text/x-handlebars-template" charset="utf-8"><button 2124 data-role="button" 2125 data-click="launchConversation" 2126 rid="{{id}}" 2127 class="btn btn-tiny chat_button">{{send_button_text}}</button> 2128</script>
vendor: 1 bytes, line 2128
2128
2129<script id="messenger_passport_details" type="text/x-handlebars-template" charset="utf-8"><div class="detail_links"> 2130 {{#if num_photos}}<a href="{{photo_manager_url}}" target="ffmain"><span>{{num_photos}} {{photos_text}}</span></a>{{#if num_videos}} {{photo_divider}}{{else}}{{#if num_friends}} {{photo_divider}} {{/if}}{{/if}}{{/if}} 2131 {{#if num_videos}}<a href="{{video_manager_url}}" target="ffmain"><span>{{num_videos}} {{videos_text}}</span></a>{{#if num_friends}}{{video_divider}}{{/if}}{{/if}} 2132 {{#if num_friends}}<a href="{{friends_manager_url}}" target="ffmain"><span>{{num_friends}} {{friends_text}}</span></a>{{/if}} 2133</div> 2134 2135{{badge_container this}} 2136 2137<div class="activity_container horizontal action-btns" pwsid="{{from_pwsid}}" handle="{{from_handle}}"> 2138 2139 <div class="btn-action"><a href="{{profile_url}}#EMAIL" target="ffmain"><span class="message_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Message"><button class="btn"><i class="sprite-envelope"></i></button></span></a></div> 2140 2141 <!-- hotlist button --> 2142 <div class="btn-action active_state" data-name="passport_hotlist_state" data-role="render" data-events="Parent.hotlist_state:set_state"> 2143 2144 <div class="btn-action" data-state='hotlist'> 2145 <a data-click="addToHotlist"> 2146 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Hotlist"> 2147 <button class="btn"><i class="sprite-hotlist"></i></button> 2148 </span> 2149 </a> 2150 </div> 2151 2152 <div class="btn-action" data-state='become_a_fan'> 2153 <a data-click="becomeAFan"> 2154 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Be a Top Fan"> 2155 <button class="btn "><i class="sprite-hotlist"></i></button> 2156 </span> 2157 </a> 2158 </div> 2159 2160 <div class="btn-action" data-state='hotlisted'> 2161 <a class="hotlist_btn "> 2162 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="In My Hotlist"> 2163 <button class="btn"><i class="sprite-hotlist"></i></button> 2164 </span> 2165 </a> 2166 </div> 2167 2168 <div class="btn-action" data-state='bid_more'> 2169 <a class="top_fans_btn" data-click="bidOnMember"> 2170 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Bid More"> 2171 <button class="btn btn-blue"><i class="sprite-topfan-star-alt"></i></button> 2172 </span> 2173 </a> 2174 </div> 2175 2176 <div class="btn-action" data-state='top_fan'> 2177 <a class="top_fans_btn" data-click="bidOnMember"> 2178 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="#1 Fan"> 2179 <button class="btn btn-blue"><i class="sprite-topfan-star-alt"></i></button> 2180 </span> 2181 </a> 2182 </div> 2183 2184 <div class="btn-action" data-state='fan_rank' data-render-on-active="true"> 2185 <a class="hotlist_btn" data-click="bidOnMember"> 2186 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="#\{{getFanRank i_am_fan_of_rank}} Fan"> 2187 <button class="btn btn-blue"><i class="sprite-hotlist"></i></button> 2188 </span> 2189 </a> 2190 </div> 2191 2192 </div> 2193 2194 <!-- flirt button --> 2195 <div class="btn-action active_state" data-name="passport_flirtState" data-role="render" data-events="Parent.flirt_state:set_state" data-default_value="true"> 2196 2197 <div class="active" data-state="can_flirt"> 2198 <a class="btn btn-small" data-click="sendFlirt" rel="tooltip" data-tooltip-placement="above" data-original-title="Flirt"> 2199 <div class="btn_text_wrapper flirt_btn"> 2200 <i class="sprite-flirt-face"></i> 2201 </div> 2202 </a> 2203 </div> 2204 2205 <div class="active" data-state="cant_flirt_standard"> 2206 <a class="btn btn-small" data-click="redirectOrderFlirt" rel="tooltip" data-tooltip-placement="above" data-original-title="Flirt"> 2207 <div class="btn_text_wrapper flirt_btn"> 2208 <i class="sprite-flirt-face"></i> 2209 </div> 2210 </a> 2211 </div> 2212 2213 <div class="inactive" data-state="cant_flirt"> 2214 <div class="btn btn-small disabled" rel="tooltip" data-tooltip-placement="above" data-original-title="Flirted"> 2215 <div class="btn_text_wrapper flirt_btn"> 2216 <i class="sprite-flirt-face"></i> 2217 </div> 2218 </div> 2219 </div> 2220 2221 </div> 2222 2223 <!-- friend button --> 2224 <div class="btn-action active_state" data-name="passport_friendState" data-role="render" data-events="Parent.friend_status:set_state" data-default_value="true"> 2225 2226 <div class="btn-action" data-state="can_friend"> 2227 <a data-click="handleFriendInvite"> 2228 <button class="btn invite_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Add Friend"><i class="sprite-add-friend"></i></button> 2229 </a> 2230 </div> 2231 2232 <div class="btn-action" data-state="invite_sent">
2233 <span class="btn disabled"> 2234 <button class="btn invite_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Request Sent"><i class="sprite-add-friend"></i></button> 2235 </span> 2236 </div> 2237 2238 <div class="btn-action" data-state="is_friend"> 2239 <span class="btn disabled"> 2240 <button class="btn invite_btn" rel="tooltip" data-tooltip-placement="above" data-original-title="Already Friends"><i class="sprite-add-friend"></i></button> 2241 </span> 2242 </div> 2243 2244 </div> 2245 2246</div> 2247 2248{{#if passport_adjustable}} 2249<div class="activity_container dropdown"> 2250 <div class="btn-link"><span>Interact</span><i class="caret"></i></div> 2251 2252 <div class="activity_container left action-btns" pwsid="{{from_pwsid}}" handle="{{from_handle}}"> 2253 2254 <div class="btn-action"><a href="{{profile_url}}#EMAIL" target="ffmain"><span class="message_btn"><button class="btn"><i class="sprite-envelope"></i></button><span class="_text">Message</span></span></a></div> 2255 2256 <!-- hotlist button --> 2257 <div class="btn-action active_state" data-name="hotlist_state" data-role="render" data-events="Parent.hotlist_state:set_state"> 2258 2259 <div class="btn-action" data-state='hotlist'> 2260 <a class="hotlist_btn" data-click="addToHotlist"> 2261 <span class="btn"><i class="sprite-hotlist"></i></span> 2262 Hotlist 2263 </a> 2264 </div> 2265 2266 <div class="btn-action" data-state='become_a_fan'> 2267 <a class="hotlist_btn " data-click="becomeAFan"> 2268 <span class="btn "><i class="sprite-hotlist"></i></span> 2269 Be a Top Fan 2270 </a> 2271 </div> 2272 2273 <div class="btn-action" data-state='hotlisted'> 2274 <a class="hotlist_btn "> 2275 <span class="btn "><i class="sprite-hotlist"></i></span> 2276 In My Hotlist 2277 </a> 2278 </div> 2279 2280 <div class="btn-action" data-state='bid_more'> 2281 <a class="top_fans_btn" data-click="bidOnMember"> 2282 <span class="btn btn-blue"><i class="sprite-topfan-star-alt"></i></span> 2283 Bid More 2284 </a> 2285 </div> 2286 2287 <div class="btn-action" data-state='top_fan'> 2288 <a class="top_fans_btn" data-click="bidOnMember"> 2289 <span class="btn btn-blue"><i class="sprite-topfan-star-alt"></i></span> 2290 #1 Fan 2291 </a> 2292 </div> 2293 2294 <div class="btn-action" data-state='fan_rank' data-render-on-active="true"> 2295 <a class="hotlist_btn" data-click="bidOnMember"> 2296 <span class="btn btn-blue"><i class="sprite-hotlist"></i></span> 2297 #\{{getFanRank i_am_fan_of_rank}} Fan 2298 </a> 2299 </div> 2300 2301 </div> 2302 2303 <!-- flirt button --> 2304 <div class="btn-action active_state" data-name="flirtState" data-role="render" data-events="Parent.flirt_state:set_state" data-default_value="true"> 2305 2306 <div class="btn-action" data-state="can_flirt"> 2307 <a class="btn btn-small" data-click="sendFlirt"> 2308 <div class="btn_text_wrapper flirt_btn"> 2309 <i class="sprite-flirt-face"></i> 2310 Flirt 2311 </div> 2312 </a> 2313 </div> 2314 2315 <div class="btn-action" data-state="cant_flirt_standard"> 2316 <a class="btn btn-small" data-click="redirectOrderFlirt"> 2317 <div class="btn_text_wrapper flirt_btn"> 2318 <i class="sprite-flirt-face"></i> 2319 Flirt 2320 </div> 2321 </a> 2322 </div> 2323 2324 <div class="btn-action" data-state="cant_flirt"> 2325 <div class="btn btn-small disabled"> 2326 <div class="btn_text_wrapper flirt_btn"> 2327 <i class="sprite-flirt-face"></i> 2328 Flirted 2329 </div> 2330 </div> 2331 </div> 2332 2333 </div> 2334 2335 <!-- friend button --> 2336 <div class="btn-action active_state" data-name="friendState" data-role="render" data-events="Parent.friend_status:set_state" data-default_value="true"> 2337 2338 <div class="btn-action" data-state="can_friend"> 2339 <a class="btn btn-small" data-click="handleFriendInvite"> 2340 <div class="btn_text_wrapper invite_btn"> 2341 <i class="sprite-add-friend"></i> 2342 Add Friend 2343 </div> 2344 </a> 2345 </div> 2346 2347 <div class="btn-action" data-state="invite_sent">
2348 <span class="btn bnt-small disabled"> 2349 <div class="btn_text_wrapper invite_btn"> 2350 <i class="sprite-add-friend"></i> 2351 Request Sent 2352 </div> 2353 </span> 2354 </div> 2355 2356 <div class="btn-action" data-state="is_friend"> 2357 <span class="btn btn-small disabled"> 2358 <div class="invite_btn"> 2359 <i class="sprite-add-friend"></i> 2360 Already Friends 2361 </div> 2362 </span> 2363 </div> 2364 2365 </div> 2366 </div> 2367 2368</div> 2369{{/if}} 2370</script>
vendor: 1 bytes, line 2370
2370
2371<script id="messenger_broadcaster" type="text/x-handlebars-template" charset="utf-8"><div class="broadcast-container" data-version="15.0"> 2372 <div class="broadcaster-controls"> 2373 <span class="broadcaster-dialog hide"></span> 2374 <button class="btn btn-small messenger-stop-broadcast-button" data-click="stopBroadcaster">{{lang.buttons.stopbroadcast}}</button> 2375 </div> 2376 2377 <!-- Here goes the broadcast swf --> 2378 <div class="broadcaster-wrapper"> 2379 <div class="broadcaster-container"> 2380 <div id="webIMC"></div> 2381 </div> 2382 </div> 2383 2384 <div class="broadcast-footer"> 2385 {{#if allow_public_broadcast}} 2386 <label id="broadcast_options_public_label" for="broadcast_options_public"> 2387 <input type = "checkbox" 2388 id = "broadcast_options_public" 2389 class = "broadcast_options_public" 2390 name = "broadcast_options" 2391 value = "public" 2392 checked 2393 > 2394 {{lang.labels.broadcast.public}} 2395 </label> 2396 {{/if}} 2397 <label id="broadcast_options_mute_label" for="broadcast_options_mute"> 2398 <input type = "checkbox" 2399 id = "broadcast_options_mute" 2400 class = "broadcast_options_mute" 2401 name = "broadcast_options" 2402 value = "mute" 2403 > 2404 {{lang.labels.broadcast.mute}} 2405 </label> 2406 <div class="clearfix broadcast-ratings-label"> 2407 <span class="ratings-title">{{lang.labels.broadcast.score}}:</span> 2408 <span class="score_bar"> 2409 <span class="_bar label">{{score}}</span> 2410 </span> 2411 </div> 2412 </div> 2413 <div class="broadcast-dialog">{{lang.system.initiate_broadcast}}</div> 2414</div> 2415 2416<div class="viewers viewers-controls"> 2417 <div id="viewers_count_container"> 2418 {{lang.labels.broadcast.viewers}} 2419 (<span id="viewers_count" class="tab_count">0</span>) 2420 <a href="#viewall" class="broadcaster_view_all_link">View All</a> 2421 </div> 2422 <div class="viewers-filter-container"> 2423 <select id="broadcaster_viewertype"> 2424 <option value="longest">Viewing Longest</option> 2425 <option value="newest">Newest Viewers</option> 2426 <option value="favorite">Friends & Favorites</option> 2427 </select> 2428 <input type="text" id="broadcaster_viewerlimit" value="{{specs.viewer_limit}}" size="3" /> 2429 <input type="checkbox" name="apply_online_filters_viewers" id="apply_online_filters_viewers" value="1">{{lang.labels.broadcast.applyfilters}} 2430 </div> 2431</div> 2432<div class="viewers-container tab_container"> 2433 <div class = "messenger_container tab_content_rows" 2434 data-role = "view" 2435 data-name = "MessengerBroadcastViewersView" 2436 data-tab = "viewers" 2437 data-view = "MessengerRowContainer" 2438 data-collection = "MessengerBroadcastViewers" 2439 data-messenger = "MessengerView" 2440 data-list-item-view = "MessengerRow" 2441 data-rowtype = "viewer" 2442 ></div> 2443</div> 2444<div class = "passport-container"> 2445 <div class = "passport-row" 2446 data-role = "view" 2447 data-name = "MessengerViewersPassportView" 2448 data-view = "MessengerPassport" 2449 data-messenger = "MessengerView" 2450 data-tab = "viewers" 2451 ></div> 2452</div> 2453</script>
2453 2454
2455<script id="chat_window_tmpl" type="text/x-handlebars-template" charset="utf-8"><div id="{{hash}}" class="page-engine-chan chat one-counter" data-type="{{data_type}}" data-handle="{{handle}}"> 2456 {{#unless is_embedded}}<div class="top {{hash}}">{{{chatheader}}}</div> 2457 <div class="video-container"><div id="lvp" width="0" height="0"></div></div>{{/unless}} 2458 <div class="content" id="chat-content">{{#if is_standard}}{{{messenger_paywall}}}{{/if}}{{{chathistory}}}</div> 2459 <div class="text"> 2460 <div class="broadcast"> 2461 <!-- Smilies Button --> 2462 <div class="chat-tools-content chat-tools-smileys btn-group"> 2463 <button class = "btn btn-small disabled" 2464 rel = "tooltip-above" 2465 data-role = "button" 2466 data-original-title = "{{smilies_button_tooltip}}" 2467 data-click = "handleSmileysButtonClick" 2468 > 2469 <span class="sprite-smiley sprite-smilies"></span> 2470 <span class="caret"></span> 2471 </button> 2472 </div> 2473 <!-- end Smilies Button --> 2474 <!-- Photo Upload Button --> 2475 <div class="chat-tools-content chat-tools-file"> 2476 <button class = "btn btn-small disabled" 2477 rel = "tooltip-above" 2478 data-role = "button" 2479 data-original-title = "{{photo_button_tooltip}}" 2480 data-click = "handleAddPhotoButtonClick" 2481 ><span class="sprite-photos"></span></button></div> 2482 <!-- end Photo Upload Button --> 2483 <!-- Interactions Button --> 2484 <div class="chat-tools-content chat-tools-interactions btn-group"> 2485 <button class ="btn btn-small dropdown-toggle interactions-button disabled" 2486 rel ="tooltip-below" 2487 data-role = "button" 2488 data-original-title ="{{report_button_tooltip}}" 2489 data-click ="handleInteractionsButtonClick" 2490 > 2491 <span class="sprite-interact"></span> 2492 <span class="caret"></span> 2493 </button> 2494 <ul class="dropdown-menu pull-up dropdown-menu-btn activity_container" pwsid="{{pwsid}}" handle="{{handle}}"> 2495 <li to_pwsid="{{to_pwsid}}" class="btn-action"> 2496 <a href="{{profile_url}}#EMAIL" target="ffmain"><span class="message_btn" url="{{message_btn_url}}" target="_blank">{{message_button_text}}</span></a> 2497 </li> 2498 2499 2500 <!-- hotlist button --> 2501 <span class="btn-action active_state" data-name="chat_hotlist_state" data-role="render" data-events="Parent.hotlist_state:set_state"> 2502 2503 <li class="btn-action" data-state='hotlist'> 2504 <a data-click="addToHotlist"> 2505 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">Hotlist</span> 2506 </a> 2507 </li> 2508 2509 <li class="btn-action" data-state='become_a_fan'> 2510 <a data-click="becomeAFan"> 2511 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">Be a Top Fan</span> 2512 </a> 2513 </li> 2514 2515 <li class="btn-action" data-state='hotlisted'> 2516 <a class="hotlist_btn "> 2517 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">In My Hotlist</span> 2518 </a> 2519 </li> 2520 2521 <li class="btn-action" data-state='bid_more'> 2522 <a class="top_fans_btn" data-click="bidOnMember">
2523 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">Bid More</span> 2524 </a> 2525 </li> 2526 2527 <li class="btn-action" data-state='top_fan'> 2528 <a class="top_fans_btn" data-click="bidOnMember"> 2529 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">#1 Fan</span> 2530 </a> 2531 </li> 2532 2533 <li class="btn-action" data-state='fan_rank' data-render-on-active="true"> 2534 <a class="hotlist_btn" data-click="bidOnMember"> 2535 <span class="hotlist_btn" rel="tooltip" data-tooltip-placement="above">#\{{getFanRank i_am_fan_of_rank}} Fan</span> 2536 </a> 2537 </li> 2538 2539 </span> 2540 2541 <!-- flirt button --> 2542 <span class="btn-action active_state" data-name="chat_flirtState" data-role="render" data-events="Parent.flirt_state:set_state" data-default_value="true"> 2543 2544 <li class="btn-action" data-state="can_flirt"> 2545 <a data-click="sendFlirt"> 2546 <span class="flirt_btn" rel="tooltip" data-tooltip-placement="above">Flirt</span> 2547 </a> 2548 </li> 2549 2550 <li class="btn-action" data-state="cant_flirt_standard"> 2551 <a data-click="redirectOrderFlirt"> 2552 <span class="flirt_btn" rel="tooltip" data-tooltip-placement="above">Flirt</i></span> 2553 </a> 2554 </li> 2555 2556 <li class="btn-action" data-state="cant_flirt"> 2557 <span class="flirt_btn" rel="tooltip" data-tooltip-placement="above">Flirted</span> 2558 </li> 2559 2560 </span> 2561 2562 <!-- friend button --> 2563 <span class="btn-action active_state" data-name="chat_friendState" data-role="render" data-events="Parent.friend_status:set_state" data-default_value="true"> 2564 2565 <li class="btn-action" data-state="can_friend"> 2566 <a data-click="handleFriendInvite"> 2567 <span class="friend_btn">Add Friend</span> 2568 </a> 2569 </li> 2570 2571 <li class="btn-action" data-state="invite_sent"> 2572 <span class="friend_btn">Request Sent</span> 2573 </li> 2574 2575 <li class="btn-action" data-state="is_friend"> 2576 <span class="friend_btn">Already Friends</span> 2577 </li> 2578 </span> 2579 2580 <li class="btn-action"><a data-click="handleBanMemberClick" class="messenger_block">Block this member</a></li> 2581 <li class="btn-action"><a data-click="handleReportAbuseClick" class="messenger_report">Report abuse</a></li> 2582 </ul> 2583 </div> 2584 <!-- end Interactions Button --> 2585 <!-- Virtual Gifts Button --> 2586 <div class="chat-tools-content chat-tools-vgift"><button class="btn btn-small disabled" rel="tooltip-above" data-click="launchVGift" data-original-title="Virtual Gifts" data-pwsid="{{pwsid}}" data-handle="{{handle}}"><span class="sprite-virtual_gift"></span></button></div> 2587 <!-- end Virtual Gifts Button --> 2588 <!-- Tipping Button --> 2589 <div class="chat-tools-content chat-tools-tip"><button class="btn btn-small btn-blue send-tip" rel="tooltip-above" data-click="sendTip" data-original-title="Send Tips" data-pwsid="{{pwsid}}" data-handle="{{handle}}"><span class="sprite-coins-white"></span><span class="btn-text">Tip</span></button></div> 2590 <!-- end Tipping Button --> 2591 <!-- Start Webcam Button --> 2592 <button id="chat_broadcast_button" data-role="button" class="btn btn-small disabled" data-click="handleSendWebcamButtonClick">{{start_webcam_btn}}</button> 2593 <!-- end Start Webcam Button --> 2594 </div> 2595 <div class="compose"> 2596 <div class="textarea_container"> 2597 <div class="textarea_left"> 2598 <textarea class="message-area focusable" data-chatstates="true" /></textarea> 2599 </div> 2600 <div class="textarea_right"> 2601 <button class="btn btn-small send_chat_button" data-role="button" data-click="sendMessage">{{send_btn}}</button> 2602 </div> 2603 </div> 2604 </div> 2605 <div class="footer">{{#if show_chat_invite_number}}Chat invites left:<span id='chat_invite_num' class="chat_invite_num">{{chat_invite_num}}</span>{{/if}}</div> 2606 <iframe class="submit_frame" name="submit_frame"></iframe> 2607 </div> 2608</div> 2609{{#if host_messenger}}<iframe class="embedded messenger" src="{{messenger_url}}"/>{{/if}} 2610</script>
vendor: 1 bytes, line 2610
2610
2611<script id="chat_window_row" type="text/x-handlebars-template" charset="utf-8"><span class="date">{{message_time}}<i class="delivery{{#if outgoing}} sprite-delivery-pending" rel="tooltip-left" data-original-title="Delivering...{{/if}}"></i></span> 2612<b class="name {{message_is_from}}">{{message_is_from_text}}: </b> 2613<div 2614 class="message_text" 2615 data-id="{{message_id}}" 2616> 2617 {{{message_text}}} 2618</div> 2619</script>
vendor: 1 bytes, line 2619
2619
2620<script id="messenger_row" type="text/x-handlebars-template" charset="utf-8"><div class="member_cell_image_container"> 2621 <a data-profile-url="{{{profile_url}}}" data-click="handleProfileLinkClick" data-target="ffmain"> 2622 <div class="filter_box"> 2623 <img src="{{img}}" class="filter rating{{from_rating}}" border="0"/> 2624 </div> 2625 </a> 2626 2627 {{#if image_overlay}}<span class="image_overlay_text">{{image_overlay}}</span>{{/if}} 2628</div> 2629<div class="member_cell_right"> 2630 {{#unless is_passport}} {{messenger_buttons rowtype id}} {{/unless}} 2631 {{#if video_header_row}}{{messenger_buttons "chatheader" id}}{{/if}} 2632 {{#if video_header_row}} <a class="report-abuse-link" data-click="VideoViewer:handleAbuseLinkClick">Report abuse</a> {{/if}} 2633</div> 2634<div class="member_cell_info_container"> 2635 <div class="member_cell_info_row1"> 2636 <a data-profile-url="{{{profile_url}}}" data-click="handleProfileLinkClick" data-target="ffmain"><strong class="handle">{{handle}}</strong></a> 2637 <span class="gender">{{gender}}</span> 2638 2639 {{#unless is_passport}} {{badge_container}} {{/unless}} 2640 2641 </div> 2642 <div class="member_cell_info_row2"> 2643 <div class="location">{{{location}}}{{#if distance_text}} ({{distance_text}}){{/if}}</div> 2644 <div class="details"> 2645 {{#if is_passport}} 2646 {{passport_details this}} 2647 {{else}} 2648 {{#if message_body}}<div class="incoming_message" rel="tooltip" data-id="{{message_id}}" data-original-title="{{message_body}}">{{message_body}}</div>{{/if}} 2649 {{/if}} 2650 </div> 2651 </div> 2652</div> 2653</script>
vendor: 1 bytes, line 2653
2653
2654<script id="badge_container" type="text/x-handlebars-template" charset="utf-8"><div class="badge_container v20"> 2655{{#unless no_badges}} 2656 {{!-- VERIFIED MEMBER --}} 2657 {{{showConfirmed this icon_only show_tiny_icon}}} 2658 2659 {{!-- GOLD MEMBER --}} 2660 {{#unless vip_member}}{{#if gold_member}} 2661 <span {{#unless no_tooltip}}data-original-title="Gold Member" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge gold{{/unless}}"><i class="{{#if show_icon}}sprite-badge-crown{{/if}}{{#if show_tiny_icon}} sprite-tiny-gold{{/if}}"></i>{{#unless icon_only}}Gold{{/unless}}</span> 2662 {{/if}}{{/unless}} 2663 {{!-- VIP MEMBER --}} 2664 {{#if vip_member}} 2665 <span {{#unless no_tooltip}}data-original-title="VIP Member" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge vip{{/unless}}"><i class="{{#if show_icon}}sprite-badge-crown{{/if}}{{#if show_tiny_icon}} sprite-tiny-vip{{/if}}"></i>{{#unless icon_only}}VIP{{/unless}}</span> 2666 {{/if}} 2667 2668 {{!-- ONLINE BADGES - ONLY ONE OF THESE SHOULD BE DISPLAYED --}} 2669 {{!-- ONLINE --}} 2670 {{#if badges.online}}<span {{#unless no_tooltip}}data-original-title="Online Now" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-online{{/if}}{{#if show_tiny_icon}} sprite-tiny-online{{/if}}"></i>{{#unless icon_only}}Online{{/unless}}</span>{{/if}} 2671 {{!-- ON IM --}} 2672 {{#if badges.on_im}}<span data-click="openIM" {{#unless no_tooltip}}data-original-title="On IM Now" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-imc{{/if}}{{#if show_tiny_icon}} sprite-tiny-imc{{/if}}"></i>{{#unless icon_only}}On IM{{/unless}}</span>{{/if}} 2673 {{!-- ON MOBILE IM --}} 2674 {{#if badges.on_mobile_im}}<span data-click="openIM" {{#unless no_tooltip}}data-original-title="On Mobile IM" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-mobile-im{{/if}}{{#if show_tiny_icon}} sprite-tiny-mobile-im{{/if}}"></i>{{#unless icon_only}}On Mobile IM{{/unless}}</span>{{/if}} 2675 {{!-- BROADCASTING --}} 2676 {{#if badges.broadcasting}}{{#if broadcasting_url}}<a href="{{{broadcasting_url}}}">{{/if}}<span data-click="launchViewer" data-stream="{{stream_id}}" {{#unless no_tooltip}}data-original-title="Broadcasting Now" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge online{{/unless}}"><i class="{{#if show_icon}}sprite-badge-broadcasting{{/if}}{{#if show_tiny_icon}} sprite-tiny-broadcasting{{/if}}"></i>{{#unless icon_only}}Live on Cam{{/unless}}</span>{{#if broadcasting_url}}</a>{{/if}}{{/if}} 2677 2678 {{!-- FRIENDS --}} 2679 {{#if is_friend}} 2680 <span {{#unless no_tooltip}}data-original-title="Already Friends" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge friends{{/unless}}"><i class="{{#if show_icon}}sprite-badge-friends{{/if}}{{#if show_tiny_icon}} sprite-tiny-friends{{/if}}"></i>{{#unless icon_only}}Friends{{/unless}}</span> 2681 {{/if}} 2682 2683 {{!-- TOP FAN --}} 2684 {{#if fan_of_mine_rank}} 2685 <span {{#unless no_tooltip}}data-original-title="{{#if rank_display_limit}} #99+ Fan {{else}} #{{fan_of_mine_rank}} Fan{{/if}}" rel="tooltip" {{/unless}}class="badge{{#unless icon_only}} fruit-tooltip status-badge{{/unless}} {{get_fan_rank_css fan_of_mine_rank "stat"}}"> 2686 <i class="{{#if show_icon}}sprite-topfan{{/if}}{{#if show_tiny_icon}} sprite-tiny-topfan sprite-tiny-topfans{{/if}}"></i>{{#unless icon_only}}{{#if rank_display_limit}} #99+ Fan {{else}} #{{fan_of_mine_rank}} Fan{{/if}}{{/unless}} 2687 </span> 2688 {{/if}} 2689{{/unless}} 2690</div> 2691</script>
vendor: 1 bytes, line 2691
2691
2692<script id="messenger_row_buttons" type="text/x-handlebars-template" charset="utf-8">{{#unless incomplete}} 2693 {{#if is_incoming_row}} 2694 <button 2695 data-click = "launchConversation" 2696 rid = "{{id}}" 2697 class = "btn btn-tiny chat_button messenger_reply btn-inverse" 2698 > 2699 {{lang.buttons.reply}} 2700 </button> 2701 {{/if}} 2702 {{#unless can_not_chat}} 2703 {{showbutton rowtype this}} 2704 {{/unless}} 2705 {{#if is_viewer_row}} 2706 <span class="broadcast_vote_box"><span class="label _badge warning">{{broadcast_vote}}</span></span> 2707 {{/if}} 2708 {{#unless chat_header_row}} 2709 {{#unless is_self}} 2710 {{#if webcam_on}} 2711 <button 2712 data-role="button" 2713 rid="{{id}}" 2714 class="btn btn-tiny broadcast_button{{#unless can_view_their_broadcast}} disabled{{/unless}}" 2715 data-stream="{{stream_id}}" 2716 rel="tooltip" 2717 data-tooltip-placement="below" 2718 data-original-title="{{broadcast_button_tooltip}}" 2719 data-click="launchViewer" 2720 > 2721 <i class="sprite-broadcast{{#if has_audio}}-audio{{/if}}"></i> 2722 </button> 2723 {{/if}} 2724 {{/unless}} 2725 {{/unless}} 2726{{/unless}} 2727{{#if incomplete}}<span class="spinner_dots"></span>{{/if}} 2728</script>
vendor: 1 bytes, line 2728
2728
2729<script id="messenger_chatheader_button" type="text/x-handlebars-template" charset="utf-8">{{#unless has_video}} 2730<button 2731 data-role = "button" 2732 class = "btn btn-tiny view_webcam_button{{#unless can_view_their_broadcast}} disabled{{/unless}}" 2733 data-stream = "{{stream_id}}" 2734 data-click = "launchVideo" 2735 data-handle = "{{handle}}" 2736 rid = "{{id}}" 2737> 2738{{view_button_text}} 2739</button> 2740 {{/unless}} 2741 {{#if has_video}} 2742<button 2743 data-role = "button" 2744 class = "btn btn-tiny close_webcam_button" 2745 data-click = "closeVideo" 2746 data-handle = "{{handle}}" 2747 rid = "{{id}}" 2748> 2749{{close_button_text}} 2750</button> 2751{{/if}} 2752</script>
vendor: 1 bytes, line 2752
2752
2753<script id="messenger_paywall" type="text/x-handlebars-template" charset="utf-8"><div class="messenger_paywall"> 2754 <div class="paywall_header">Want UNLIMITED chat on Instant Messenger?</div> 2755 <a href="https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=IMCPaywall&trlid=handlebars-messenger_paywall-2" target="ffmain"><button class="paywall_button btn btn-small btn-red">Upgrade to Gold</button></a> 2756 <div class="paywall_text">Standard members can only start 5 instant messenger conversations per day. We do this to give our Gold members more access to other members.</div> 2757</div> 2758 2759 2760 2761 2762</script>
vendor: 1 bytes, line 2762
2762
2763<script id="video_viewer_button" type="text/x-handlebars-template" charset="utf-8"><a onClick="openAbuse('{{pwsid}}')">Report Abuse or Sexually Explicit Ads</a> 2764</script>
vendor: 1 bytes, line 2764
2764
2765<script id="messenger_passport_details" type="text/x-handlebars-template" charset="utf-8"><div class="detail_links"> 2766 {{#if num_photos}}<a href="{{photo_manager_url}}" target="ffmain"><span>{{num_photos}} {{photos_text}}</span></a>{{#if num_videos}} {{photo_divider}}{{else}}{{#if num_friends}} {{photo_divider}} {{/if}}{{/if}}{{/if}} 2767 {{#if num_videos}}<a href="{{video_manager_url}}" target="ffmain"><span>{{num_videos}} {{videos_text}}</span></a>{{#if num_friends}}{{video_divider}}{{/if}}{{/if}} 2768 {{#if num_friends}}<a href="{{friends_manager_url}}" target="ffmain"><span>{{num_friends}} {{friends_text}}</span></a>{{/if}} 2769</div> 2770 2771{{badge_container this}} 2772 2773{{#if passport_adjustable}} 2774<div class="activity_container dropdown"> 2775 <div class="btn-link"><span>Interact</span><i class="caret"></i></div> 2776 2777 <div class="activity_container left action-btns" pwsid="{{from_pwsid}}" handle="{{from_handle}}"> 2778 2779 <div class="btn-action"><a href="{{profile_url}}#EMAIL" target="ffmain"><span class="message_btn"><button class="btn"><i class="sprite-envelope"></i></button><span class="_text">Message</span></span></a></div> 2780 2781 <!-- hotlist button --> 2782 <div class="btn-action active_state" data-name="header_hotlist_state" data-role="render" data-events="Parent.hotlist_state:set_state"> 2783 2784 <div class="btn-action" data-state='hotlist'> 2785 <a class="hotlist_btn" data-click="addToHotlist"> 2786 <span class="btn"><i class="sprite-hotlist"></i></span> 2787 Hotlist 2788 </a> 2789 </div> 2790 2791 <div class="btn-action" data-state='become_a_fan'> 2792 <a class="hotlist_btn " data-click="becomeAFan"> 2793 <span class="btn "><i class="sprite-hotlist"></i></span> 2794 Be a Top Fan 2795 </a> 2796 </div> 2797 2798 <div class="btn-action" data-state='hotlisted'> 2799 <a class="hotlist_btn "> 2800 <span class="btn "><i class="sprite-hotlist"></i></span> 2801 In My Hotlist 2802 </a> 2803 </div> 2804 2805 <div class="btn-action" data-state='bid_more'> 2806 <a class="top_fans_btn" data-click="bidOnMember"> 2807 <span class="btn btn-blue"><i class="sprite-topfan-star-alt"></i></span> 2808 Bid More 2809 </a> 2810 </div> 2811 2812 <div class="btn-action" data-state='top_fan'> 2813 <a class="top_fans_btn" data-click="bidOnMember"> 2814 <span class="btn btn-blue"><i class="sprite-topfan-star-alt"></i></span> 2815 #1 Fan 2816 </a> 2817 </div> 2818 2819 <div class="btn-action" data-state='fan_rank' data-render-on-active="true"> 2820 <a class="hotlist_btn" data-click="bidOnMember"> 2821 <span class="btn btn-blue"><i class="sprite-hotlist"></i></span> 2822 #\{{getFanRank i_am_fan_of_rank}} Fan 2823 </a> 2824 </div> 2825 2826 </div> 2827 2828 <!-- flirt button --> 2829 <div class="btn-action active_state" data-name="flirtState" data-role="render" data-events="Parent.flirt_state:set_state" data-default_value="true"> 2830 2831 <div class="btn-action" data-state="can_flirt"> 2832 <a class="flirt_btn" data-click="sendFlirt"> 2833 <span class="btn"><i class="sprite-flirt-face"></i></span> 2834 Flirt 2835 </a> 2836 </div> 2837 2838 <div class="btn-action" data-state="cant_flirt_standard"> 2839 <a class="flirt_btn" data-click="redirectOrderFlirt"> 2840 <span class="btn"><i class="sprite-flirt-face"></i></span> 2841 Flirt 2842 </a> 2843 </div> 2844 2845 <div class="btn-action" data-state="cant_flirt"> 2846 <span class="btn"> 2847 <i class="sprite-flirt-face"></i> 2848 </span> 2849 Flirted 2850 </div> 2851 2852 </div> 2853 2854 <!-- friend button --> 2855 <div class="btn-action active_state" data-name="friendState" data-role="render" data-events="Parent.friend_status:set_state" data-default_value="true"> 2856 2857 <div class="btn-action" data-state="can_friend"> 2858 <a class="friend_btn" data-click="handleFriendInvite">
2859 <span class="btn"><i class="sprite-add-friend"></i></span> 2860 Add Friend 2861 </a> 2862 </div> 2863 2864 <div class="btn-action" data-state="invite_sent"> 2865 <span class="btn"><i class="sprite-add-friend"></i></span> 2866 Request Sent 2867 </div> 2868 2869 <div class="btn-action" data-state="is_friend"> 2870 <span class="btn"><i class="sprite-add-friend"></i></span> 2871 Already Friends 2872 </div> 2873 2874 </div> 2875 </div> 2876 2877</div> 2878{{/if}} 2879</script>
2879 2880 2881 2882 2883 2884
2884<script id="lightbox" type="text/x-handlebars-template"> 2885<div class="page-overlay-lightbox"> 2886 <div class="outer-wrap"> 2887 <div class="inner-wrap"> 2888 <div class="transparent_bg"> </div> 2889 <div class="lightbox-wrapper modal"> 2890 <div class="icon close white modal-cross"> × </div> 2891 <div data-content='lightbox'></div> 2892 </div> 2893 </div> 2894 </div> 2895</div> 2896</script>
2896 2897 2898
2898<script id="gift_selector_view" type="text/x-handlebars-template"> 2899 <div data-view="GiftSelector" data-role="view" data-name="GiftSelectorView" data-template-vars="handle:value:{{handle}},pwsid:value:{{pwsid}},standard_submit:bool:{{can_submit}},is_gold:bool:{{is_gold}},{{#if standalone}}standalone:bool:{{standalone}}{{/if}},{{#if trigger_redirect}}trigger_redirect:bool:{{trigger_redirect}}{{/if}}"></div> 2900</script>
2900 2901
2902<script id="vgift_selected_tally" type="text/x-handlebars-template"> 2903 <span>{{selected_count}} gifts selected. Total: <span class="points">{{gift_points_spent}} pts</span>.</span> 2904</script>
2904 2905
2906<script id="gift_selector_view_tmpl" type="text/x-handlebars-template"> 2907 <div class="gift_list_ctr"> 2908 <div class="spinner-dots"><div class="spinner-animate"></div></div> 2909 <div class="gift_list_content" style="display:none"> 2910 <div class="title">Send <span class="handle">{{handle}}</span> a gift and get their attention</div> 2911 {{#unless is_gold}} 2912 <div class="description">To send a message with your gifts and view as many profiles as you like, <b><a href="{{order_link}}" target="ffmain" >Upgrade to Gold Membership</a>!</b></div> 2913 {{/unless}} 2914 2915 <div class="user_points">You currently have <span class="points" data-role="button" data-name="PointsCount" data-events="GiftListView.points:render" data-default_value="0">{{points}} pts</span> - <a data-role="button" href='#' data-name="PointsRedirect" data-link="{{order_points_link}}">get more points now</a></div> 2916 2917 <div class="gallery"> 2918 <div class="scrolltrack"></div> 2919 <div class="scrollbar"></div> 2920 <div class="gift_selector_list scrollable" data-name="GiftListView" data-role='view' data-view='SelectableListView' data-tmpl='gift_cell' data-collection="Gifts" data-item-tag="li" data-selected_class="active"></div> 2921 </div> 2922 2923 <div class="interaction"> 2924 {{#if standalone}} 2925 <div data-role="button" data-name="SubmitGiftsBtn" class="btn btn-blue">Send</div> 2926 {{else}} 2927 {{#if is_gold}} 2928 <div data-role="button" data-name="SubmitGiftsBtn" class="btn btn-blue">Confirm</div> 2929 {{else}} 2930 {{#if can_submit}} 2931 <div data-role="button" data-name="SubmitGiftsBtn" class="btn btn-blue">Send</div> 2932 {{else}} 2933 <div data-role="button" data-name="SubmitGiftsBtn" class="btn btn-blue">Confirm</div> 2934 {{/if}} 2935 {{/if}} 2936 {{/if}} 2937 2938 <div class="spent_points" data-content="GiftPointsCount"></div> 2939 </div> 2940 </div> 2941 </div> 2942 <div data-role='form' data-model='MCMessage' data-name='VGiftForm' style="display:none" data-default-msg="I hope you like the virtual gift I picked for you."> 2943 <input type="hidden" name="to_pwsids" value="{{pwsid}}"> 2944 <input type="hidden" name="to_handles" value="{{handle}}"> 2945 </div> 2946</script>
2946 2947
2948<script id="gift_selector_standard" type="text/x-handlebars-template"> 2949 <div class="vgift_upgrade_promo"> 2950 <div class="vgift_upgrade_upsell">You can now use points to send virtual gifts to {{{handle_el}}}!</div> 2951 <div class="interaction"> 2952 <a href="/dating/#/dmc" class="btn btn-blue spend_points_btn">Send Virtual Gifts Now!</a> 2953 </div> 2954 <div class="interaction"> 2955 <a href="{{order_link}}" class="upgrade_link">Upgrade to Gold to send a message</a> 2956 </div> 2957 <div class="kiss"></div> 2958 </div> 2959</script>
2959 2960
2961<script id="gift_cell" type="text/x-handlebars-template"> 2962 <div data-selectable="true" data-click="Page:handleGift" data-query="id:{{id}}"> 2963 <img src="{{picture_name}}" /> 2964 {{#unless hide_points}}<div class="g-price">{{#if is_bundle}}<span class="original_price">{{orig_price}} pts</span> {{/if}}{{price}} pts</div>{{/unless}} 2965 </div> 2966</script>
2966 2967
2968<script id="mc_image_attachment" type="text/x-handlebars-template"> 2969 <div class="attachment"> 2970 <s class="mc_icon_bg cut" gift-id="{{id}}">×</s> 2971 <img src="{{image}}" /> 2972 </div> 2973</script>
2973 2974
2975<script id="gift_send_confirm" type="text/x-handlebars-template"> 2976 <div class="gift_list_ctr confirm_popup"> 2977 <div class="title"> 2978 {{#if multiple_gifts}} 2979 Your gifts have been sent to <a href="/p/member.cgi?mid={{pwsid}}">{{handle}}</a> 2980 {{else}} 2981 Your gift has been sent to <a href="/p/member.cgi?mid={{pwsid}}">{{handle}}</a> 2982 {{/if}} 2983 </div> 2984 {{#if top_fans_enabled}} 2985 <div class="sub-title"> 2986 You're {{handle}}'s fan 2987 </div> 2988 {{/if}} 2989 </div> 2990</script>
2990 2991
2992<script type="text/javascript"> 2993 (function () { 2994 if (!window.$) { $ = VIce.$ || $ || jQuery;} 2995 VIce.setTemplate("gift_selector_view", $("#gift_selector_view").html()); 2996 VIce.setTemplate("gift_selector_view_tmpl", $("#gift_selector_view_tmpl").html()); 2997 VIce.setTemplate("gift_selector_standard", $("#gift_selector_standard").html()); 2998 VIce.setTemplate("gift_cell", $("#gift_cell").html()); 2999 VIce.setTemplate("mc_image_attachment", $("#mc_image_attachment").html()); 3000 VIce.setTemplate("vgift_selected_tally", $("#vgift_selected_tally").html()); 3001 VIce.setTemplate("gift_send_confirm", $("#gift_send_confirm").html()); 3002 }()); 3003</script>
3003 3004 3005
3005<script type="text/javascript"> 3006 if(!window.VIce) { 3007 VIce = {}; 3008} 3009//var VIce = VIce || {}; 3010VIce.gsub = VIce.gsub || {}; 3011 3012VIce.gsub.defaults = {}; 3013 3014 3015 3016VIce.gsub.UrlClass = function (url, defaults) { 3017 3018 if (!url 3019 || !_.isString(url)) { 3020 console.error('VIce.gsub.UrlClass: url is required to be a string for constructor'); 3021 } 3022 3023 if (defaults 3024 && !_.isObject(defaults) 3025 ) { 3026 console.error('VIce.gsub.UrlClass: defaults is required to be an object'); 3027 } 3028 3029 this.defaults = defaults || {}; 3030 this.url = url; 3031} 3032 3033VIce.gsub.UrlClass.prototype._buildQuery = function (query) { 3034 var qs = ''; 3035 for(var key in query) { 3036 var value = query[key]; 3037 qs += encodeURIComponent(key) + "=" + encodeURIComponent(value) + "&"; 3038 } 3039 return qs; 3040} 3041 3042VIce.gsub.UrlClass.prototype._insertAfter = function (ch,url,string) { 3043 var parts = url.split(ch); 3044 url = parts.shift(); 3045 url += ch; 3046 url += string; 3047 url += parts.join(ch); 3048 return url; 3049} 3050VIce.gsub.UrlClass.prototype._insertBefore = function (ch,url,string) { 3051 var parts = url.split(ch); 3052 url = parts.shift(); 3053 url += string; 3054 url += ch; 3055 url += parts.join(ch); 3056 return url; 3057} 3058 3059VIce.gsub.UrlClass.prototype.buildUrl = function (options) { 3060 if (!this.compiled) { 3061 this.compiled = _.template(this.url,null,{ 3062 interpolate : /\{\{(.+?)\}\}/g, 3063 'variable':'v' 3064 }); 3065 3066 console.log(this); 3067 } 3068 3069 options = options || {}; 3070 var values = options.values || {}; 3071 var query = options.query || {}; 3072 if (!_.isObject(values)) { 3073 console.error('VIce.gsub.link: options.values is required to be an object'); 3074 } 3075 if (!_.isObject(query)) { 3076 console.error('VIce.gsub.link: options.query is required to be an object'); 3077 } 3078 var url = this.compiled(_.defaults(values,this.defaults)); 3079 3080 if (query) { 3081 var qs = this._buildQuery(query); 3082 var q_location = url.indexOf('?'); 3083 if( q_location >= 0) { 3084 3085 url = this._insertAfter("?",url, qs); 3086 } else if ( url.indexOf('/#/') >= 0 ) { 3087 // ignore /#/ 3088 } else { 3089 if (url.indexOf("#") >= 0) { 3090 url = this._insertBefore("#",url, "?" + qs); 3091 } else { 3092 url += "?" + qs; 3093 } 3094 } 3095 } 3096 return url; 3097}; 3098 3099 3100 3101VIce.gsub.link = function (name,options,flag) { 3102 var err_msg = ""; 3103 3104 if (!name 3105 || !_.isString(name)) { 3106 err_msg = "VIce.gsub.link: name needs to be a string"; 3107 } 3108 if (!err_msg 3109 && options 3110 && !_.isObject(options) 3111 ) { 3112 err_msg = "VIce.gsub.link: " + name + " options is required to be an object"; 3113 } 3114 if (!err_msg 3115 && VIce.gsub.link.__urls[name] ) { 3116 options = _.defaults(options,VIce.gsub.link.defaults,VIce.gsub.defaults); 3117 return VIce.gsub.link.__urls[name].buildUrl(options); 3118 } 3119 if (flag && flag.silent) { 3120 return false; 3121 } 3122 if(!err_msg){ 3123 err_msg = "VIce.gsub.link: " + name + " isn't a know url"; 3124 } 3125 3126 console.error(err_msg); 3127 3128}; 3129VIce.gsub.link.setDefaults = function (obj) { 3130 if (!_.isObject(obj)) { 3131 console.error("VIce.gsub.link.setDefaults: obj needs to be object"); 3132 } 3133 VIce.gsub.link.__defaults = obj; 3134 3135}; 3136VIce.gsub.link.reset = function () { 3137 VIce.gsub.link.__urls = {}; 3138 VIce.gsub.link.__defaults = {}; 3139} 3140VIce.gsub.link.addUrl = function (name,url, defaults) { 3141 if (!name 3142 || !_.isString(name)) { 3143 console.error("VIce.gsub.link.addUrl: name needs to be a string"); 3144 } 3145 if (!url 3146 || !_.isString(url)) { 3147 console.error('VIce.gsub.link.addUrl: url is required'); 3148 } 3149 if (defaults 3150 && !_.isObject(defaults) 3151 ) { 3152 console.error('VIce.gsub.link.addUrl: defaults is required to be an object'); 3153 } 3154 3155 this.__urls[name] = new VIce.gsub.UrlClass(url, defaults); 3156} 3157 3158VIce.gsub.link.__urls = {}; 3159 3160 3161 3162 3163Handlebars.registerHelper('ellipsis', function (string, max_characters, more) { 3164 var len = 0, 3165 more_len = 0, 3166 space_saver = 0; 3167 string = VIce.$.trim(string); // lets remove trailing whitespace 3168 if (max_characters 3169 && string.length > max_characters) { 3170 if (_.isString(more) && more.length) { 3171 more_len = more.length 3172 } 3173 space_saver = more_len + 3; // save the space for more text and '...' 3174 var small_part = string.substring(0, max_characters - space_saver); 3175 if (small_part.charAt(max_characters) !== ' ') { 3176 // if the char is not a space 3177 // remove the trail partial word 3178 3179 var last_index_whitespace = small_part.lastIndexOf(' ');
3180 string = string.slice(0, last_index_whitespace); 3181 } 3182 3183 //No space in Chinese article, so last_index_whitespace may be get -1 3184 //Return relatively short string or small_part. 3185 string = string.length > small_part.length ? small_part : string; 3186 3187 string += '...'; 3188 if (more_len) { 3189 string += "<a class='more'>" + more + "</a>"; 3190 } 3191 3192 } 3193 return new Handlebars.SafeString(string); 3194}); 3195 3196 3197Handlebars.registerHelper('member_photo', function (photo,sex,size) { 3198 var sizes = [300,144,100,80]; 3199 var sizes_length = sizes.length; 3200 var url_base = "https://secureimage.securedataimages.com/images/common/no_photo/"; 3201 var handle_no_photo = { 3202 "C":"couple.jpg", 3203 "F":"female.jpg", 3204 "G":"group.jpg", 3205 "M":"male.jpg", 3206 "T":"tstvtg.jpg", 3207 }; 3208 var use_size = ''; 3209 var x = 0; 3210 sex = sex.toUpperCase(); 3211 3212 // if we have a photo and it doesn't have no_photo 3213 // init the that is a good photo and use it. 3214 if (photo 3215 && !photo.indexOf('no_photo') 3216 ) { 3217 return photo; 3218 } 3219 // we don't have a non-photo image for this gender 3220 // for now just return what we got 3221 // nothing else todo. 3222 if (!handle_no_photo[sex]) { 3223 return photo; 3224 } 3225 // get the biggest size closest to the size passed in. 3226 while(!use_size 3227 && x < sizes_length 3228 ) { 3229 if (sizes[x] <= size) { 3230 use_size = sizes[x]; 3231 } 3232 x++; 3233 } 3234 use_size = use_size || sizes[0]; 3235 return url_base + use_size + 'x' + use_size + "/" + handle_no_photo[sex]; 3236}); 3237 3238Handlebars.registerHelper("formatDate", function ( date_obj) { 3239 var output = "", 3240 year, 3241 month, 3242 lang = (window.VIce && VIce.globals && VIce.globals.lang) || 'english', 3243 country ='United States', 3244 day; 3245 3246 if (date_obj) { 3247 if (_.isString(date_obj) || _.isNumber(date_obj)) { 3248 date_obj = new Date(date_obj); 3249 } 3250 year = date_obj.getFullYear(); 3251 month = date_obj.getMonth() + 1; 3252 day = date_obj.getDate(); 3253 3254 if (_.checkExists("VIce.globals.my_country")) { 3255 country = VIce.globals.my_country; 3256 } 3257 if (_.checkExists("VIce.globals.own_profile.language")) { 3258 lang = VIce.globals.own_profile.language; 3259 } 3260 lang = lang.toLowerCase(); 3261 output = day + "/" + month + "/" + year; 3262 3263 if (lang === "english" && /^(United States|Canada)$/i.test(country)) { 3264 output = month + "/" + day + "/" + year; 3265 } 3266 else if (lang === "german") { 3267 output = day + "." + month + "." + year; 3268 } 3269 else if (lang === "dutch") { 3270 output = day + "-" + month + "-" + year; 3271 } 3272 else if (/^(chinese|swedish)$/.test(lang)) { 3273 output = year + "-" + month + "-" + day; 3274 } 3275 else if (/^(japanese|korean)$/.test(lang)) { 3276 output = year + "/" + month + "/" + day; 3277 } 3278 3279 3280 } 3281 3282 return output; 3283 3284}); 3285 3286Handlebars.registerHelper('getCategoryUrl', function(group_id){ 3287 var result = ''; 3288 var mags_names = { 3289 '1' : 'penthouse', 3290 '3' : 'letters', 3291 '2' : 'variations', 3292 '4' : 'forum' 3293 } 3294 var mags_category = mags_names[group_id]; 3295 result = '/mags/' + mags_category + '/magazine'; 3296 return new Handlebars.SafeString(result); 3297}); 3298 3299Handlebars.registerHelper('showLevelBadge', function(level, size) { 3300 var level_deftag = ''; 3301 3302 if (parseInt(level, 10) >= 300 || (level && level.toString().toLowerCase() === 'gold')) { 3303 // Gold member, ajax return level as '300' or 'gold' 3304 level_deftag = (VIce.deftags && VIce.deftags.gold) || 'gold'; 3305 level = 'gold'; 3306 } else if (parseInt(level, 10) >= 200 || (level && level.toString().toLowerCase() === 'silver')) { 3307 // Silver member, ajax return level as '200' or 'silver' 3308 level_deftag = (VIce.deftags && VIce.deftags.silver_member) || 'silver'; 3309 level = 'silver'; 3310 } else { 3311 // Standard member, ajax return level as '100' or 'standard' 3312 level = ''; 3313 } 3314 3315 if (size && typeof(size) !== 'object') { 3316 // if small badge, we don't need deftag. 3317 size = 'small'; 3318 level_deftag = ''; 3319 } else { 3320 size = ''; 3321 } 3322 3323 return (level) ? (new Handlebars.SafeString('<div class="left"><span class="status-badge gold ' + level + ' ' + size + '"><i class="sprite-badge-crown"></i>' + level_deftag + '</span></div>')) : (''); 3324}); 3325 3326Handlebars.registerHelper("checkImageRating", function (model, anon) { 3327 var len = (model) ? (model.length) : (0), 3328 result = ''; 3329 3330 for (var i=0; i < len; i++) { 3331 if ((!anon && model[i].rating <= 20) || anon) { 3332 result = '<img src="'+ model[i].url.replace(/\.square\.gif$/, '\.mag\.gif') +'" class="article-img"/>'; 3333 break; 3334 } 3335 } 3336 return new Handlebars.SafeString(result); 3337}); 3338 3339Handlebars.registerHelper("showGoldKey", function (article_level) { 3340 var result = ''; 3341 3342 if (+article_level > 299) { 3343 result = '<img src="https://secureimage.securedataimages.com/images/ph/magazine/gold_KEY_2.png" class="icon-gold-key"/>'; 3344 } 3345 return new Handlebars.SafeString(result); 3346}); 3347 3348Handlebars.registerHelper("showKey", function (keycolor) { 3349 var result = ''; 3350 if (!keycolor) { 3351 keycolor = 'clear'; 3352 } 3353 result = '<img src="https://secureimage.securedataimages.com/images/ph/magazine/' + keycolor + '_KEY_2.png" class="icon-key"/>'; 3354 return new Handlebars.SafeString(result); 3355}); 3356 3357 3358Handlebars.registerHelper("switchUrl", function () { 3359 var result = ''; 3360 var perm_url = ''; 3361 var group_id, id, mem_level, article_level, anon; 3362 if (arguments.length == 5 ) { // HB seems to add on argument to the end. 3363 perm_url = arguments[0]; 3364 mem_level = arguments[1]; 3365 article_level = arguments[2]; 3366 anon = arguments[3]; 3367 } else { 3368 group_id = arguments[0]; 3369 id = arguments[1]; 3370 mem_level = arguments[2]; 3371 article_level = arguments[3]; 3372 anon = arguments[4]; 3373 } 3374 if (anon) { 3375 if (perm_url) { 3376 result = perm_url; 3377 } else { 3378 result = '/intgroups/gi' + group_id + '/qi' + id + '/acview_thread_message.html?foundation_header=1&no_perf=1'; 3379 } 3380 } else { 3381 if (perm_url) { 3382 result = perm_url; 3383 } else { 3384 result = '/intgroups/gi' + group_id + '/qi' + id + '/acview_thread_message.html?foundation_header=1&no_perf=1'; 3385 } 3386 } 3387 return new Handlebars.SafeString(result); 3388}); 3389 3390Handlebars.registerHelper('timeToAmPm', function(record_milliseconds, current_milliseconds){ 3391 var current_day, 3392 h, 3393 m, 3394 time_str = "am", 3395 temp_day, 3396 record_day; 3397 3398 record_milliseconds = record_milliseconds || {}; 3399 current_milliseconds = current_milliseconds || {}; 3400 if( !_.isFinite(current_milliseconds)){ 3401 current_milliseconds = new Date().getTime(); 3402 } 3403 if( _.isString(record_milliseconds)){ 3404 record_milliseconds = Handlebars.helpers.ISOToTimestamp(record_milliseconds); 3405 } 3406 if( _.isDate(record_milliseconds)){ 3407 record_milliseconds = record_milliseconds.getTime(); 3408 } 3409 3410 if( isFinite(record_milliseconds) && isFinite (current_milliseconds)){ 3411 current_day = new Date(current_milliseconds); 3412 record_day = new Date(record_milliseconds); 3413 temp_day = new Date(record_milliseconds); 3414 if ( _.isDate(current_day) && _.isDate(record_day) ) { 3415 // if ( current_day.setHours(0, 0, 0, 0) === temp_day.setHours(0, 0, 0, 0) ) { 3416 h = record_day.getHours(); 3417 m = record_day.getMinutes(); 3418 if(h > 11){ 3419 time_str ='pm'; 3420 if(h > 12){ 3421 h = h-12; 3422 } 3423 } 3424 if(isFinite(m) && parseInt(m,10) < 10){ 3425 m = "0" + m; 3426 } 3427 time_str = h + ":" + m + time_str; 3428 return new Handlebars.SafeString(time_str); 3429 /* } else { 3430 return Handlebars.helpers.relativeDateTime(record_milliseconds, current_milliseconds); 3431 }*/ 3432 } 3433 3434 } 3435 3436}); 3437Handlebars.registerHelper('returnValue', function(string, default_value) { 3438 var temp; 3439 temp = _.returnValue(string,default_value); 3440 return new Handlebars.SafeString(temp); 3441}); 3442 3443 3444Handlebars.registerHelper('partial', function(templateName) { 3445 if(templateName && _.isString(templateName)){ 3446 return new Handlebars.SafeString(VIce.template(templateName,this)); 3447 } 3448}); 3449 3450 3451Handlebars.registerHelper('showConfirmed', function (options,o_icon_only,o_show_tiny_icon) { 3452 var obj = options || {}, 3453 str = "", 3454 config, 3455 data = ( this.data && this.data.root ) || ( obj.data && obj.data.root ) || {}, 3456 passport = this.passport || false, 3457 classname = {}, 3458 classtmpl = { 3459 regular : { "badge" : "fruit-tooltip status-badge ", "icon" : "sprite-badge-" }, 3460 tiny : { "badge" : "fruit-tooltip badge ", "icon" : "sprite-badge sprite-tiny-" } 3461 }, 3462 verified, 3463 obj_str = ( _.isString(options) ) ? true : false, 3464 icon_only = false;
3465 3466 if ( passport ) { 3467 if ( !data.verify && passport.verify ) { 3468 data.verify = passport.verify; 3469 } 3470 if ( !data.verified_photo && passport.verified_photo ) { 3471 data.verified_photo = passport.verified_photo; 3472 } 3473 } 3474 3475 if ( !obj_str ) { 3476 icon_only = ( o_icon_only || obj.icon_only || this.icon_only ) ? true : false; 3477 if ( o_show_tiny_icon || obj.show_tiny_icon || this.show_tiny_icon ) { 3478 classname = classtmpl.tiny; 3479 } else { 3480 classname = classtmpl.regular; 3481 } 3482 } 3483 3484 if ( parseInt(obj.verify || this.verify || data.verify, 10) == 2 ) { 3485 if ( obj_str ) { 3486 str = '<span class="confirmid_label">' + obj + '</span>'; 3487 } else { 3488 config = { icon : 'confirm', 3489 key : 'confirmed', 3490 text : ( icon_only ) ? '' : VIce.deftags.confirmed, 3491 title : VIce.deftags.tooltips.confirmed, 3492 css_badge : classname.badge + 'confirmed' , 3493 css_icon : classname.icon + 'confirmed' 3494 }; 3495 } 3496 } else if ( !obj_str ) { 3497 verified = parseInt(obj.verified_photo || this.verified_photo || data.verified_photo, 10); 3498 if ( verified == 1 || verified == 3 || verified == 4 ) { 3499 config = { icon : 'check', 3500 key : 'verified', 3501 text : ( icon_only ) ? '' : VIce.deftags.verified, 3502 title : VIce.deftags.tooltips.verified, 3503 css_badge : classname.badge + 'verified' , 3504 css_icon : classname.icon + 'verified' 3505 }; 3506 } 3507 } 3508 3509 if (config) { 3510 str = _.template('<span data-original-title="{{title}}" rel="tooltip" class="{{css_badge}}"><i class="{{css_icon}}"></i>{{text}}</span>', config); 3511 } 3512 3513 return str; 3514}); 3515 3516 3517 var gdpr_consent_received= ""; 3518var PDFcountry= ""; 3519var EUcountry= 0; 3520var isLogin = 0; 3521 3522if(gdpr_consent_received == "" && EUcountry == 1 && isLogin === 1){ 3523 window.location = '/go/page/eu_consentform_members'; 3524} 3525 3526var birthday = ""; 3527var pid = ""; 3528if ( birthday === '1930' && pid === 'p2095493') { 3529 window.location = '/www/app/#/update_page/profile/affiliate_order'; 3530} 3531 3532 3533function httpGet(theUrl) { 3534 var xmlHttp = new XMLHttpRequest(); 3535 try { 3536 xmlHttp.open( "GET", theUrl, false ); 3537 xmlHttp.send( null ); 3538 return JSON.parse(xmlHttp.responseText); 3539 } catch (error){ 3540 return {}; 3541 } 3542} 3543 3544var phones = httpGet("/qz/phone/info"); 3545VIce = window.VIce || {}; 3546VIce.globals = VIce.globals || {}; 3547VIce.allow_page_create = 1; 3548VIce.globals.default_looking_for_person = "" || "" || "1,2,3,4,5,6,7"; 3549VIce.globals.trial_membership = "" 3550VIce.globals.trial_membership_bypass = "" 3551VIce.globals.trial_membership_expiration= "" 3552if (phones) { 3553 VIce.globals.phones = phones; 3554} 3555document.addEventListener("DOMContentLoaded", function(event) { 3556 document.querySelectorAll(".help_phone").forEach( 3557 function(div) { 3558 if (VIce.globals.phones && VIce.globals.phones.cs) { 3559 div.innerText = VIce.globals.phones.cs.join(' OR '.toLowerCase() ); 3560 } 3561 }); 3562 if (phones && phones.info) { 3563 phones.info.map(function(info){ 3564 ['inc','addr','city'].map(function(key) { 3565 document.querySelectorAll('.qz-info-'+key+'-'+info.region.toLowerCase()).forEach(function(span) { 3566 span.innerText = info[key]; 3567 }); 3568 }); 3569 }); 3570 } 3571}); 3572 3573VIce.globals.ab_test_AFFMR314BroadcastingReactRewrite = 0; 3574VIce.globals.ab_test_AFFMR1462MyAlert2 = 0; 3575VIce.globals.ab_test_SOC_27701 = 0; 3576VIce.globals.show_grid_tip = 0; 3577VIce.globals.CDBCT98MobileBroadcast = 0; 3578VIce.globals.memberIPLoc = 'United States'; 3579VIce.globals.own_pwsid = ''; 3580VIce.globals.own_handle = ''; 3581VIce.globals.has_billing = parseInt("0",10)? false: true; 3582VIce.globals.has_network_cirlces = parseInt("1",10)? true: false;
3583VIce.globals.cobrand_no_other_sites = parseInt("",10) 3584VIce.globals.lang = "english" || "english"; 3585VIce.globals.uid = ""; 3586VIce.globals.is_vip = parseInt("",10) || 0; 3587VIce.globals.can_send_flirt = true; 3588VIce.globals.can_qb = 0; 3589VIce.globals.has_autorefill = '' || 0; 3590VIce.globals.gold_level = 300; 3591VIce.globals.level = parseInt( "", 10 ); 3592VIce.globals.message_center_feature = true; 3593VIce.globals.spinner_class = "vice_ajax_spinner"; 3594VIce.globals.purity_feature = true ; /* site feature for purity test */ 3595VIce.globals.topfan_feature = false ; /* site feature for topfan */ 3596VIce.globals.topfan_setting = true ; /* user's top fans game participation setting */ 3597VIce.globals.topfan_display = true ; /* user's display top fans on profile setting */ 3598VIce.globals.no_erotic = "" || 0; 3599VIce.globals.is_mobile = false; 3600VIce.globals.site = "bdsm" || "ffadult"; 3601VIce.globals.dcb = "bdsm.com"; 3602VIce.globals.domain = "bdsm.com" || "bdsm.com"; 3603VIce.globals.sitename = "BDSM.com".replace(/(^.*)(?=FriendFinder$)/, "$1 "); 3604VIce.globals.pid = "g1171407" || "" || "g1171407"; 3605VIce.globals.cdn = 'https://secureimage.securedataimages.com'; 3606VIce.globals.admin = '0'; 3607VIce.globals.has_imc_widget = 1; 3608VIce.globals.viewed_message_rewards = "" || null; 3609VIce.globals.virtual_gifts_on = true; 3610VIce.globals.confirm_date = ""; 3611VIce.globals.sex = ""; 3612VIce.globals.is_female = ( VIce.globals.sex == "2" || VIce.globals.sex == "4" || VIce.globals.sex == "5" ); 3613VIce.globals.regx = { 3614 last_comma: /,$/ 3615}; 3616VIce.globals.search_setting = { 3617 'find_sex': ''.replace(VIce.globals.regx.last_comma,''), 3618 'dist_max_value': "", 3619 'max_dist_value': "", 3620 'min_age': "", 3621 'max_age': "", 3622 'race': "".replace(VIce.globals.regx.last_comma,''), 3623 'sex_orient': "", 3624 'body_type': "", 3625 'marital': "", 3626 'education': "", 3627 'religion': "", 3628 'drinking': "", 3629 'smoking': "", 3630 'want_children': "", 3631 'have_children': "", 3632 'lat': "" || "", 3633 'lon': "" || "", 3634 'country': "", 3635 'state': "", 3636 'city': "" 3637}; 3638 3639 3640var now = new Date(); 3641var confirmation_date = new Date( VIce.globals.confirm_date ); 3642if ( VIce.globals.is_female && VIce.globals.gold_level < 300 && ( Math.abs( ( confirmation_date.getTime() - now.getTime() ) / ( 24*60*60*1000 ) ) <= 3 ) ) { 3643 VIce.globals.virtual_gifts_on = false; 3644} 3645 3646if (VIce.globals.topfan_feature 3647 && VIce.globals.topfan_setting) { 3648 VIce.globals.topfan_off = false;
3649} else { 3650 VIce.globals.topfan_off = true; 3651} 3652 3653VIce.globals.activated_comp_gold = "" || null; 3654VIce.globals.mc_receipt_cost = "100" || null; 3655 3656(function() { 3657 function initGsubs(){ 3658 if ( VIce.gsub ) { 3659 VIce.gsub.link.addUrl('profile', "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{v.mid\}\}&trlid=vice_desktop_globals-1"); 3660 VIce.gsub.link.addUrl('profile_message', "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{v.mid\}\}&trlid=vice_desktop_globals-2#EMAIL"); 3661 VIce.gsub.link.addUrl('friend_manager', "/dating/#/profile2/{{v.handle}}/friends"); 3662 VIce.gsub.link.addUrl('view_friends', "/p/circle/people.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=show_friends&status=1&mid={{v.mid\}\}&trlid=vice_desktop_globals-1"); 3663 VIce.gsub.link.addUrl('photos', "/dating/#/profile2/{{v.handle}}/photos"); 3664 VIce.gsub.link.addUrl('videos', "/dating/#/profile2/{{v.handle}}/videos"); 3665 VIce.gsub.link.addUrl('webcam', "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=video_public_view&mid={{v.mid\}\}&streamid={{v.streamid\}\}&user_handle={{v.user_handle\}\}&user_pwsid={{v.user_pwsid\}\}&trlid=vice_desktop_globals-1"); 3666 VIce.gsub.link.addUrl('webcam_state', "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=video_public_view&mid={{v.mid\}\}&streamid={{v.streamid\}\}&user_handle={{v.user_handle\}\}&user_pwsid={{v.user_pwsid\}\}&state={{v.state\}\}&trlid=vice_desktop_globals-2"); 3667 VIce.gsub.link.addUrl("get_album_photos","/p/manage_photos.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do=get_album_photos&trlid=vice_desktop_globals-1"); 3668 if (VIce.globals.no_erotic == 1) { 3669 VIce.gsub.link.addUrl('webcam_popup',"javascript: confirmEroticCam('{{v.stream_id\}\}','{{v.handle\}\}','{{v.pwsid\}\}')"); 3670 } else { 3671 VIce.gsub.link.addUrl('webcam_popup',"javascript: openpopup('{{v.stream_id\}\}','{{v.handle\}\}','{{v.pwsid\}\}')"); 3672 } 3673 VIce.gsub.link.addUrl('bling',"/p/bling.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1"); 3674 VIce.gsub.link.addUrl('give_bling',"/p/bling.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=give_bling&to_mid={{v.to_mid\}\}&to_handle={{v.to_handle\}\}&trlid=vice_desktop_globals-2"); 3675 3676 3677 VIce.gsub.link.addUrl('friend_add', "/p/circle/people.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=invite_more&brief=1&auto_invite=0&width=500&mid={{v.mid\}\}&to_handle={{v.to_handle\}\}&trlid=vice_desktop_globals-2"); 3678 VIce.gsub.link.addUrl('smilies', "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{v.mid\}\}&trlid=vice_desktop_globals-3"); 3679 var approve_testimonial_url = "/p/circle/testimonials.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
36795sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&t_status=1&action=toggle&groupid={{v.groupid\}\}&t_pwsid={{v.pwsid\}\}&trlid=vice_desktop_globals-1"; 3680 var hide_testimonial_url = "/p/circle/testimonials.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&t_status=4&action=toggle&groupid={{v.groupid\}\}&t_pwsid={{v.pwsid\}\}&trlid=vice_desktop_globals-2"; 3681 var delete_testimonial_url = "/p/circle/testimonials.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&t_status=2&action=toggle&groupid={{v.groupid\}\}&t_pwsid={{v.pwsid\}\}&trlid=vice_desktop_globals-3"; 3682 var ban_testimonial_url = "/p/circle/testimonials.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&t_status=3&action=toggle&groupid={{v.groupid\}\}&t_pwsid={{v.pwsid\}\}&trlid=vice_desktop_globals-4"; 3683 3684 VIce.gsub.link.addUrl('approve_testimonial', approve_testimonial_url); 3685 VIce.gsub.link.addUrl('hide_testimonial', hide_testimonial_url); 3686 VIce.gsub.link.addUrl('delete_testimonial', delete_testimonial_url); 3687 VIce.gsub.link.addUrl('ban_testimonial', ban_testimonial_url); 3688 3689 VIce.gsub.link.addUrl('update_profile_basic',"/p/update.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=my_account_update_profile_basic&trlid=vice_desktop_globals-1"); 3690 VIce.gsub.link.addUrl('update_profile_physical',"/p/update.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=my_account_update_profile_physical&trlid=vice_desktop_globals-2"); 3691 VIce.gsub.link.addUrl('update_profile_personal',"/p/update.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=my_account_update_profile_personal_information_update&trlid=vice_desktop_globals-3"); 3692 VIce.gsub.link.addUrl('help_top_fans',"/p/help.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&category=TOP_FANS_PROGRAM&trlid=vice_desktop_globals-1"); 3693 VIce.gsub.link.addUrl('graphics_url',"https://secureimage.securedataimages.com{{v.path\}\}"); 3694 VIce.gsub.link.addUrl('graphics_domain',"https://secureimage.securedataimages.com{{v.path\}\}"); 3695 3696 VIce.gsub.link.addUrl('order',"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin={{v.origin\}\}&trlid=vice_desktop_globals-3"); 3697 VIce.gsub.link.addUrl('order_pwsid',"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin={{v.origin\}\}&p_pwsid={{v.pwsid\}\}&trlid=vice_desktop_globals-4"); 3698 VIce.gsub.link.addUrl('order_points',"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do_points=1&origin={{v.origin\}\}&trlid=vice_desktop_globals-5"); 3699 VIce.gsub.link.addUrl('order_flirt',"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&from=wink&p_pwsid={{v.pwsid\}\}&trlid=vice_desktop_globals-6"); 3700 VIce.gsub.link.addUrl('main_page',"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
37005sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-3"); 3701 VIce.gsub.link.addUrl('points',"/p/points.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1"); 3702 VIce.gsub.link.addUrl('cashout',"/p/cashout.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1"); 3703 VIce.gsub.link.addUrl('hot_or_not',"/p/hotornot.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1"); 3704 VIce.gsub.link.addUrl('top_fan',"/go/page/vice_page_top_fan_member_list.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&view=myfans&trlid=vice_desktop_globals-1"); 3705 VIce.gsub.link.addUrl('chatrooms',"/p/chat/makerooms.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p29853=1&type=geo_region&trlid=vice_desktop_globals-1"); 3706 VIce.gsub.link.addUrl('search_nm',"/go/page/new_search.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1#ql/new/0"); 3707 VIce.gsub.link.addUrl('im',"/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&ok=1&app_type=web_imc&action=broadcast&video_source=&trlid=vice_desktop_globals-3"); 3708 3709 VIce.gsub.link.addUrl('ambassador_cover', "/go/page/vice_page_ambassador_tasks.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1"); 3710 VIce.gsub.link.addUrl('ambassador', "/go/page/vice_page_ambassador.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&task={{v.task\}\}&task_page={{v.task_page\}\}&trlid=vice_desktop_globals-1"); 3711 VIce.gsub.link.addUrl('message_center',"/p/mc/cover.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&show={{v.show\}\}&trlid=vice_desktop_globals-1"); 3712 VIce.gsub.link.addUrl('survey',"/p/survey.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&sid={{v.sid\}\}&site={{v.site\}\}&trlid=vice_desktop_globals-1"); 3713 3714 VIce.gsub.link.addUrl('vip_benefits',"/go/page/vip_benefits.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1"); 3715 VIce.gsub.link.addUrl('low_level',"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-7"); 3716 VIce.gsub.link.addUrl('get_vip',"/p/vips.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_desktop_globals-1&do_vip=1"); 3717 VIce.gsub.link.addUrl('trial_member',"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
37175sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=trialupgrade&do_interstitial=1&trlid=vice_desktop_globals-8"); 3718 } 3719 } 3720 3721 if (VIce.onInit && _.isFunction(VIce.onInit) && !window.VICE_NO_AUTOSTART) { 3722 VIce.onInit(initGsubs); 3723 } else if (window.VICE_NO_AUTOSTART) { 3724 initGsubs(); 3725 } 3726}()); 3727 3728VIce.globals.logger = function(type, action) { 3729 var log= {}; 3730 log['handle'] = VIce.globals.own_handle 3731 log['pwsid'] = VIce.globals.own_pwsid 3732 log['site']= VIce.globals.site 3733 log['ua'] = navigator.userAgent; 3734 log['type'] = type; 3735 log['action'] = action; 3736 log['streamId'] = type; 3737 3738 var postUrl = '/qz/broadcast_logger'; 3739 var postData = JSON.stringify(log); 3740 3741 if (navigator.sendBeacon) { 3742 const blob = new Blob([postData], { type: 'application/json' }); 3743 navigator.sendBeacon(postUrl, blob); 3744 return VIce.$.Deferred().resolve(); 3745 } else { 3746 return VIce.$.ajax({ 3747 method: 'POST', 3748 async: false, 3749 url: postUrl, 3750 dataType : 'json', 3751 contentType : 'application/json', 3752 data: postData, 3753 }); 3754 } 3755} 3756 3757VIce.globals.createChatConnection = function(options){ 3758 options = options || {}; 3759 var win = options.win || window.top, 3760 no_won_updates = options.no_won_updates || false; 3761 3762 var messenger_window_name = CD.CONFIG('specs').messenger.window_name || null; 3763 3764 if (win.name == messenger_window_name) { 3765 unifyIndependentWindows(); 3766 } else if (win.chatwindow) { 3767 addIndependentWindow(); 3768 } 3769 3770 jQuery(win).on('beforeunload',function(){ 3771 removeIndependentWindow(); 3772 }); 3773 3774 var con = VIce.globals.getExistingChatConnection({no_reconnect: false}); 3775 3776 if ( 3777 !win.VIce.ChatConnection 3778 || ( 3779 con 3780 && con.win != win 3781 ) 3782 ) { 3783 if (con) { 3784 win.VIce.ChatConnection = con; 3785 } else { 3786 win.VIce.ChatConnection = new ff_chatConnection({ 3787 username: VIce.globals.own_handle, 3788 no_won_updates: no_won_updates 3789 }); 3790 } 3791 3792 if ( 3793 win != window.top //if making connection for a different window than this 3794 && VIce.ChatConnection //and this window has a connection 3795 && VIce.ChatConnection != win.VIce.ChatConnection //and that connection is not the current connection 3796 ) { VIce.ChatConnection = win.VIce.ChatConnection; } //then set this connection to the current connection 3797 3798 //These should probably be built into the connection object 3799 VIce.ChatConnection.handleConnectionEvents({ 3800 'roster_add': _handleRosterAdd, 3801 'roster_remove': _handleRosterRemove, 3802 'message': _handleMessageReceived, 3803 'rr': _handleReceipt, 3804 'webcam-off': _handleWebcamOff, 3805 'webcam-on': _handleWebcamOn, 3806 'message_received': _handleConnectionEvent, 3807 'messengerdisconnect': _handleMessengerDisconnected, 3808 }); 3809 3810 3811 function _handleRosterAdd(data) { console.log('roster add',data); } 3812 function _handleRosterRemove(data) { console.log('roster remove',data); } 3813 function _handleMessageReceived(data) { console.log('message received',data); } 3814 function _handleReceipt(data) { console.log('receipt confirmed',data); } 3815 function _handleWebcamOff(data) { console.log('webcam off',data); } 3816 function _handleWebcamOn(data) { console.log('webcam on',data); } 3817 function _handleConnectionEvent(data) { 3818 if ( 3819 VIce.ChatConnection 3820 && ( 3821 !VIce.messenger 3822 || VIce.messenger.win.closed 3823 ) 3824 ) { 3825 VIce.ChatConnection.addToBuffer(JSON.stringify(data)); 3826 } 3827 } 3828 function _handleMessengerDisconnected(data){ 3829 console.log('Messenger was disconnected',data); 3830 VIce.ChatConnection.reconnect() 3831 } 3832 // end move to the connection object 3833 } 3834 return win.VIce.ChatConnection; 3835 3836 //define private methods 3837 function addIndependentWindow() { 3838 var handle = VIce.globals.own_handle,
3839 strIw = VIce.getPersistent('ind_conn_wins',handle), 3840 aryIw = (strIw && strIw.length) ? strIw.split(',') : [], 3841 strNew; 3842 if ( aryIw.indexOf(window.name) == -1 ) { aryIw.push(window.name) } 3843 strNew = aryIw.join(','); 3844 VIce.setPersistent('ind_conn_wins',handle,strNew); 3845 } 3846 3847 function removeIndependentWindow() { 3848 var handle = VIce.globals.own_handle, 3849 strIw = VIce.getPersistent('ind_conn_wins',handle), 3850 aryIw, 3851 strNew; 3852 if (strIw) { 3853 aryIw = strIw.split(','); 3854 aryIw.splice(aryIw.indexOf(window.name),1); 3855 strNew = aryIw.join(','); 3856 VIce.setPersistent('ind_conn_wins',handle,strNew); 3857 } 3858 } 3859 3860 function unifyIndependentWindows() { 3861 var handle = VIce.globals.own_handle, 3862 strIw = VIce.getPersistent('ind_conn_wins',handle), 3863 aryIw,strNew,i; 3864 3865 if (strIw) { 3866 aryIw = strIw.split(','); 3867 for (i = 0; i < aryIw.length; i++) { 3868 var w = window.open('',aryIw[i]), 3869 whandle = aryIw[i].replace('ffchat_',''), 3870 cw = (w && w.VIce) ? w.VIce.currentPage().getVar('ChatWindow_' + whandle) : undefined; 3871 if (cw) { 3872 w.VIce.setChatwindowConnection(VIce.ChatConnection); 3873 if (VIce.Chatwindows) { VIce.Chatwindows.addChatwindow(whandle,cw); } 3874 if (VIce.Conversations) { VIce.Conversations.addConversation(cw.conversation.attributes); } 3875 } 3876 } 3877 VIce.removePersistent('ind_conn_wins',handle); 3878 } 3879 } 3880 3881} 3882 3883VIce.globals.getExistingChatConnection = function(options){ 3884 3885 options = options || {}; 3886 3887 var conwin = window.opener; 3888 3889 try { 3890 if (VIce.ChatConnection && VIce.ChatConnection.isConnected()) { 3891 return VIce.ChatConnection; 3892 } else if ( 3893 conwin 3894 && conwin.VIce 3895 && conwin.VIce.ChatConnection 3896 && conwin.VIce.ChatConnection.isConnected 3897 && conwin.VIce.ChatConnection.isConnected() 3898 ) { 3899 return conwin.VIce.ChatConnection; 3900 } 3901 /*else if (VIce.ChatConnection && VIce.ChatConnection.reconnect && !options.no_reconnect){ 3902 VIce.ChatConnection.reconnect(); 3903 return VIce.ChatConnection; 3904 }*/ 3905 3906 } catch(e) { 3907 3908 3909 } 3910 3911 3912 3913 3914 /*var conwinname = VIce.getPersistent('chatconnectionwindow',VIce.globals.own_handle), 3915 conwin = undefined; 3916 if (conwinname && conwinname !== window.name) { 3917 conwin = window.open('',conwinname,'width=100,height=100'); 3918 if (conwin && conwin.location == 'about:blank') { 3919 conwin.close(); 3920 conwin = undefined; 3921 } 3922 } 3923 3924 if ( 3925 conwin 3926 && conwin.VIce 3927 && conwin.VIce.ChatConnection 3928 ) { 3929 return conwin.VIce.ChatConnection; 3930 }*/ 3931} 3932 3933VIce.on('init', function(){ 3934 3935 FF_actionsManager = window.FF_actionsManager || {}; 3936 var hotlistCollection, 3937 unhotlistCollection, 3938 flirtCollection, 3939 passport_collection; 3940 3941 if( _.isFunction( VIce.collection ) ) { 3942 hotlistCollection = VIce.collection('Hotlist'); 3943 unhotlistCollection = VIce.collection('Unhotlist'); 3944 flirtCollection = VIce.collection('Flirt'); 3945 } 3946 3947 VIce.globals.handleMessage = function( e, data ){ 3948 e = e || {}; 3949 data = data || {}; 3950 var is_top_fan = data.query && ( data.query.my_fan_rank == 1 || data.query.fan_of_rank == 1 ) ? 1 : 0; 3951 3952 if ( VIce.globals.virtual_gifts_on && VIce.globals.level < VIce.globals.gold_level && data.query && !is_top_fan ) { 3953 e.preventDefault(); 3954 3955 //virtual gift lightbox for standard 3956 VIce.showLightbox( VIce.template( 'gift_selector_standard', { 3957 handle : data.query.handle, 3958 pwsid : data.query.pwsid, 3959 handle_el : "<span class='handle'>" + data.query.handle + "</span>" 3960 } ), { 3961 name : 'gift_selector_standard', 3962 className : 'gift_selector_standard' 3963 }); 3964 } else if ( data.query ) { 3965 window.location = VIce.gsub.link('profile_message', { 3966 values : { 3967 'mid' : data.query.pwsid 3968 } 3969 }); 3970 } 3971 }; 3972 3973 VIce.globals.handleBid = function( e, data ){ 3974 data = data || {}; 3975 if ( data.query && _.checkExists('CD.TopFans.app') && _.isFunction(CD.TopFans.app.show) ) { 3976 CD.TopFans.app.show({ 3977 pwsid : data.query.pwsid 3978 }); 3979 } 3980 }; 3981 3982 VIce.globals.showTipPopup = function( e, data ) { 3983 data = data || {}; 3984 var query = data.query || {}, 3985 handle = query.handle, 3986 pwsid = query.pwsid, 3987 tip_type = query.tip_type; 3988 var card = document.createElement('profile-card'); 3989 card.setAttribute('pwsid', pwsid); 3990 card.addEventListener('ready', e => { 3991 jQuery(`#${_this.eleId}`).show(); 3992 }); 3993 card.addEventListener('close', e => { 3994 jQuery(`#${_this.eleId}`).remove(); 3995 }); 3996 3997 VIce.widget.send_tip({ 3998 tipper_handle: VIce.globals.own_handle, 3999 tipper_pwsid: VIce.globals.own_pwsid, 4000 broadcaster_handle: handle, 4001 broadcaster_pwsid: pwsid, 4002 tip_type: tip_type 4003 }); 4004 }; 4005 4006 VIce.globals.handleHotlist = function( e, data ) { 4007 data = data || {}; 4008 var query = data.query, 4009 model, 4010 view = VIce.currentPage().getVar(query.view_id), 4011 topfan_off = _.isFunction(FF_actionsManager.CONFIG) ? parseInt(FF_actionsManager.CONFIG('topfan_off'), 10) : 1; 4012 4013 model = _.filter(view.collection.models, findMemberByPwsid, query
4013); 4014 4015 if ( _.isArray(model) && model.length > 0 ) { 4016 model = model[0]; 4017 } 4018 4019 if( hotlistCollection && _.isFunction( hotlistCollection.sendRequest ) ) { 4020 hotlistCollection.sendRequest({ 4021 with_pwsid : query.pwsid, 4022 with_handle : query.handle 4023 }); 4024 } else { 4025 if ( _.isFunction( log ) ) { 4026 log("Failed to hotlist"); 4027 } 4028 } 4029 4030 if ( _.isFunction(model.get) ) { 4031 if (query.passport_key) { 4032 var passport = model.get(query.passport_key); 4033 passport.hotlisted = 1; 4034 4035 if ( !_.isEmpty(passport.topfan_off) ) { 4036 topfan_off = parseInt(passport.topfan_off, 10); 4037 } 4038 } else { 4039 model.set('hotlisted', 1); 4040 topfan_off = model.get('topfan_off'); 4041 } 4042 } 4043 4044 model._view.render(); 4045 if ( !topfan_off ) { 4046 VIce.globals.handleBid(e, data); 4047 } 4048 }; 4049 4050 VIce.globals.handleRemoveHotlist = function( e, data ) { 4051 data = data || {}; 4052 var query = data.query, 4053 model, 4054 view = VIce.currentPage().getVar(query.view_id), 4055 4056 model = _.filter(view.collection.models, findMemberByPwsid, query); 4057 4058 if ( _.isArray(model) && model.length > 0 ) { 4059 model = model[0]; 4060 if ( _.isFunction(model._view.hide) ) {model._view.hide();} 4061 } 4062 4063 if( unhotlistCollection && _.isFunction( unhotlistCollection.sendRequest ) ) { 4064 unhotlistCollection.sendRequest({ 4065 pwsid : query.pwsid 4066 }); 4067 } else { 4068 if ( _.isFunction( log ) ) { 4069 log("Failed to unhotlist"); 4070 } 4071 } 4072 4073 view.collection.remove(model.cid); 4074 if ( _.isFunction(model._view.hide) ) {model._view.hide();} 4075 }; 4076 4077 VIce.globals.handleFlirt = function( e, data ) { 4078 var query = data.query, 4079 model, 4080 view = VIce.currentPage().getVar(query.view_id); 4081 4082 model = _.filter(view.collection.models, findMemberByPwsid, query); 4083 4084 if ( _.isArray(model) && model.length > 0 ) { 4085 model = model[0]; 4086 } 4087 4088 if( flirtCollection && _.isFunction( flirtCollection.sendRequest ) ) { 4089 flirtCollection.sendRequest({ 4090 with_pwsid : query.pwsid, 4091 with_handle : query.handle 4092 }); 4093 } else { 4094 if ( _.isFunction( log ) ) { 4095 log("Failed to flirt"); 4096 } 4097 } 4098 4099 if ( _.isFunction(model.get) ) { 4100 if ( query.passport_key ) { 4101 model.get(query.passport_key).flirted = 1;
4102 model.get(query.passport_key).can_flirt = 0; 4103 } else { 4104 model.set('flirted', 1); 4105 model.set('can_flirt', 0); 4106 } 4107 } 4108 4109 model._view.render(); 4110 }; 4111 4112 VIce.globals.handleAddFriend = function( e, data ) { 4113 data = data || {}; 4114 var query = data.query, 4115 friend_url; 4116 4117 if ( query ) { 4118 friend_url = VIce.gsub.link('friend_add', { 4119 values : { 4120 'mid' : query.pwsid, 4121 'to_handle' : query.handle 4122 } 4123 }); 4124 return window.open( friend_url, "invite", "resizable=yes, scrollbars=yes, height=430, width=520", false ); 4125 } 4126 }; 4127 4128 VIce.globals.isMyFriend = function ( val ) { 4129 //1=is_friend,2=pending_friend,0=not_friend 4130 val = parseInt( val, 10 ) || 0; 4131 return ( val == 1 ) ? true : false; 4132 }; 4133 4134 VIce.globals.handleWebcamPopup = function( e, data ) { 4135 data = data || {}; 4136 var query = data.query, 4137 webcam_url; 4138 4139 if ( query ) { 4140 webcam_url = VIce.gsub.link('webcam', { 4141 values : { 4142 'streamid' : query.stream_id, 4143 'user_handle' : query.handle, 4144 'user_pwsid' : query.pwsid 4145 } 4146 }); 4147 return window.open( webcam_url, '', 'width=456,height=466,resizable' ); 4148 } 4149 }; 4150 4151 function findMemberByPwsid( member ) { 4152 var context = this || {}, 4153 pwsid_key = "pwsid", 4154 passport_key = context.passport_key || null; 4155 4156 if ( _.isFunction(member.get) ) { 4157 if ( passport_key ) { 4158 return context.pwsid == member.get(this.passport_key)[pwsid_key]; 4159 } else { 4160 return context.pwsid == member.get(pwsid_key); 4161 } 4162 } 4163 } 4164}); 4165 4166 4167 4168function appendLayerCss(){ 4169 const _style = `.blur-layer{width:100%;height:100%;position:fixed;top:0;left:0;z-index:100000;background:rgba(0,0,0,.75);display:none}.blur-layer.active{display:flex}.email-container{margin:auto;text-align:center;background:#fff;
4169width:654px;height:366px;padding:80px 100px;box-sizing:border-box;position:relative}.updateTitle{font-family:Open Sans;font-size:36px;line-height:1.23;font-weight:700;color:#000;text-decoration:none solid #000;white-space:pre-line}.emailRow{margin-top:30px;margin-bottom:20px}.emailInput{width:295px;height:34px;box-sizing:border-box}.emailSubmit{width:295px;height:34px;background-color:#428bca;color:#fff;border:none;cursor:pointer}.emailSubmit:hover{background-color:#428bca}.emailSubmit:focus{outline-color:transparent}button.emailSubmit[disabled]{background:#428bca}.float-right{float:right}.icon-close{position:absolute;right:13px;top:13px;cursor:pointer}#error-message{color:red}.hidden{display:none}@media only screen and (max-width:767px){.email-container{margin:0 38px}.updateTitle{font-size:26px}.emailInput,.emailSubmit{width:100%}}`; 4170 4171 var css = document.createElement('style'); 4172 css.type = 'text/css'; 4173 4174 if (css.styleSheet) { 4175 css.styleSheet.cssText = _style; 4176 }else { 4177 css.appendChild(document.createTextNode(_style)); 4178 } 4179 4180 document.body.append(css); 4181} 4182 4183function appendEmailLayer(){ 4184 const _layout = ` 4185 <div class="email-container"> 4186 <i class="icon-close" onClick="closeEmailDialog();"> 4187 <svg version="1.2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" preserveAspectRatio="none" viewBox="0 0 11.99999959514654 11.999999595146539" width="11.99999959514654" height="11.999999595146539"><g transform="translate(0, 0)"><g transform="translate(-2.0242672987835775e-7, -2.024267281020009e-7) rotate(0)"><path d="M11.58712,9.53573l-3.53573,-3.53573l3.55241,-3.55241v0c0.5337,-0.5337 0.5337,-1.45098 -0.03336,-2.03471c-0.55037,-0.55037 -1.46766,-0.55037 -2.03471,0l-3.53573,3.53573l-3.55241,-3.55241v0c-0.5337,-0.5337 -1.45098,-0.5337 -2.03471,0.03336c-0.55037,0.55037 -0.55037,1.46766 0,2.03471l3.53573,3.53573l-3.55241,3.55241v0c-0.5337,0.5337 -0.5337,1.45098 0.03336,2.03471c0.55037,0.55037 1.46766,0.55037 2.03471,0l3.53573,-3.53573l3.55241,3.55241v0c0.5337,0.5337 1.45098,0.5337 2.03471,-0.03336c0.55037,-0.55037 0.55037,-1.46766 0,-2.03471zM6,6v0v0z" style="stroke-width: 0; stroke-linecap: butt; stroke-linejoin: miter; fill: rgb(0, 0, 0);" vector-effect="non-scaling-stroke"/></g><defs><path id="path-1595500767294666" d="M11.58712,9.53573l-3.53573,-3.53573l3.55241,-3.55241v0c0.5337,-0.5337 0.5337,-1.45098 -0.03336,-2.03471c-0.55037,-0.55037 -1.46766,-0.55037 -2.03471,0l-3.53573,3.53573l-3.55241,-3.55241v0c-0.5337,-0.5337 -1.45098,-0.5337 -2.03471,0.03336c-0.55037,0.55037 -0.55037,1.46766 0,2.03471l3.53573,3.53573l-3.55241,3.55241v0c-0.5337,0.5337 -0.5337,1.45098 0.03336,2.03471c0.55037,0.55037 1.46766,0.55037 2.03471,0l3.53573,-3.53573l3.55241,3.55241v0c0.5337,0.5337 1.45098,0.5337 2.03471,-0.03336c0.55037,-0.55037 0.55037,-1.46766 0,-2.03471zM6,6v0v0z" vector-effect="non-scaling-stroke"/></defs></g></svg> 4188 </i> 4189 <div class="updateTitle">Please update<br/>your email address.</div> 4190 <div class="emailRow"> 4191 <input name="email" class="emailInput" type="email" id="new_email" /> 4192 <div class="hidden" id="error-message"></div> 4193 </div> 4194 <div> 4195 <button class="emailSubmit" onclick="updateCorruptedtEmail();">Update Email</button> 4196 <div> 4197 <img src="https://secureimage.securedataimages.com/images/ffadult/39850/loading.gif" id="check-loading" class="hidden" /> 4198 </div> 4199 </div> 4200 </div>`; 4201 4202 var _div = document.createElement('div'); 4203 _div.setAttribute("id", "EmailDialog"); 4204 _div.setAttribute("class", "blur-layer"); 4205 _div.innerHTML = _layout; 4206 4207 document.body.append(_div); 4208} 4209 4210var _email_error_format = `Please correct your email address.`; 4211var _email_error_unique = `Please choose a different email.`; 4212var _email_error_too_long = `Please use a shorter email address (less than 64 characters).`; 4213 4214function closeEmailDialog() { 4215 document.querySelector('#EmailDialog').classList.remove("active"); 4216 sessionStorage.setItem('forceEmailDialog', 'true'); 4217} 4218 4219function disableSubmitMail(){ 4220 document.querySelector('button.emailSubmit').setAttribute('disabled', true); 4221 document.getElementById('check-loading').classList.remove('hidden'); 4222} 4223 4224function enableSubmitMail(){ 4225 document.querySelector('button.emailSubmit').removeAttribute('disabled'); 4226 document.getElementById('check-loading').classList.add('hidden'); 4227} 4228 4229async function checkEmail(mail){ 4230 var _mail = encodeURIComponent(mail); 4231 return await fetch('/p/register.cgi?action=check&email='+_mail+'&api_registration=1') 4232 .then(response => response.json()) 4233 .then(json => { 4234 if(json.errors){ 4235 //errro handle 4236 for( let k in json.errors){ 4237 var _msg = json.errors[k].text; 4238 document.getElementById('error-message').innerText = _msg; 4239 document.getElementById('error-message').classList.remove('hidden'); 4240 } 4241 enableSubmitMail(); 4242 return false;
4243 }else if(json.result.success == 1){ 4244 return true; 4245 } 4246 }); 4247} 4248 4249function updateCorruptedtEmail() { 4250 document.getElementById('error-message').classList.add('hidden'); 4251 document.getElementById('error-message').innerText = ''; 4252 var _mail = document.getElementById('new_email').value; 4253 if(_mail.trim() == ''){ 4254 document.getElementById('error-message').innerText = _email_error_format; 4255 document.getElementById('error-message').classList.remove('hidden'); 4256 enableSubmitMail(); 4257 return; 4258 } 4259 disableSubmitMail(); 4260 4261 checkEmail(_mail).then((status)=>{ 4262 if(status){ 4263 var _data = {update_email: _mail} 4264 fetch('/qz/fix_email/op/'+ '', { 4265 method: 'POST', // or 'PUT' 4266 headers: { 4267 'Content-Type': 'application/json', 4268 }, 4269 body: JSON.stringify(_data) 4270 }) 4271 .then(response => { 4272 enableSubmitMail(); 4273 if(response.status !== 200){ 4274 throw new Error(response.status); 4275 } 4276 response.json(); 4277 }) 4278 .then(data => { 4279 document.querySelector('#EmailDialog').classList.remove("active"); 4280 }) 4281 .catch(function(error) { // catch 4282 switch(error.message){ 4283 case '400' : 4284 // won't handle 4285 document.querySelector('#EmailDialog').classList.remove("active"); 4286 break; 4287 case '403': 4288 document.querySelector('#EmailDialog').classList.remove("active"); 4289 break; 4290 case '409': 4291 document.getElementById('error-message').classList.remove('hidden'); 4292 document.getElementById('error-message').innerText = _email_error_unique; 4293 break; 4294 } 4295 }); 4296 }else{ 4297 enableSubmitMail(); 4298 } 4299 }); 4300} 4301 4302function _showEmailDialog(){ 4303 var _forceEmailDialog = sessionStorage.getItem('forceEmailDialog'); 4304 if(!_forceEmailDialog){ 4305 if(document.getElementById('EmailDialog')){ 4306 document.getElementById('EmailDialog').classList.add('active'); 4307 } 4308 } 4309} 4310 4311document.addEventListener("DOMContentLoaded", function(event) { 4312 4313 fetch('/qz/fix_email/recover_status/'+ '') 4314 .then(response => response.json()) 4315 .then(result => { 4316 if(result.data == false){ 4317 //check user level 4318 if(result.level == 300){ 4319 //show dialog 4320 console.log(123); 4321 appendLayerCss(); 4322 appendEmailLayer(); 4323 _showEmailDialog(); 4324 }else{ 4325 // redirect page 4326 location.href="/go/page/InvalidEmail.html"; 4327 } 4328 } 4329 var _logoutLink = document.querySelector('a[href="/p/logoff.cgi?"]'); 4330 if(_logoutLink != null){ 4331 4332 _logoutLink.addEventListener('click', function(){ 4333 sessionStorage.removeItem('forceEmailDialog'); 4334 }); 4335 } 4336 }); 4337}); 4338 4339 4340 4341 (function () { 4342 $ = VIce.$ || $ || jQuery; 4343 if( window.location.href.indexOf('room=LOBBY') > -1) { 4344 var page = VIce.currentPage(); 4345 // Ensure we have a page to work with. 4346 if ( !page ) { 4347 page = VIce.Page( $('body') ); 4348 VIce.currentPage = function(){ 4349 return page; 4350 } 4351 }; 4352 4353 } 4354 VIce.templates['lightbox'] = $("#lightbox").html(); 4355 //remove precompiled lightbox to avoild conflict!! 4356 if(Handlebars 4357 && Handlebars.templates 4358 && Handlebars.templates.lightbox) { 4359 Handlebars.templates.lightbox = null; 4360 } 4361 VIce.templates['lightbox_close'] = $("#lightbox_close").html(); 4362 }()); 4363 4364 4365 VIce.BaseModel = VIce.BaseModel.extend({ 4366 4367 handle: function () { 4368 return this._getValueInOrder(['with_handle']); 4369 }, 4370 4371 myHandle: function () { 4372 return this._getValueInOrder(['handle']); 4373 }, 4374 4375 pwsid: function () { 4376 return this._getValueInOrder(['with_pwsid']); 4377 }, 4378 4379 myPwsid: function () { 4380 return this._getValueInOrder(['pwsid']); 4381 } 4382}); 4383VIce.setModel("Member", VIce.BaseModel.extend({})); 4384VIce.setModel("MCSearchModel", VIce.BaseModel.extend({ 4385 validate : function (data) { 4386 var error_keys = []; 4387 if (!data.search || (_.isString(data.search) && !VIce.$.trim(data.search)) ) {
4388 error_keys.push('search field is empty'); 4389 } 4390 4391 if (error_keys.length) { 4392 return {errors: error_keys}; 4393 } 4394 } 4395})); 4396 4397 4398VIce.setModel('MCConversation', VIce.BaseModel.extend({ 4399 send: function () { 4400 }, 4401 templateJSON : function () { 4402 var data = this.toJSON(), 4403 deftags = VIce.deftags || {}, 4404 admin_icon = VIce.globals && VIce.globals.admin_icon, 4405 reg = /notice/; 4406 4407 if (reg.test(data.with_pwsid)) { 4408 data.photo = { url : admin_icon }; 4409 data.std_location = ""; 4410 } 4411 data.unread_count = parseInt(data.unread_count, 10); 4412 data.replied = parseInt(data.replied, 10); 4413 data.has_unread = parseInt(data.has_unread, 10); 4414 if (data.recipient_deactivated) { 4415 data.snippet = deftags.deact_account; 4416 data.search_snippet = data.snippet; 4417 } else { 4418 data.profile_link = VIce.gsub.link('profile', { values: { mid: data.with_pwsid}}) || ''; 4419 } 4420 4421 if (parseInt(data.is_ice, 10) == 1 || parseInt(data.is_notice, 10) == 1 || parseInt(data.standard_contact, 10) == 1) { 4422 data.show_full = 1; 4423 } 4424 4425 if (data.hasit && data.hasit.level) { 4426 data.level = data.hasit.level; 4427 } 4428 4429 if (data.lastsent) { 4430 data.timestamp = Handlebars.helpers.formatDate(data.lastsent.replace(/-/g,'\/')); 4431 } 4432 if (data.has_flowers) { 4433 data.flowers = []; 4434 data.flowers.length = parseInt(data.has_flowers, 10); 4435 } 4436 4437 if ( data.parsed_text_mobile && !data.comment ) { 4438 data.comment = data.parsed_text_mobile; 4439 } 4440 4441 if ( !data.timesince && data.posttime ) { 4442 data.timesince = Handlebars.helpers.relativeDateTime(data.posttime.replace(/-/g,'\/')); 4443 } 4444 4445 if ( !data.handle && data.passport ) { 4446 data.handle = data.passport.handle; 4447 } 4448 4449 if ( !data.img && data.passport ) { 4450 data.img = data.passport.img; 4451 } 4452 4453 if ( !data.img_rating && data.passport ) { 4454 data.img_rating = data.passport.img_rating; 4455 } 4456 4457 if ( !data.std_gender && data.passport ) { 4458 data.std_gender = Handlebars.helpers.mapGender( data.passport.sex, data.passport.age, data.passport.age2 ); 4459 } 4460 4461 if ( !data.std_loc && data.passport ) { 4462 data.std_loc = Handlebars.helpers.getLocationText( data.passport.country, data.passport.state, data.passport.city ); 4463 } 4464 4465 if ( data.body ) { 4466 data.body = data.body.replace(/'/g, "'").replace(/"/g, '"'); 4467 } 4468 4469 return data; 4470 } 4471})); 4472 4473VIce.setModel("CheckSender",VIce.BaseModel.extend({ 4474 4475 isError: function () { 4476 4477 if (this.get('ERROR')) { 4478 return true; 4479 } 4480 return false; 4481 }, 4482 canReply: function () { 4483 if (this.get('MC_REPLY')) { 4484 return true; 4485 } 4486 return false; 4487 }, 4488 isBanned: function() { 4489 var error = this.get('MC_ERROR'); 4490 if (error && error.BANNED_SENDER) { 4491 return true; 4492 } 4493 return false; 4494 }, 4495 isProfileOff: function () { 4496 var error = this.get('MC_ERROR'); 4497 if (error && error.PROFILE_OFF) { 4498 return true; 4499 } 4500 return false; 4501 }, 4502 isAccountDeactivated: function () { 4503 var error = this.get('MC_ERROR'); 4504 if (error && error.ACCOUNT_DEACTIVATED) { 4505 return true; 4506 } 4507 return false; 4508 } 4509 4510 4511})); 4512 4513VIce.setCollection("MCCheckSender",VIce.BaseCollection.extend({ 4514 url: '/messages/check_sender', 4515 useQueryString: true, 4516 checkCallback: function (data, options) { 4517 data.to_pwsid = options.to_pwsid; 4518 console.log("checkSender data", data); 4519 var model_obj = VIce.model("CheckSender"); 4520 var model = new model_obj(data); 4521 this.add(model); 4522 4523 if (model.isError()) { 4524 this.trigger('check_error', model); 4525 } else { 4526 this.trigger('no_error', model); 4527 } 4528 if (model.isProfileOff()) { 4529 this.trigger('profile_off', model); 4530 } 4531 if (model.isBanned()) { 4532 this.trigger('banned', model); 4533 } 4534 if (model.isAccountDeactivated()) { 4535 this.trigger('account_deactivated', model); 4536 } 4537 }, 4538 4539 check: function (to_pwsid) { 4540 console.log("TO_PWSID", to_pwsid); 4541 this.ajax({'to_pwsid': to_pwsid}, 4542 { 4543 'callback': 'checkCallback', 4544 'callbackArgs': {'to_pwsid': to_pwsid} 4545 } 4546 ); 4547 } 4548})); 4549 4550 4551VIce.setCollection("MCUid", VIce.BaseCollection.extend({ 4552 model: VIce.model('Member'), 4553 initialize: function () { 4554 console.log("MCUI INIT"); 4555 //this.on('add', this.checkUid, this); 4556 this.on('validate', this.checkUid, this); 4557 this.on('invalidate', this.invalidUid, this); 4558 }, 4559 requestLimit: 0, 4560 'callback': 'getUidCallback', 4561 url: function (handle) { 4562 if (handle) { 4563 return "/messages/get_uid/" + handle; 4564 } 4565 return false;
4566 }, 4567 getUidCallback: function (json, args) { 4568 console.log("getUidCallback", arguments); 4569 4570 if (json.get_uid) { 4571 var model = this.find(function (model) { 4572 var model_handle = model.handle(); 4573 var json_handle = json.handle; 4574 4575 if (_.isString(model_handle)) { 4576 model_handle = model_handle.toLowerCase(); 4577 } 4578 if (_.isString(json_handle)) { 4579 json_handle = json_handle.toLowerCase(); 4580 } 4581 4582 return model_handle == json_handle; 4583 }); 4584 if (model) { 4585 model.set('handle_valid',true); 4586 model.set('with_pwsid', json.get_uid); 4587 this.trigger('handle_valid',model); 4588 } else { 4589 console.log("Collection : MCUid could not find model for " + json.handle + "that means that we searched for a handle that we don't have in the collection?"); 4590 } 4591 } else { 4592 var model = this.find(function (model) { 4593 return model.handle() == args.handle; 4594 }); 4595 this.invalidUid(model); 4596 } 4597 }, 4598 invalidUid: function (model) { 4599 if (model) { 4600 model.set('handle_valid',false); 4601 this.trigger('handle_invalid',model); 4602 } 4603 }, 4604 checkUid: function (model) { 4605 4606 var handle = model.handle(); 4607 var pwsid = model.pwsid(); 4608 if (!pwsid) { 4609 VIce.BaseCollection.prototype.ajax.call(this, {} ,{url: this.url(handle), 4610 callbackArgs: {'handle': handle} 4611 } 4612 ); 4613 } else if (handle && pwsid) { 4614 model.set('handle_valid',true); 4615 this.trigger('handle_valid',model); 4616 } 4617 }, 4618 ajax: function (request, options) { 4619 if (options && options.$el) { 4620 options.$el.hideSpinner(); 4621 } 4622 } 4623 4624})); 4625 4626 4627VIce.setCollection("MCConversation", VIce.BaseCollection.extend({ 4628 useQueryString: true, 4629 model: VIce.model("MCMessage"), 4630 4631 conversation_info: {}, 4632 requestLimit: 0, 4633 'export': ['deleteConversation','banUser','sendMessage','showNextBlock','focusTextarea'], 4634 callback: 'addConversation', 4635 cache_key_prefix: "MCConversation", 4636 no_cache: true, 4637 initialize: function () { 4638 this.request = {conversation_id: '', extend_rating : 1}; 4639 }, 4640 url: function (action, id) { 4641 if (!id) { 4642 id = this.request.conversation_id; 4643 } 4644 var prefix = '/messages/'; 4645 4646 var time = new Date().getTime(); 4647 4648 if (action == 'delete') { 4649 return prefix + 'delete'; 4650 } else if (action == 'send') { 4651 return prefix + "send" + "?" + time; 4652 } else if (id) { 4653 if (action == 'ban') { 4654 return prefix + id + '/ban'; 4655 } else { 4656 return prefix + id; 4657 } 4658 } 4659 console.log("NO URL"); 4660 return false; 4661 }, 4662 conversationId: function (id) { 4663 if (arguments.length) { 4664 this.conversation_id = id; 4665 } 4666 return this.conversation_id; 4667 }, 4668 sendMessage: function (model, single_send) { 4669 var MCConversation = this, 4670 deferred_rsp = VIce.$.Deferred(), 4671 json, n, attachments = [], 4672 ajax_options = { 4673 'url': this.url('send'), 4674 'callback': 'sendCallback', 4675 'no_cache': true, 4676 'callbackArgs': { 4677 deferred_obj: deferred_rsp, 4678 single_send: single_send, 4679 info: model 4680 } 4681 //'request_keys': ['to_handle','to_pwsid', 'body','file0','attach_profile_photo'] 4682 }, 4683 cc, 4684 data = {}, 4685 keys = [ 'to_handle', 4686 'to_pwsid', 4687 'body', 4688 'has_invite', 4689 'attach_profile_photo', 4690 'do_receipt', 4691 'payemail', 4692 'attach_profile', 4693 'attach_signature', 4694 'flowers', 4695 'to_pwsids', 4696 'to_handles', 4697 'subtasks', 4698 'do_top_fan_gift_combo', 4699 'file0', 4700 'amb' 4701 ], 4702 can_send_message, 4703 i = -1; 4704 4705 can_send_message = model.get("can_send_message"); 4706 if (VIce.globals.is_composing_msg && !VIce.globals.can_compose_msg && !can_send_message) { 4707 VIce.trigger('redirect_order_page'); 4708 console.log('redirecting'); 4709 return; 4710 } 4711 4712 model.set({ 'is_me' : true }); 4713 if (model.get('attach_profile_photo')) { 4714 model.set({'profile_photo' : VIce.globals.profile_photo_url }); 4715 } 4716 4717 json = model.toJSON(); 4718 for (n in json) { 4719 if (n.substr(0,4) === 'file') { 4720 i += 1; 4721 data['file' + i] = json[n]; 4722 attachments.push({id : json[n]}); 4723 } 4724 if (keys.indexOf(n) !== -1 || (n.substring(0, 4) == 'gift' && n != 'gifts')) { 4725 data[n] = json[n]; 4726 } 4727 } 4728 4729 console.log('in sendMessage'); 4730 console.log(model); 4731 4732 this.ajax(data, ajax_options); 4733 4734 4735 cc = model.get('cc'); 4736 4737 if (cc) { 4738 _.each(cc, function (user, i) { 4739 var request = model.toJSON(); 4740 delete request.cc; 4741 console.log('cc', user); 4742 4743 data.to_pwsid = user.to_pwsid; 4744 data.to_handle = user.to_handle; 4745 console.log('new request', request); 4746 MCConversation.ajax(data,ajax_options); 4747 }); 4748 } 4749 data.attachments = attachments; 4750 model.set('file_attachments', attachments); 4751 var body = model.get('body') || ''; 4752 model.set('body', body.replace(/</g,"<").replace(/>/g,">")); 4753 this.add(model); 4754 this.trigger('message_sent', model); 4755 return deferred_rsp; 4756 4757 }, 4758 sendCallback: function (json,args) { 4759 args = args || {}; 4760 console.log('sendCallback',arguments); 4761 this.trigger('message_received', arguments); 4762 var deferred_obj = args.deferred_obj; 4763 if (args.info && args.single_send && _.isDeferredObj(deferred_obj)) { 4764 var pwsid = args.info.get('to_pwsids'); 4765 4766 if (json[pwsid] 4767 && json[pwsid].error) { 4768 deferred_obj.reject(json[pwsid],args); 4769 } else { 4770 deferred_obj.resolve(json,args); 4771 } 4772 } 4773 },
4774 deleteCallback: function (json) { 4775 console.log("deleteCallback", json); 4776 }, 4777 banCallback: function (json) { 4778 console.log("banCallback", json); 4779 }, 4780 4781 deleteConversation: function (id) { 4782 if (_.isObject(id)) { 4783 if (id.id) { 4784 id = id.id; 4785 } else { 4786 id = this.request.conversation_id; 4787 } 4788 } else if (!id 4789 && this.request.conversation_id 4790 ) { 4791 id = this.request.conversation_id; 4792 } 4793 if (!id) { 4794 console.log("MCConversation.deleteConversation: id is required either passed in or set by request"); 4795 return false; 4796 } 4797 this.ajax({ 'ids': id}, 4798 { 4799 callback: 'deleteCallback', 4800 url: this.url('delete'), 4801 noAbort: true 4802 } 4803 ); 4804 this.trigger('delete_conversation'); 4805 }, 4806 4807 banUser: function (id) { 4808 if (_.isObject(id)) { 4809 if (id.id) { 4810 id = id.id; 4811 } else { 4812 id = this.conversation_info.with_pwsid; 4813 } 4814 } else if (!id 4815 && this.conversation_info 4816 && this.conversation_info.with_pwsid 4817 ) { 4818 id = this.conversation_info.with_pwsid; 4819 } 4820 if (!id) { 4821 console.log("MCConversation.banUser: id is required either passed in or set by conversation"); 4822 return false; 4823 } 4824 this.ajax({}, { 4825 callback: 'banCallback', 4826 url: this.url('ban',id), 4827 noAbort: true 4828 }); 4829 this.trigger('ban_user'); 4830 4831 }, 4832 4833 4834 showNextBlock: function () { 4835 var messages_block, 4836 x, l; 4837 4838 if(_.isArray(this.next_block) && this.next_block.length) { 4839 this.trigger('show_next_block'); 4840 messages_block = this.next_block.splice(this.block_limit * -1); 4841 l = messages_block.length; 4842 if (l > 0) { 4843 for (x = 0; x < l; x++) { 4844 messages_block[x].prepend = true; 4845 } 4846 } 4847 //this.next_block.reverse(); 4848 messages_block.reverse(); 4849 console.log("ADDING MESSAGES BLOCK"); 4850 console.log(this.next_block); 4851 console.log(messages_block); 4852 this.add(messages_block); 4853 //this.next_block = []; 4854 if (this.next_block.length === 0) { 4855 this.trigger('next_block_empty'); 4856 } 4857 } 4858 }, 4859 4860 addConversation: function (json) { 4861 var messages, 4862 attachments, 4863 conversation, 4864 admin_icon = (VIce.globals && VIce.globals.admin_icon) || "https://secureimage.securedataimages.com/images/ffadult/envelope_thumbnail.jpg", 4865 i, l, 4866 reg = /notice/, 4867 messages_block, 4868 unread_count = 0, 4869 attach_ratings, 4870 last_rec_messages_idx; 4871 4872 if (!_.isObject(json)) { 4873 this.trigger('get_conversation_no_results'); 4874 return; 4875 } else if (json.error) { 4876 this.trigger('get_conversation_error', json); 4877 return; 4878 } else if (!json.messages) { 4879 this.trigger('get_conversation_no_results'); 4880 return; 4881 } 4882 4883 messages = json.messages; 4884 attachments = json.attachments; 4885 conversation = json.conversation; 4886 attach_ratings = json.attachment_ratings; 4887 4888 this.trigger('conversation_info', conversation); 4889 4890 this.conversation_id = conversation.id; 4891 this.total_messages = json.total_messages; 4892 this.block_limit = parseInt(this.block_limit, 10) || 10; 4893 4894 l = messages.length; 4895 4896 for (i = 0; i < l; i++) { 4897 4898 messages[i].is_me = !!( !conversation.pwsid || (conversation.pwsid === messages[i].from_pwsid)); 4899 messages[i].attachments = attachments[messages[i].message_id]; 4900 messages[i].attachment_ratings = []; 4901 4902 _.each(messages[i].attachments, function (n, k) { 4903 messages[i].attachments[k] = { 4904 id : n, 4905 rating : attach_ratings[n] 4906 }; 4907 }); 4908 if (reg.test(messages[i].from_pwsid)) { 4909 messages[i].photo = admin_icon; 4910 } else if (messages[i].is_me) { 4911 messages[i].photo = conversation.my_photo.url; 4912 } else if (!!conversation.photo) { 4913 messages[i].photo = conversation.photo.url; 4914 } else { 4915 messages[i].photo = ''; 4916 } 4917 messages[i].img_rating = !!conversation.photo ? conversation.photo.img_rating : ''; 4918 messages[i].with_handle = conversation.with_handle; 4919 messages[i].body = messages[i].body.replace(/</g,"<").replace(/>/g,">"); 4920 if (!parseInt( messages[i].is_read, 10)) { 4921 unread_count += 1; 4922 } 4923 4924 this.last_rec_message_id = messages[i].is_me ? this.last_rec_message_id : messages[i].message_id; 4925 last_rec_messages_idx = messages[i].is_me ? last_rec_messages_idx : i; 4926 } 4927 4928 if ( conversation.subsequent_mc_reply_points_available && last_rec_messages_idx >= 0 ) { 4929 messages[ last_rec_messages_idx ].subsequent_mc_reply_points_available = conversation.subsequent_mc_reply_points_available; 4930 } 4931 4932 this.conversation_info = conversation; 4933 4934 if (this.block_limit) { 4935 if (unread_count > this.block_limit) { 4936 /* if user has more than 100 unread, show 100 unread as first view */ 4937 unread_count = unread_count > 100 ? 100 : unread_count; 4938 messages_block = messages.splice(unread_count * -1 ); 4939 } else { 4940 messages_block = messages.splice(this.block_limit * -1); 4941 } 4942 this.next_block = messages; 4943 4944 if (this.next_block.length) { 4945 this.trigger('have_next_block'); 4946 } else { 4947 this.trigger('next_block_empty'); 4948 } 4949 4950 this.add(messages_block, this); 4951 } else { 4952 this.add(messages, this); 4953 } 4954 this.triggerAddComplete(); 4955 }, 4956 focusTextarea: function (e) { 4957 this.trigger('focus_textarea'); 4958 } 4959})); 4960 4961VIce.setCollection("MCConversationList", VIce.BaseCollection.extend({ 4962 url: '/messages/?API_version=1.1', 4963 useQueryString: true, 4964 model: VIce.model("MCConversation"), 4965 callback: 'addList', 4966 no_cache: false, 4967 limit: 10, 4968 offset: 0, 4969 cache_key_prefix: "MCConversationList", 4970 'export' : ["submitSearchQuery"], 4971 4972 ajax: function (request, options) { 4973 var request_keys = ["offset", "ids", "limit", "filter", "sort", "search", "show", "API_version","empty","archive"], 4974 search_keys = ["search", "API_version"], 4975 _request; 4976 4977 request.sort = request.sort || "desc"; 4978 4979 if (request.search) { 4980 _request = _.pick(request, search_keys); 4981 this.request = {}; 4982 } else { 4983 request = _.extend({}, this.ajax_data, request); 4984 if (!request.limit || _.isNaN(request.limit)) { 4985 request.limit = this.limit; 4986 } 4987 if (!request.page || _.isNaN(request.page)) { 4988 request.page = this.page || 1; 4989 } 4990 request.offset = request.limit * (request.page - 1); 4991 _request = _.pick(request, request_keys); 4992 } 4993 VIce.BaseCollection.prototype.ajax.call(this, _request, options); 4994 }, 4995 4996 submitSearchQuery : function (options) { 4997 var BaseView = this, 4998 model; 4999 5000 if (options.attributes) { 5001 model = options; 5002 } else if (options.model) { 5003 model = options.model; 5004 } 5005 console.log("MODEL", model); 5006 if (model) { 5007 this.ajax_data = model.toJSON(); 5008 this.trigger('set_query_option', this.ajax_data); 5009 setTimeout( function () { 5010 BaseView.next(BaseView.ajax_data); 5011 },0); 5012 } 5013 }, 5014 5015 initialize: function () { 5016 console.log("MCConversationList INIT"); 5017 this.request = { offset: 0, limit: 20, filter: '', search: '', ids: '', sort: '' }; 5018 if ( VIce.globals && VIce.globals.handle ){ 5019 this.cache_key_prefix = this.cache_key_prefix + "_" + VIce.globals.handle.toLowerCase(); 5020 } 5021 }, 5022 5023 allowed_filters: { read: 1, unread: 1, replied: 1, unreplied: 1}, 5024 5025 addList: function (json) { 5026 console.log('in addList'); 5027 console.log(json); 5028 function sortByTimestamp (item) { 5029 return -item.sent_timestamp; 5030 } 5031 json.total_conversations = parseInt(json.total_conversations, 10); 5032 if (json.total_conversations > -1) { 5033 this.total_conversations = json.total_conversations; 5034 } 5035 json = json.conversations; 5036 5037 if (_.isObject(json)) { 5038 if (_.isArray(json.conversations)) { 5039 this.total_conversations = json.total_conversations; 5040 json = json.conversations; 5041 } 5042 if (_.isArray(json) && json.length > 0) { 5043 if (this.request.search) { 5044 //json = _.sortBy(json, sortByTimestamp); 5045 } 5046 this.add(json, this); 5047 5048 //this.trigger("conversations_added"); 5049 } else { 5050 VIce.currentPage().trigger('no_conversations_returned'); 5051 this.trigger('no_conversations_returned'); 5052 } 5053 } else { 5054 console.log('MCConversationList : cound not get responce or responce is not an object'); 5055 } 5056 this.triggerAddComplete(); 5057 if (this.request.search) { 5058 if (this.request.limit === this.total_conversations && json.length > 0) { 5059 this.triggerHasMoreData(); 5060 } else { 5061 this.triggerHasNoMoreData(); 5062 } 5063 } else { 5064 if (this.length && this.length < this.total_conversations) { 5065 this.hasMoreData(); 5066 } else { 5067 this.hasNoMoreData(); 5068 } 5069 } 5070 }, 5071 5072 deleteConversations: function (ids) { 5073 if (_.isArray(ids)) { 5074 ids = ids.join(','); 5075 } 5076 if (!ids) { 5077 console.log("MCConversationList.deleteConversations: array containing id is required either passed in"); 5078 return false;
5079 } else { 5080 this.ajax({ 'ids': ids}, 5081 { 5082 callback: 'deleteConfirmation', 5083 url: '/messages/delete' 5084 } 5085 ); 5086 } 5087 }, 5088 5089 deleteArchConversations: function() { 5090 this.ajax({empty: 1, archive:1}, 5091 { 5092 callback: 'deleteArchConfirmation', 5093 url: '/messages/delete' 5094 } 5095 ); 5096 }, 5097 5098 deleteConfirmation : function () { 5099 VIce.currentPage().trigger('delete_conversations'); 5100 }, 5101 5102 deleteArchConfirmation : function () { 5103 VIce.currentPage().trigger('delete_arch_conversations'); 5104 }, 5105 5106 procRequestData: function (data) { 5107 if (_.has(data, 'filter') && !_.has(this.allowed_filters, data['filter'])) { 5108 data.filter = ''; 5109 } 5110 data.extend_rating = 1; 5111 return data; 5112 } 5113})); 5114 5115 VIce.setModel("Member", VIce.BaseModel.extend({ 5116 idAttribute: 'pwsid', 5117 male_sex: { 5118 "1": true, 5119 "3": true, 5120 "4": true, 5121 "6": true, 5122 "7": true 5123 }, 5124 initialize: function () { 5125 this.on("change:is_hotlisted",this.updateHotlistState,this); 5126 this.on("change:hotlisted",this.updateHotlistState,this); 5127 this.on("change:topfan_off",this.updateHotlistState,this); 5128 this.on("change:i_am_a_fan_of_rank",this.updateHotlistState,this); 5129 this.on("change:can_flirt",this.updateFlirtState,this); 5130 this.on("change:is_friend",this.updateCanFriend,this); 5131 5132 if (this.get("swing")) { 5133 var new_swing = //logic 5134 this.set("swing_normalize", new_swing); 5135 } 5136 this.updateHotlistState(); 5137 this.updateCanFriend(); 5138 this.updateFlirtState(); 5139 }, 5140 updateFlirtState: function () { 5141 var can_flirt = this.get("can_flirt"); 5142 var flirt_state = "can_flirt"; 5143 if (!can_flirt) { 5144 flirt_state = "cant_flirt"; 5145 5146 if (VIce.logged_in_member 5147 && VIce.logged_in_member.get("level") == "100" && !this.get('standard_contact')) { 5148 flirt_state = "cant_flirt_standard"; 5149 } 5150 } 5151 this.set('flirt_state', flirt_state); 5152 }, 5153 updateCanFriend: function () { 5154 var friend_status = 'can_friend'; 5155 var invite_status = this.get("is_friend"); 5156 var can_friend = true; 5157 if (invite_status == 2) { 5158 can_friend = false; 5159 friend_status = 'invite_sent'; 5160 } else if (invite_status == 1) { 5161 can_friend = false; 5162 friend_status = 'is_friend'; 5163 } else { 5164 can_friend = true; 5165 friend_status = 'can_friend'; 5166 } 5167 this.set('can_friend',can_friend); 5168 this.set('friend_status', friend_status); 5169 }, 5170 5171 updateHotlistState: function () { 5172 if (this.get('hotlisted')) { 5173 this.set({'is_hotlisted':1},{'silent': true}); 5174 } 5175 5176 if (parseInt(this.get('is_hotlisted'),10) > 0) { 5177 if (this.get('topfan_off') 5178 || VIce.globals.topfan_off 5179 ) { 5180 this.set('hotlist_state','hotlisted'); 5181 } else { 5182 var rank = this.get('i_am_fan_of_rank'); 5183 5184 if (rank) { 5185 if (rank > 0) { 5186 this.set('hotlist_state','fan_rank'); 5187 } else { 5188 this.set('hotlist_state','bid_more'); 5189 } 5190 } else { 5191 this.set('hotlist_state','become_a_fan'); 5192 } 5193 } 5194 } else { 5195 this.set('hotlist_state' ,'hotlist'); 5196 } 5197 }, 5198 5199 templateJSON: function (data) { 5200 data = data || this.toJSON(); 5201 5202 if (!data.online) { 5203 5204 if (VIce.logged_in_member) { 5205 data.online = VIce.logged_in_member.get("pwsid") == data.pwsid? true : false; 5206 } 5207 } 5208 5209 data.std_location = data.location; 5210 data.level = data.status || data.level; 5211 data.verified_member = data.verified; 5212 if (data.i_am_fan_of_rank) { 5213 data.rank = parseInt(data.i_am_fan_of_rank, 10); 5214 } 5215 if (data.rank === 1) { 5216 data.is_top_fan = 1; 5217 } 5218 if (data.distance) { 5219 data.distance = parseInt(data.distance, 10); 5220 data.distance = data.distance > 1 ? data.distance : 0; 5221 } 5222 if (data.last_visit_datetime && _.isString(data.last_visit_datetime)) { 5223 data.last_visit_datetime = data.last_visit_datetime.replace(/-/g, '/'); 5224 } 5225 data.passport = data.passport || data.spendee_passport || data.spender_passport; 5226 5227 data.sex = data.sex || data.gender; // for some accounts we have gender but not sex. 5228 data.gender = data.gender || data.sex; // not sure if this happens, but just to cover bases 5229 5230 if (stdMapping 5231 && stdMapping.mapStdGender 5232 ) { 5233 data.mapped_gender = stdMapping.mapStdGender(data.sex,data.age,data.age2); 5234 } 5235 5236 data.message_points = data.message_points || 10; 5237
5238 data.type_key = (data.from_sex && data.from_sex.toString().match(/^[127]$/)) ? 'i' : 'we'; 5239 5240 if ( VIce.notifications && VIce.notifications.type_messages && data.type && VIce.notifications.type_messages[ data.type ]) { 5241 data.notification_msg = VIce.notifications.type_messages[ data.type ][ data.type_key ]; 5242 } 5243 5244 if ( !data.features ) { 5245 data.features = { 5246 'age' : data.age, 5247 'age2' : data.age2 5248 } 5249 } 5250 5251 if ( data ) { 5252 data.confirm_or_verify_badge = Handlebars.helpers.showConfirmed.call({ 5253 verify : data.verify || false, 5254 verified_photo : data.verified_photo || false 5255 }); 5256 } 5257 5258 //debugger; 5259 console.log("Member setting hotlist_state", data.hotlist_state); 5260 return data; 5261 }, 5262 isMale: function(){ 5263 return this.male_sex[this.get('sex')]; 5264 } 5265 5266})); 5267// this is because we changed the memeber objct 5268// and will make sure the correct base member is used 5269VIce.BaseCollection = VIce.BaseCollection.extend({ 5270 model: VIce.model("Member"), 5271}); 5272 5273 VIce.setCollection('Hotlist', VIce.BaseCollection.extend({ 5274 key: 'hotlist_user', 5275 request: { mid: '', handle: '', action: 'add' }, 5276 useQueryString: false, 5277 expires: 0, 5278 5279 // button is disabled if this function returns false 5280 sendRequest: function (ajax_data) { 5281 var deferred_obj = $.Deferred(); 5282 if (!ajax_data.with_pwsid || !ajax_data.with_handle) { 5283 console.error('missing required data'); 5284 deferred_obj.reject(); 5285 } 5286 this.ajax( {addid : ajax_data.with_pwsid,addhandle: ajax_data.with_handle} ) 5287 .done(function(d) { 5288 if ( d && d.hasOwnProperty('hotlist_user') ) { 5289 document.querySelector('[data-lightbox="top_fans_popup"]').setAttribute("data-hotlist-user", d.hotlist_user); 5290 } 5291 if (d && d.hotlist_user && d.hotlist_user === 1) { 5292 deferred_obj.resolve(d); 5293 } else { 5294 deferred_obj.reject(d); 5295 } 5296 }) 5297 .fail(function(d) { 5298 deferred_obj.reject(d); 5299 }); 5300 this.trigger('hotlist_send'); 5301 return deferred_obj.promise(); 5302 } 5303})); 5304 VIce.setCollection('Unhotlist', VIce.BaseCollection.extend({ 5305 key: 'hotlist_user', 5306 request: { delpwsid : '' }, 5307 useQueryString: false, 5308 expires: 0, 5309 5310 // button is disabled if this function returns false 5311 sendRequest: function (ajax_data) { 5312 if (!ajax_data.pwsid) { 5313 console.error('Unhotlist : missing pwsid'); 5314 return false; 5315 } 5316 this.ajax( { delpwsid : ajax_data.pwsid } ); 5317 this.trigger('unhotlist_send'); 5318 return false; 5319 } 5320})); 5321 VIce.setCollection('Flirt', VIce.BaseCollection.extend({ 5322 url: '/p/wink.cgi', 5323 request: { topwsid: '', tohandle: '', origin: 'wink', action: 'single_flirt', use_ajax: 1, req_json: 1 }, 5324 useQueryString: true, 5325 expires: 0, 5326 5327 5328 sendRequestCallback: function (json,callbackArgs) { 5329 var deferred_obj = callbackArgs.deferred_obj; 5330 if (json['success']) { 5331 deferred_obj.resolve(json); 5332 }else { 5333 deferred_obj.reject(json); 5334 } 5335 5336 5337 5338 }, 5339 // button is disabled if this function returns false 5340 sendRequest: function (ajax_data, use_deferred) { 5341 var deferred_obj = $.Deferred(); 5342 5343 if (!VIce.globals.can_send_flirt) { 5344 VIce.trigger("redirect_order_page",{origin:'wink'}); 5345 return; 5346 } 5347 if (!ajax_data.with_pwsid || !ajax_data.with_handle) { 5348 console.error('missing requried data'); 5349 return false; 5350 } 5351 this.trigger('flirt_send'); 5352 if (use_deferred) { 5353 this.ajax( { topwsid: ajax_data.with_pwsid, tohandle: ajax_data.with_handle }, 5354 {callbackArgs: { 5355 deferred_obj: deferred_obj, 5356 }, 5357 callback: 'sendRequestCallback' 5358 }); 5359 5360 } else { 5361 this.ajax( { topwsid: ajax_data.with_pwsid, tohandle: ajax_data.with_handle }); 5362 5363} 5364 return use_deferred? deferred_obj : false;
5365 } 5366 })); 5367 5368 5369 5370 VIce.setCollection("MCMessageCount", VIce.BaseCollection.extend({ 5371 5372 key:"inbox_new_count", 5373 callback:"updateCount", 5374 no_cache: true, 5375 updateCount: function (new_count) { 5376 if (!this.length) { 5377 this.add({ inbox_new_count: new_count}); 5378 } else { 5379 this.at(0).set('inbox_new_count', new_count); 5380 } 5381 this.trigger("updateCount", new_count); 5382 }, 5383 getCount: function () { 5384 if (this.length) { 5385 return this.at(0).get('inbox_new_count'); 5386 } 5387 return 0; 5388 } 5389 })); 5390 5391 5392VIce.setModel("MCMessage", VIce.BaseModel.extend({ 5393 file_count: 0, 5394 'export': ['attachPhoto','attachProfilePhoto','addTo','removeTo'], 5395 attachProfilePhoto: function () { 5396 console.log("attaching profile photo"); 5397 this.set('attach_profile_photo',1); 5398 }, 5399 attachPhoto: function (photo_id) { 5400 if (photo_id instanceof Backbone.Model) { 5401 photo_id = photo_id.get('file_id'); 5402 } 5403 this.set('file' + this.file_count, photo_id); 5404 this.file_count += 1; 5405 console.log("attachPhoto", arguments); 5406 }, 5407 validate: function () { 5408 var errors = []; 5409 var messages = []; 5410 5411 if ( !this.get('body') 5412 && !this.get('attach_profile_photo') 5413 && !(this.get('file0')) 5414 //&& !(this.file_count && this.get('file0')) 5415 ){ 5416 messages.push("Need a message or to attach a photo"); 5417 errors.push('body'); 5418 } 5419 5420 if (!this.get('to_handle') && !this.get('to_handles')) { 5421 errors.push('to_handle'); 5422 } 5423 if (!this.get('to_pwsid') && !this.get('to_pwsids')) { 5424 errors.push('to_pwsid'); 5425 } 5426 5427 if (errors.length || messages.length) { 5428 console.log("VALIDATE ERROS", {'errors': errors, 'message': messages}, _.clone(this.attributes)); 5429 return {'errors': errors, 'message': messages}; 5430 } 5431 }, 5432 removeTo: function (to_pwsid, to_handle) { 5433 if (to_handle && (this.get('to_handle') == to_handle)) { 5434 this.set('to_handle', ''); 5435 this.set('to_pwsid', ''); 5436 }else if (to_pwsid && (this.get('to_pwsid') == to_pwsid)) { 5437 this.set('to_handle', ''); 5438 this.set('to_pwsid', ''); 5439 } else { 5440 var cc = _.reject(this.get('cc'),function (ccObj) { 5441 if (to_pwsid == ccObj.to_pwsid) { 5442 return true; 5443 } else if (to_handle == ccObj.to_handle) { 5444 return true; 5445 } 5446 return false; 5447 }); 5448 this.set('cc',cc); 5449 } 5450 }, 5451 addTo: function (to_pwsid, to_handle) { 5452 5453 // if we don't have someone to send to then 5454 // the first person is the 'main' 5455 // everyone else is 'cc' 5456 // there is no difference really. just 5457 // want to make it so people don't have to check for array 5458 // if they don't have to. 5459 if (!(this.get('to_handle') && this.get('to_pwsid')) ) { 5460 this.set('to_pwsid', to_pwsid); 5461 this.set('to_handle', to_handle); 5462 } else { 5463 var cc = this.get('cc'); 5464 if (!cc) { 5465 cc = []; 5466 } 5467 cc.push({'to_pwsid': to_pwsid, 5468 'to_handle': to_handle}); 5469 this.set('cc', cc); 5470 } 5471 }, 5472 templateJSON : function () { 5473 var data = this.toJSON(), 5474// model = this, 5475 date, 5476 time, 5477 deftags = VIce.deftags || {}, 5478 i, 5479 l, 5480 points_spent_txt = '', 5481 vgift_sent_points = deftags.vgift_sp || '', 5482 vgift_points = deftags.vgift_tf_points || '', 5483 //click_action = model.env_data.page_prop.remember_scroll ? 'rememberScroll' : 'changePage'; 5484 click_action = 'rememberScroll'; 5485 5486 if (!data.sent_timestamp) { 5487 data.sent_timestamp = (new Date().getTime())/1000; 5488 } 5489 // get milliseconds 5490 data.sent_timestamp = data.sent_timestamp * 1000; 5491 date = Handlebars.helpers.formatDate(data.sent_timestamp); 5492 time = Handlebars.helpers.timeToAmPm(data.sent_timestamp); 5493 if (date && time) { 5494 data.timestamp = date + " " + time; 5495 } 5496 5497 function mapFileAttachment (item) { 5498 item.click_action = click_action; 5499 item.click_src = "/messages/photos/preview?file_id= " + item.id + "&fullsize=1"; 5500 item.click_query = "src:" + item.click_src; 5501 } 5502 5503 function mapAttachment (item) { 5504 item.click_action = click_action; 5505 item.click_src = "/messages/" + data.conversation_id + "/message/" + data.message_id + "/attachment/" + item.id; 5506 item.click_query = "src:" + item.click_src; 5507 } 5508 5509 if (data.file_attachments) { 5510 _.each(data.file_attachments, mapFileAttachment); 5511 } 5512 5513 if (data.attachments) { 5514 _.each(data.attachments, mapAttachment); 5515 } 5516 5517 if (!data.attachments && data.file_attachments) { 5518 data.attachments = data.file_attachments; 5519 } 5520 5521 if (data.has_flowers) { 5522 data.flowers = []; 5523 data.flowers.length = parseInt(data.has_flowers, 10); 5524 } 5525 5526 if (data.gifts && data.gifts.length) { 5527 if (data.top_fan_bid && isFinite(data.top_fan_bid) && parseInt(data.top_fan_bid,10)){ 5528 points_spent_txt = vgift_points; 5529 } else { 5530 points_spent_txt = vgift_sent_points; 5531 } 5532 l = data.gifts.length; 5533 for(i = 0; i < l; i++) { 5534 if (data.gifts[i].price) { 5535 data.gifts[i].pts_spent = points_spent_txt.replace("{{points}}", data.gifts[i].price); 5536 } 5537 } 5538 if (!(VIce.globals && VIce.globals.is_premium_user)) { 5539 data.gift_msg = deftags.mc_received_std_gift.replace(/"/g, "'"); 5540 } else { 5541 data.gift_msg = deftags.mc_gift; 5542 } 5543 if (data.gifts_points_earned) { 5544 data.pts_earned = (deftags.mc_received_gift || "").replace('{{points}}', data.gifts_points_earned); 5545 } 5546 } 5547 5548 if ( data.from_pwsid && data.from_pwsid.indexOf( 'notice' ) >= 0 ) { 5549 data.from_admin = 1; 5550 } 5551 5552 if ( data.body ) { 5553 data.body = data.body.replace(/'/g, "'").replace(/"/g, '"'); 5554 } 5555 5556 return data; 5557 } 5558})); 5559 5560 VIce.setModel("ProfilePassport", VIce.extend("model",'Member',{ 5561 templateJSON : function () { 5562 var data = {}, time, deftags = VIce.deftags || {}; 5563 if (this.parent 5564 && this.parent.templateJSON 5565 && this.parent.templateJSON != this.templateJSON 5566 ) { 5567 data = this.parent.templateJSON.call(this); 5568 } else { 5569 data = this.toJSON(); 5570 } 5571 data.std_location = data.location; 5572 data.level = data.status || data.level; 5573 if (data.i_am_fan_of_rank) { 5574 data.rank = parseInt(data.i_am_fan_of_rank, 10); 5575 } 5576 if (data.rank === 1) { 5577 data.is_top_fan = 1; 5578 } 5579 data.label_1 = deftags.highest_bid || "Highest Top Fan Bid"; 5580 data.label_2 = deftags.top_fans_top_bid || 'Top Bid'; 5581 data.button_txt_alt = deftags.top_fan || 'Top Fan'; 5582 data.button_txt = deftags.become_a_top_fan || 'Become ' + data.button_txt_alt; 5583 if (data.distance) { 5584 data.distance = parseInt(data.distance, 10); 5585 data.distance = data.distance > 1 ? data.distance : 0; 5586 } 5587 if (data.last_visit_datetime && _.isString(data.last_visit_datetime)) { 5588 data.last_visit_datetime = data.last_visit_datetime.replace(/-/g, '/'); 5589 } 5590 if (data.type_time) { 5591 data.type_time.split('|').map(function (value) { 5592 value = _.isString(value) && value.split('='); 5593 if (value[1]) { 5594 value[1] = value[1].replace(/-/g, '/'); 5595 time = ( new Date(value[1]) || new Date() ).getTime(); 5596 data[value[0] + '_dt'] = time; 5597 } 5598 }); 5599 } 5600 data.is_flirted = (!_.isUndefined(data.flirted) && parseInt(data.flirted, 10) > 0) ? 1 : false;
5601 data.is_hotlisted = (!_.isUndefined(data.hotlisted) && parseInt(data.hotlisted, 10) > 0) ? 1 : false; 5602 if (_.isUndefined(data.friends)) { 5603 data.friends = false; 5604 if (data.is_friend && isFinite(data.is_friend)) { 5605 //request pending not friends yet 5606 if (parseInt(data.is_friend, 10) > 1) { 5607 data.friends = false; 5608 } else { 5609 data.friends = true; 5610 } 5611 } 5612 } 5613 data.has_buzzmode = parseInt( data.has_buzzmode, 10 ) || parseInt( data.bcast_has_buzzmode, 10 ) || 0; 5614 data = this.noTagsOrZeros(data); 5615 return data; 5616 }, 5617 5618 noTagsOrZeros: function(data) { 5619 var field_names = ['profile','profile_pending','profile_utf8','profilewant','title','title_pending','title_utf8','profession','profession2'], 5620 desktop_val_eq_zero = [ 5621 {'field':'drugs', 'val':'1'}, 5622 {'field':'drugs2', 'val':'1'}, 5623 {'field':'swing', 'val':'1'}, 5624 {'field':'race', 'val':'0,0'}, 5625 {'field':'race2', 'val':'0,0'}, 5626 {'field':'body_type', 'val':'0,0'}, 5627 {'field':'body_type2', 'val':'0,0'}, 5628 {'field':'profession', 'val':'00'}, 5629 {'field':'profession2', 'val':'00'}, 5630 {'field':'willing_relocate', 'val':'5'} 5631 ], 5632 i = field_names.length; 5633 5634 if (_.isObject(data)) { 5635 while (i--) { 5636 if (data['notag_' + field_names[i]]) { 5637 data[field_names[i]] = data['notag_' + field_names[i]]; 5638 } 5639 if (+data[field_names[i]] === 0 ) { 5640 data[field_names[i]] = ""; 5641 } 5642 } 5643 5644 // There's no noTag for profile_title. Use title instead. 5645 // use data title if it exists 5646 if (data.title) { 5647 data.profile_title = data.title; 5648 } 5649 5650 // Certain field values that should be 'zero' or empty, but aren't on desktop 5651 i = desktop_val_eq_zero.length; 5652 while (i--) { 5653 if ( data[desktop_val_eq_zero[i].field] + '' === desktop_val_eq_zero[i].val && VIce.globals && VIce.globals.is_mobile) { 5654 data[desktop_val_eq_zero[i].field] = ''; 5655 } 5656 } 5657 } 5658 return data; 5659 }, 5660 5661 editUserInfo: function () { 5662 var data = this.toJSON(), 5663 field_names = ['country', 'state', 'city', 'profile', 'title', 'title_utf8'], 5664 i = field_names.length; 5665 5666 while (i--) { 5667 if (data[field_names[i] + '_pending'] && isNaN( + data[field_names[i] + '_pending']) ) { 5668 data[field_names[i]] = data[field_names[i] + '_pending']; 5669 } 5670 } 5671 5672 // Pending doesn't exist for profile_title. Use title 5673 data.profile_title = data.title; 5674 5675 //country's without regions should be blanked; 5676 if (data.country_pending && !data.state_pending) { 5677 data.state = 0; 5678 } 5679 5680 field_names = ['lang_spoken','looking_for_person']; 5681 i = field_names.length; 5682 5683 while (i--) { 5684 if (data[field_names[i]] && _.isString(data[field_names[i]])) { 5685 data[field_names[i]] = data[field_names[i]].split(','); 5686 } 5687 } 5688 data = this.noTagsOrZeros(data); 5689 return data; 5690 } 5691})); 5692 5693 VIce.setCollection("Gifts", VIce.BaseCollection.extend({ 5694 url: '/coreapi/virtual_gifts?action=get_virtual_gifts&want_array=1', 5695 useQueryString : true, 5696 callback: 'addData', 5697 addData : function (json) { 5698 json = json || {}; 5699 if ( json && _.isObject(json) && json.gifts ) { 5700 this.add(json.gifts); 5701 this.triggerAddComplete(); 5702 } 5703 } 5704})); 5705 VIce.setCollection("FanPoints", VIce.BaseCollection.extend({ 5706 model: VIce.model("ProfilePassport"), 5707 callback: 'addData', 5708 useQueryString : true, 5709 url : '/coreapi/points?_=' + new Date().getTime(), 5710 'export' : ["placeBid"], 5711 5712 request : { 5713 action : "spend_points", 5714 do_hotlist : 1, 5715 to_pwsid : "", 5716 points : "" 5717 }, 5718 5719 addData: function (json) { 5720 json = json || {}; 5721 if (json && json.success) { 5722 //this.add(json); 5723 console.log('in confirm fan points'); 5724 console.log(json); 5725 this.trigger('points_spent', this.request); 5726 } else { 5727 this.trigger('error_points_spent', json); 5728 } 5729 }, 5730 5731 placeBid : function (data) { 5732 var to_pwsid, points; 5733 console.log('in place bid'); 5734 console.log(data); 5735 if (data) { 5736 to_pwsid = data.get('pwsid'); 5737 points = data.get('points'); 5738 if (to_pwsid && points) { 5739 this.request.to_pwsid = to_pwsid; 5740 this.request.points = points; 5741 this.ajax(); 5742 } 5743 } 5744 this.trigger('save_fan_settings', data); 5745 } 5746 5747})); 5748 5749 VIce.setCollection('MemberPoints', VIce.extend('collection', 'FanPoints', { 5750 request : { 5751 action : "get_reward_points" 5752 }, 5753 giveTip: function(options){ 5754 options = options || {}; 5755 if (options.to_pwsid && options.points){ 5756 options.tip_type = options.tip_type || "chat";
5757 this.ajax({action:"give_tip_points", to_pwsid: options.to_pwsid, points: options.points, tip_type: options.tip_type }); 5758 } 5759 }, 5760 spendPoints: function(options) { 5761 options = options || {}; 5762 if (options.prize == 'view_broadcast' && options.streamid) { 5763 this.ajax({action:"spend_points_on_prize", prize:options.prize, streamid:options.streamid}); 5764 } else if (options.prize == 'imc_send_msg' && options.recipient_pwsid) { 5765 this.ajax({action:"spend_points_on_prize", prize:options.prize, recipient_pwsid:options.recipient_pwsid}); 5766 } 5767 }, 5768 getTotalPoints:function(){ 5769 this.ajax({ 5770 action: "get_total_points", 5771 contentType: "application/json; charset=utf-8" 5772 }); 5773 }, 5774 addData : function (json) { 5775 var k, 5776 tips_regex = /^points_\w+_tips$/; 5777 5778 if (this.request && this.request.action && this.request.action == "give_tip_points") { 5779 if (json && !json.error) { 5780 this.trigger("tip_success"); 5781 } else { 5782 this.trigger("tip_failed"); 5783 } 5784 return; 5785 } 5786 5787 if (this.request && this.request.action && this.request.action == "spend_points_on_prize") { 5788 if (json && !json.error) { 5789 this.trigger("points_spent_success"); 5790 } else { 5791 this.trigger("points_spent_fail"); 5792 } 5793 return; 5794 } 5795 5796 if (json && json.points != void 0) { 5797 json.points_tips = json.points_tips || 0; 5798 for (k in json) { 5799 if (json.hasOwnProperty(k)) { 5800 if (tips_regex.test(k)){ 5801 json.points_tips = json.points_tips + (parseInt(json[k],10) || 0 ); 5802 } 5803 } 5804 } 5805 5806 this.add(json); 5807 this.triggerAddComplete(); 5808 } else { 5809 this.trigger( 'no_member_points' ); 5810 5811 } 5812 } 5813})); 5814 5815 5816 VIce.setView('GiftSelector', VIce.BaseView.extend({ 5817 events : {}, 5818 tmpl : 'gift_selector_view_tmpl', 5819 name : 'gift_selector_view', 5820 page : {}, 5821 GiftListView : {}, 5822 VGiftForm : {}, 5823 PointsRedirect: {}, 5824 PointsCollection : null, 5825 MCConversation : null, 5826 SubmitGiftsBtn : null, 5827 5828 viceInit : function () { 5829 this.render(); 5830 }, 5831 5832 hideSpinner : function() { 5833 this.$el.find( '.spinner-dots' ).hide(); 5834 this.$el.find( '.gift_list_content' ).show(); 5835 }, 5836 5837 handleGift : function( e, data ) { 5838 var model; 5839 5840 this.page.toggleEditMode(arguments); 5841 if (data && data.query && data.query.id) { 5842 model = this.GiftListView.collection.findWhere({ 'id': data.query.id }); 5843 if (model && model._view) { 5844 this.page.trigger('page_edit_mode_on'); 5845 model._view.trigger('select'); 5846 } 5847 } 5848 }, 5849 5850 getSelectedGiftCount : function() { 5851 var count = 0, 5852 selected_models = this.GiftListView.prop_model.get( 'selected_models' ); 5853 5854 for ( var view in selected_models ) { 5855 if ( selected_models.hasOwnProperty( view ) ) { 5856 ++count; 5857 } 5858 } 5859 5860 return count; 5861 }, 5862 pointsRedirect: function(evnt){ 5863 var link, 5864 page = VIce.currentPage(), 5865 PointsRedirect = this.PointsRedirect, 5866 can_qb = (VIce.logged_in_member && VIce.logged_in_member.get('can_qb')) || 0; 5867 5868 if (can_qb) { 5869 VIce.widget.quickBuy({ 5870 callback: function() { 5871 VIce.widget.vgift_popup(self.options); 5872 } 5873 }); 5874 5875 // Break out of function 5876 return false; 5877 } 5878 5879 if (PointsRedirect && PointsRedirect.$el) { 5880 link = PointsRedirect.$el.attr("data-link"); 5881 if (link && _.isString(link)) { 5882 if( page && this.options && this.options.trigger_redirect){ 5883 page.trigger("redirect_to", {url: link}); 5884 VIce.lightbox[ 'gift_selector' ].hide(); 5885 }else{ 5886 window.location.href = link; 5887 if (evnt && evnt.preventDefault) { 5888 evnt.preventDefault(); 5889 } 5890 5891 } 5892 } 5893 } 5894 }, 5895 5896 saveSelection : function() { 5897 var selected_gifts = this.GiftListView.prop_model.get( 'selected_models' ), 5898 gifts = {}; 5899 5900 _.each( selected_gifts, function( gift ) { 5901 var gid = gift.id || gift.get('id'); 5902 gifts[ gid ] = gift; 5903 }); 5904 5905 this.page.prop_model.set( 'selected_gifts', gifts ); 5906 5907 return gifts; 5908 }, 5909 5910 sendButtonClicked : function() { 5911 var selected_gifts = this.saveSelection(), 5912 self = this, 5913 gift_count = 0; 5914 5915 if ( this.SubmitGiftsBtn.click_disabled ) { 5916 return false;
5917 } else if ( self.options.standalone || ( self.options.can_submit && !self.options.is_gold ) ) { 5918 //standard members submit form 5919 self.VGiftForm.prop_model.set( 'body', self.VGiftForm.ele_options[ 'default-msg' ] ); 5920 self.VGiftForm.prop_model.set( 'to_handle', self.options.handle ); 5921 self.VGiftForm.prop_model.set( 'to_pwsid', self.options.pwsid ); 5922 5923 if ( VIce.globals.topfan_feature && VIce.globals.topfan_setting ) { 5924 self.VGiftForm.prop_model.set( 'do_top_fan_gift_combo', 1 ); 5925 } 5926 5927 _.each( selected_gifts, function( gift ) { 5928 var giftid = gift.id || gift.get( 'id' ); 5929 self.VGiftForm.prop_model.set( 'gift' + giftid, giftid ); 5930 gift_count++; 5931 }); 5932 5933 self.SubmitGiftsBtn.disable(); 5934 var promise = self.MCConversation.sendMessage( self.VGiftForm.prop_model ); 5935 5936 self.MCConversation.on('message_received', function( data ) { 5937 data = data || []; 5938 var is_top_fans_bid = data.length && data[0][self.options.pwsid] ? data[0][self.options.pwsid].top_fan_bid_success : false; 5939 5940 self.page.trigger( 'GiftSelector:submitted', selected_gifts ); 5941 5942 if ( self.options.standalone ) { 5943 VIce.showLightbox( VIce.template( 'gift_send_confirm', { 5944 handle : self.options.handle, 5945 pwsid : self.options.pwsid, 5946 multiple_gifts : ( gift_count > 1 ), 5947 top_fans_enabled : is_top_fans_bid 5948 } ), { 5949 name : 'gift_selector_confirm', 5950 className : "virtual_gift_popup" 5951 } ); 5952 self.GiftListView.unselectAll(); 5953 self.saveSelection(); 5954 VIce.lightbox[ 'gift_selector' ].hide(); 5955 } 5956 }); 5957 } else { 5958 if (document.querySelector('#mc_msg_box_icon-vgift.ifm_msg_box_vgift_pgsites') === null) { 5959 self.page.trigger( 'GiftSelector:confirmed', selected_gifts ); 5960 return; 5961 } 5962 // if not trigger, then run below... 5963 var mc_attach_el = VIce.$( '#mc-msg_box_attach .vgift_attachments' ); 5964 VIce.lightbox[ 'gift_selector' ].hide(); 5965 mc_attach_el.empty(); 5966 _.each( selected_gifts, function(gift) { 5967 mc_attach_el.append( VIce.template( 'mc_image_attachment', { 5968 image : gift.get( 'picture_name' ), 5969 id : gift.get('id') 5970 }) 5971 ); 5972 }); 5973 function removeSavedGift(e){ 5974 var target = VIce.$( e.currentTarget ), 5975 gift_id; 5976 gift_id = target.attr('gift-id'); 5977 delete selected_gifts[gift_id]; 5978 target.closest('.attachment').remove(); 5979 } 5980 //detect click event 5981 page.on( "click", ".vgift_attachments .cut", removeSavedGift ); 5982 } 5983 }, 5984 5985 selectGift : function( model ) { 5986 if ( model ) { 5987 console.log("selecting saved gift");console.log( model ); 5988 model._view.trigger('select'); 5989 } 5990 }, 5991 5992 toggleSavedGifts : function() { 5993 var selected_gifts = this.page.prop_model.get( 'selected_gifts' ), 5994 model, 5995 self = this; 5996 5997 self.page.trigger('page_edit_mode_on'); 5998 _.each( selected_gifts, function( gift ) { 5999 var gid = gift.id || gift.get( 'id' ); 6000 model = self.GiftListView.collection.findWhere({ 'id': gid }); 6001 self.selectGift( model ); 6002 }); 6003 }, 6004 6005 toggleGiftItems : function() { 6006 var items = this.GiftListView.collection.models, 6007 i = items.length, 6008 price, 6009 points_spent = parseInt( this.GiftListView.prop_model.get('gift_points_spent'), 10 ) || 0, 6010 available_points = parseInt( this.GiftListView.prop_model.get('points'), 10 ) - points_spent, 6011 user_points_el = this.$el.find( '.user_points .points' ), 6012 selectable_count = 0, 6013 multiplier = this.VGiftForm.prop_model.get( 'recipient_count' ) || 1; 6014 6015 while ( --i >= 0 ) { 6016 if ( items[i] ) { 6017 price = parseInt( items[i].get('price'), 10 ); 6018 if ( ( price * multiplier ) > available_points ) { 6019 items[i]._view.$el.attr('data-clickable', 0); 6020 selectable_count++; 6021 } else { 6022 items[i]._view.$el.attr('data-clickable', 1); 6023 } 6024 6025 if ( items[i].get( 'is_bundle' ) ) { 6026 items[i]._view.$el.addClass( 'bundle' ); 6027 } 6028 } 6029 } 6030 6031 if ( selectable_count && available_points > 0 ) { 6032 user_points_el.removeClass( 'error' ); 6033 } else { 6034 user_points_el.addClass( 'error' ); 6035 } 6036 }, 6037 6038 setAvailablePoints : function() { 6039 var model = this.PointsCollection.pop(), 6040 gift_points_spent = parseInt( this.GiftListView.prop_model.get('gift_points_spent'), 10 ) || 0, 6041 user_points = 0; 6042 6043 if (model && model.get) { 6044 user_points = parseInt( model.get('points'), 10 ) - ( gift_points_spent || 0 ); 6045 } 6046 6047 this.GiftListView.prop_model.set( 'points', user_points ); 6048 this.GiftListView.prop_model.set( 'available_points', user_points ); 6049 this.GiftListView.prop_model.set( 'gift_points_spent', gift_points_spent ); 6050 6051 this.toggleSavedGifts(); 6052 this.toggleGiftItems(); 6053 this.hideSpinner(); 6054 this.renderScrollBar(); 6055 }, 6056 6057 renderScrollBar : function() { 6058 var $scrollable = this.$el.find( '.scrollable' ), 6059 $scrollbar = this.$el.find( '.scrollbar' ), 6060 ctrHeight, 6061 totalHeight, 6062 barHeight; 6063 6064 if ($scrollable.length) { 6065 ctrHeight = $scrollable.outerHeight( true ); 6066 totalHeight = $scrollable[0].scrollHeight; 6067 barHeight = ctrHeight * ctrHeight / totalHeight; 6068 6069 $scrollbar.height( barHeight ).draggable({ 6070 axis : 'y', 6071 containment : 'parent', 6072 drag: function( e, ui ) { 6073 $scrollable.scrollTop( totalHeight / ctrHeight * ui.position.top ); 6074 } 6075 }); 6076 6077 $scrollable.on("scroll", function(){ 6078 $scrollbar.css({ top: $scrollable.scrollTop() / ctrHeight * barHeight }); 6079 }); 6080 } 6081 }, 6082 6083 setGiftPoints : function() { 6084 var selected_gifts = this.GiftListView.prop_model.get( 'selected_models' ), 6085 points_spent = 0, 6086 selected_count = 0, 6087 multiplier = this.VGiftForm.prop_model.get( 'recipient_count' ) || 1; 6088 6089 _.each( selected_gifts, function( gift ) { 6090 points_spent += ( parseInt( gift.get( 'price' ), 10 ) * multiplier ); 6091 selected_count++; 6092 }); 6093 6094 if ( selected_count && this.SubmitGiftsBtn.click_disabled ) { 6095 this.SubmitGiftsBtn.enable(); 6096 } else if ( !selected_count ) { 6097 this.SubmitGiftsBtn.disable(); 6098 } 6099 6100 this.GiftListView.prop_model.set('gift_points_spent', points_spent); 6101 this.toggleGiftItems(); 6102 }, 6103 6104 removeSavedGift : function( e, gift ) { 6105 gift = gift || {}; 6106 var saved_gifts = this.page.prop_model.get( 'selected_gifts' ); 6107 6108 delete saved_gifts[ gift.id ]; 6109 if ( gift.$el && gift.$el.length ) { 6110 gift.$el.remove(); 6111 } 6112 }, 6113 6114 updatePoints : function( model, value ) { 6115 this.page.getVar( 'PointsCount' ).render({ points : value }); 6116 }, 6117 6118 updateGiftPoints : function( model, value ) { 6119 var gift_points_spent = this.GiftListView.prop_model.get( 'gift_points_spent' ) || 0, 6120 available_points = this.GiftListView.prop_model.get( 'points' ) || 0,
6121 selected_count = this.getSelectedGiftCount(), 6122 gift_count_el = this.$el.find( '[data-content="GiftPointsCount"]'); 6123 6124 console.log("balance:" + ( available_points - gift_points_spent ) ); 6125 6126 if ( selected_count ) { 6127 gift_count_el.show(); 6128 this.GiftListView.prop_model.set( 'selected_count', selected_count ); 6129 this.GiftListView.prop_model.set( 'points_balance', available_points - gift_points_spent ); 6130 gift_count_el.html( VIce.template( 'vgift_selected_tally', model.attributes ) ); 6131 } else { 6132 gift_count_el.hide(); 6133 } 6134 }, 6135 6136 render : function ( options ) { 6137 options = options || {}; 6138 var self = this, 6139 page = VIce.currentPage(), 6140 GiftListView, 6141 SubmitGiftsBtn, 6142 selected_gifts, 6143 PointsRedirect, 6144 VGiftForm, 6145 to_handles_arr = [], 6146 to_pwsids_arr = []; 6147 6148 6149 6150 this.page = page; 6151 this.PointsCollection = VIce.collection( 'MemberPoints' ); 6152 this.MCConversation = VIce.collection( 'MCConversation' ); 6153 var options = VIce.parseVarString( this.ele_options['template-vars'] ) || {}; 6154 6155 if (!options.is_gold) { 6156 options.is_gold = _.returnValue('VIce.globals.level', 100) > 299; 6157 } 6158 6159 options.points = "{{points}}"; 6160 options.gift_points_spent = "{{gift_points_spent}}"; 6161 options.points_balance = "{{points_balance}}"; 6162 options.can_submit = _.isUndefined( options.standard_submit ) ? true : options.standard_submit; 6163 options.order_link = VIce.gsub.link('order', { values: { origin: 'virtual_gifts' } }); 6164 options.order_points_link = VIce.gsub.link('order_points', { values: { origin: 'virtual_gifts' } }); 6165 6166 if ( options.handle.indexOf( '|' ) > 0 && options.pwsid.indexOf( '|' ) > 0 ) { 6167 to_handles_arr = options.handle.split( '|' ); 6168 to_pwsids_arr = options.pwsid.split( '|' ); 6169 options.handle = options.handle.replace( /\|/g, ', ' ); 6170 } else { 6171 to_handles_arr.push( options.handle ); 6172 to_pwsids_arr.push( options.pwsid ); 6173 } 6174 6175 if (typeof this.tmpl === 'string') { 6176 this.$el.html( VIce.template(this.tmpl, options) ); 6177 } else if (typeof this.tmpl === 'function') { 6178 this.$el.html( this.tmpl(options) ); 6179 } 6180 6181 page.parseRoles( this.$el, true, this ); 6182 GiftListView = page.getVar( 'GiftListView' ); 6183 SubmitGiftsBtn = page.getVar( 'SubmitGiftsBtn' ); 6184 page.handleGift = this.handleGift; 6185 PointsRedirect = page.getVar('PointsRedirect'); 6186 SelectItem = GiftListView.select; 6187 this.options = options; 6188 this.GiftListView = GiftListView; 6189 self.PointsRedirect = PointsRedirect; 6190 this.VGiftForm = page.getVar( 'VGiftForm' ); 6191 this.SubmitGiftsBtn = SubmitGiftsBtn; 6192 this.SubmitGiftsBtn.disable(); 6193 6194 if ( GiftListView ) { 6195 GiftListView.collection.ajax(); 6196 } 6197 6198 if (this.PointsCollection) { 6199 this.PointsCollection.ajax({'of_pwsid' : VIce.globals.own_pwsid}); 6200 } 6201 6202 this.VGiftForm.prop_model.set( 'to_pwsids', to_pwsids_arr.join( ',' ) ); 6203 this.VGiftForm.prop_model.set( 'to_handles', to_handles_arr.join( ',' ) ); 6204 this.VGiftForm.prop_model.set( 'recipient_count', to_handles_arr.length ); 6205 6206 GiftListView.select = function ( view ) { 6207 var price, 6208 points_spent = parseInt(GiftListView.prop_model.get('gift_points_spent'), 10) || 0; 6209 available_points = parseInt(GiftListView.prop_model.get('points'), 10) - points_spent; 6210 GiftListView.prop_model.set( 'available_points', available_points ); 6211 6212 if (view && view.model) { 6213 price = parseInt(view.model.get('price'), 10); 6214 6215 if (price <= available_points) { 6216 console.log('can select'); 6217 SelectItem.call(GiftListView, view); 6218 } else { 6219 console.log('can not select'); 6220 } 6221 } 6222 }; 6223 if (PointsRedirect && PointsRedirect.$el){ 6224 PointsRedirect.$el.on('click', $.proxy( self.pointsRedirect , self )); 6225 } 6226 6227 SubmitGiftsBtn.$el.on( 'click', $.proxy( this.sendButtonClicked, this ) ); 6228 GiftListView.prop_model.on( 'change:selected_models', this.setGiftPoints, this ); 6229 this.PointsCollection.on( 'add_complete', this.setAvailablePoints, this ); 6230 this.PointsCollection.on( 'no_member_points', this.setAvailablePoints, this ); 6231 this.page.on( 'GiftSelector:removeSavedGift', $.proxy( this.removeSavedGift, this ) ); 6232 GiftListView.prop_model.on( 'change:points', this.updatePoints, this ); 6233 GiftListView.prop_model.on( 'change:gift_points_spent', this.updateGiftPoints, this ); 6234 6235 return this; 6236 } 6237})); 6238 6239VIce.widget = VIce.widget || {}; 6240VIce.widget.vgift_popup = function( options ) { 6241 options = options || {}; 6242 6243 VIce.showLightbox( VIce.template( 'gift_selector_view', { 6244 handle : options.handle, 6245 pwsid : options.pwsid, 6246 trigger_redirect: options.trigger_redirect || "false", 6247 can_submit : options.can_submit || "false", 6248 standalone : options.standalone || "false", 6249 is_gold: options.is_gold || "false" 6250 } ), { 6251 name : 'gift_selector', 6252 className : "virtual_gift_popup" 6253 }); 6254} 6255 6256 6257 if (!window.FF_messenger) { window.FF_messenger = {} } 6258window.FF_messenger.CONFIG = function(strName){ 6259 var global_lang = CD.CONFIG('lang'), 6260 p = { 6261 is_admin:false, 6262 broadcaster_file: "//bdsm.com/images/ffadult/flash_imc/ffn_broadcaster3.swf?version=6.25", 6263 chat_box: "http://bdsm.com", 6264 chat_server: window.HOST_MAIN || "chat-service.adultfriendfinder.com", 6265 allow_public_broadcast: true, 6266 cookie_prefix: "bdsm", 6267 emoticons: [ 6268 {name: "smile", seq: ":)", pattern: /(^|\s|>)(:-*\))($|\s|<)/gi }, 6269 {name: "sad", seq: ":(", pattern: /(^|\s|>)(:-*\()($|\s|<)/gi }, 6270 {name: "big_smile", seq: ":D", pattern: /(^|\s|>)(:-*D)($|\s|<)/g }, 6271 {name: "shades", seq: "B)", pattern: /(^|\s|>)(B\))($|\s|<)/gi }, 6272 {name: "heart", seq: ":X", pattern: /(^|\s|>)(:X)($|\s|<)/gi }, 6273 {name: "broken_heart", seq: "=((", pattern: /(^|\s|>
6273)(=\(\()($|\s|<)/g }, 6274 {name: "ground_laughing", seq: "=))", pattern: /(^|\s|>)(=\)\))($|\s|<)/g }, 6275 {name: "biting_nails", seq: ":-SS", pattern: /(^|\s|>)(:-SS)($|\s|<)/g }, 6276 {name: "smug", seq: ":>", pattern: /(^|\s|>)(:>)($|\s|<)/g }, 6277 {name: "straight", seq: ":-|", pattern: /(^|\s|>)(:-\|)($|\s|<)/g }, 6278 {name: "evil", seq: "/:>", pattern: /(^|\s|>)(\/:>)($|\s|<)/g }, 6279 {name: "drool", seq: "=P~", pattern: /(^|\s|>)(=P~)($|\s|<)/g }, 6280 {name: "crazy", seq: ":-S", pattern: /(^|\s|>)(:-S)($|\s|<)/gi }, 6281 {name: "phew", seq: ":}", pattern: /(^|\s|>)(:})($|\s|<)/g }, 6282 {name: "party", seq: "^:-J", pattern: /(^|\s|>)(\^:-J)($|\s|<)/gi }, 6283 {name: "hold_please", seq: ":-0}", pattern: /(^|\s|>)(:-0})($|\s|<)/gi }, 6284 {name: "mad", seq: "X(", pattern: /(^|\s|>)(X\()($|\s|<)/g }, 6285 {name: "skeptical", seq: ":/", pattern: /(^|\s|>)(:\/)($|\s|<)/g }, 6286 {name: "bashful", seq: ":dblquote>", pattern: /(^|\s|>)(:dblquote>)($|\s|<)/g }, 6287 {name: "kiss", seq: ":*", pattern: /(^|\s|>)(:\*)($|\s|<)/g }, 6288 {name: "thinking", seq: ":?", pattern: /(^|\s|>)(:\?)($|\s|<)/gi }, 6289 {name: "waiting", seq: ":-w", pattern: /(^|\s|>)(:-w)($|\s|<)/g }, 6290 {name: "clapping", seq: "=D%", pattern: /(^|\s|>)(=D%)($|\s|<)/gi }, 6291 {name: "loser", seq: "L-)", pattern: /(^|\s|>)(L-\))($|\s|<)/g }, 6292 {name: "smirk", seq: ":7", pattern: /(^|\s|>)(:7)($|\s|<)/g }, 6293 {name: "laughing", seq: ":))", pattern: /(^|\s|>)(:\)\))($|\s|<)/g }, 6294 {name: "tongue", seq: ":P", pattern: /(^|\s|>)(:P)($|\s|<)/gi }, 6295 {name: "eyebrows", seq: "/:)", pattern: /(^|\s|>)(\/:\))($|\s|<)/g }, 6296 {name: "devil", seq: ">:)", pattern: /(^|\s|>)(>:\))($|\s|<)/g }, 6297 {name: "naughty", seq: "|-(d", pattern: /(^|\s|>)(\|-\(d)($|\s|<)/gi }, 6298 {name: "sleep", seq: "I)", pattern: /(^|\s|>)(I\))($|\s|<)/g }, 6299 {name: "wave", seq: ":-h", pattern: /(^|\s|>)(:-h)($|\s|<)/g }, 6300 {name: "sick", seq: ":-&", pattern: /(^|\s|>)(:-&)($|\s|<)/gi }, 6301 {name: "wink", seq: ";)", pattern: /(^|\s|>)(;\))($|\s|<)/g }, 6302 {name: "scared", seq: ":O", pattern: /(^|\s|>)(:O)($|\s|<)/gi }, 6303 {name: "angel", seq: "O:)", pattern: /(^|\s|>)(O:\))($|\s|<)/g }, 6304 {name: "crying", seq: ":((", pattern: /(^|\s|>)(:\(\()($|\s|<)/g }, 6305 {name: "doh", seq: "#-o", pattern: /(^|\s|>)(#-o)($|\s|<)/gi }, 6306 {name: "call_me", seq: ":-Y", pattern: /(^|\s|>)(:-Y)($|\s|<)/gi }, 6307 {name: "whistle", seq: ":-"", pattern: /(^|\s|>)(:-")($|\s|<)/gi }, 6308 {name: "not_worthy", seq: "^:)^", pattern: /(^|\s|>)(\^:\)\^)($|\s|<)/gi }, 6309 {name: "not_listening", seq: "%-(", pattern: /(^|\s|>)(%-\()($|\s|<)/gi }, 6310 {name: "hug", seq: "#:D#", pattern: /(^|\s|>)(#:D#)($|\s|<)/gi }, 6311 {name: "shush", seq: ":-$", pattern: /(^|\s|>)(:-\$)($|\s|<)/gi }, 6312 {name: "swirlie_shit", seq: "~^~", pattern: /(^|\s|>)(~\^~)($|\s|<)/gi }, 6313 {name: "boobs1", seq: "*Y*", pattern: /(^|\s|>)(\*Y\*)($|\s|<)/gi }, 6314 {name: "ass1", seq: "@!@", pattern: /(^|\s|>)(@!@)($|\s|<)/gi }, 6315 {name: "gstring", seq: "(Y)", pattern: /(^|\s|>)(\(Y\))($|\s|<)/gi }, 6316 {name: "cuffs", seq: "o-o", pattern: /(^|\s|>)(o-o)($|\s|<)/gi }, 6317 {name: "lipstick", seq: "{=}", pattern: /(^|\s|>)({=})($|\s|<)/gi }, 6318 {name: "finger", seq: ";!;", pattern: /(^|\s|>)(;!;)($|\s|<)/gi }, 6319 {name: "1on1", seq: ">>!", pattern: /(^|\s|>)(>>!)($|\s|<)/gi }, 6320 {name: "penis_fountain", seq: "...\\\8", pattern: /(^|\s|>)(\.\.\.\\8)($|\s|<)/gi }, 6321 {name: "hi_penis_blk", seq: "\\\8b", pattern: /(^|\s|>
6321)(\\8b)($|\s|<)/gi }, 6322 {name: "mid_penis_blk", seq: "=8b", pattern: /(^|\s|>)(=8b)($|\s|<)/gi }, 6323 {name: "lo_penis_blk", seq: "/8b", pattern: /(^|\s|>)(\/8b)($|\s|<)/gi }, 6324 {name: "hi_penis", seq: "\\\8", pattern: /(^|\s|>)(\\8)($|\s|<)/gi }, 6325 {name: "mid_penis", seq: "=8", pattern: /(^|\s|>)(=8)($|\s|<)/gi }, 6326 {name: "lo_penis", seq: "/8", pattern: /(^|\s|>)(\/8)($|\s|<)/gi }, 6327 {name: "whip2", seq: "?*", pattern: /(^|\s|>)(\?\*)($|\s|<)/gi }, 6328 {name: "happyd_m", seq: "happym;", pattern: /(^|\s|>)(happym;)($|\s|<)/gi }, 6329 {name: "happyd_f", seq: "happyf;", pattern: /(^|\s|>)(happyf;)($|\s|<)/gi }, 6330 {name: "bdsm/threesome", seq: "b3way;", pattern: /(^|\s|>)(b3way;)($|\s|<)/g }, 6331 {name: "bdsm/reunited", seq: "bhug;", pattern: /(^|\s|>)(bhug;)($|\s|<)/g }, 6332 {name: "bdsm/kneel", seq: "bkneel;", pattern: /(^|\s|>)(bkneel;)($|\s|<)/g }, 6333 {name: "bdsm/masterchair", seq: "bchairm;", pattern: /(^|\s|>)(bchairm;)($|\s|<)/g }, 6334 {name: "bdsm/slavecrawl", seq: "bchairs;", pattern: /(^|\s|>)(bchairs;)($|\s|<)/g }, 6335 {name: "bdsm/dom_head", seq: "bhead;", pattern: /(^|\s|>)(bhead;)($|\s|<)/g }, 6336 {name: "bdsm/slavewalk", seq: "bleash;", pattern: /(^|\s|>)(bleash;
6336)($|\s|<)/g }, 6337 {name: "bdsm/shackled", seq: "bshack;", pattern: /(^|\s|>)(bshack;)($|\s|<)/g }, 6338 {name: "bdsm/purple_pickle_eater", seq: "bvibe;", pattern: /(^|\s|>)(bvibe;)($|\s|<)/g }, 6339 {name: "bdsm/st_andrews", seq: "bcross;", pattern: /(^|\s|>)(bcross;)($|\s|<)/g }, 6340 {name: "bdsm/rack", seq: "brack;", pattern: /(^|\s|>)(brack;)($|\s|<)/g }, 6341 {name: "bdsm/push_slave", seq: "bpush;", pattern: /(^|\s|>)(bpush;)($|\s|<)/g }, 6342 {name: "bdsm/slap", seq: "bslap;", pattern: /(^|\s|>)(bslap;)($|\s|<)/g } ], 6343 domain: "bdsm.com", 6344 lang: { 6345 attempt_no: "Attempt #", 6346 buttons: { 6347 accept: "Accept", 6348 accepted: "Accepted", 6349 reply: "Reply", 6350 decline: "Decline", 6351 send: "Send", 6352 send_im: "Send IM", 6353 send_webcam: "Send Webcam", 6354 start_webcam: "Start Webcam", 6355 startbroadcast: "Start Broadcasting", 6356 stopbroadcast: "Stop", 6357 filterupdate: "Update", 6358 filtercancel: "Cancel", 6359 view_webcam: "View Webcam", 6360 close_webcam: "Stop Viewing", 6361 viewing_webcam: "Viewing", 6362 ignore_incoming: "Ignore this time", 6363 block_incoming: "Block this member", 6364 autoreply_incoming: "Decline with a quick message", 6365 remove_viewer: "Remove this time", 6366 block_viewer: "Block this member", 6367 more: "More", 6368 filters: "Filters", 6369 uncheck_all: "Uncheck All" 6370 }, 6371 dialog: { 6372 broadcaster_tip: "You got {{amount}} points from {{handle}}", 6373 short_tip: "tipped {{amount}} pts", 6374 6375 broadcast: { 6376 publicstart: "Your public broadcast has started", 6377 publicstop: "Your public broadcast has stopped", 6378 privatestart: "Your private broadcast has started", 6379 privatestop: "Your private broadcast has stopped", 6380 receivetip: "Members can tip you with points" 6381 }, 6382 connection: { 6383 disconnected: "IM is no longer connected.", 6384 connected: "Connection successful.", 6385 connecting: "Connecting to server", 6386 relaunch: "IM could not connect. Please relaunch Instant Messenger.", 6387 step_1: "This may take several seconds.", 6388 step_2: "Please be patient.", 6389 step_3: "Still attempting to contact the server.", 6390 step_4: "Waiting for authorization from server.", 6391 step_5: "Server not contacted.", 6392 step_6: "Authorization attempt restarting." 6393 }, 6394 disconnect: "You have ended your BDSM.com session...", 6395 filter_too_strict: "There are no members matching these filters. <a data-click='refreshWhosOnline' class='filter_refresh_link'>Adjust your filter settings</a>", 6396 initializing: "Initializing messenger.", 6397 no_search_results: "There are no members matching these filters. <a data-click='refreshWhosOnline' class='messenger_refresh_link'>View online members.</a>", 6398 results_expanded: "Results are expanded when there are no matches within your Cupid distance." 6399 }, 6400 interactions: { 6401 flirts: { 6402 "flirt":"Flirt", 6403 "wink":"Wink", 6404 "kiss":"Kiss", 6405 "smile":"Smile", 6406 "wave":"Wave", 6407 "spank":"Spank", 6408 "hug":"Hug" 6409 }, 6410 flirted: { 6411 "flirt":"Flirted", 6412 "wink":"Winked", 6413 "kiss":"Kissed", 6414 "smile":"Smiled", 6415 "wave":"Waved", 6416 "spank":"Spanked", 6417 "hug":"Hugged" 6418 }, 6419 hotlist: "Hotlist", 6420 hotlisted: "In My Hotlist", 6421 invite: "Add Friend", 6422 inviting: "Request Sent", 6423 invited: "Already Friends", 6424 message: "Message" 6425 }, 6426 labels: { 6427 filter: { 6428 men: global_lang.gender.men, 6429 women: global_lang.gender.women, 6430 couples: global_lang.gender.couples, 6431 trans: global_lang.gender.trans, 6432 groups: global_lang.gender.groups, 6433 lesbiancouples: global_lang.gender.lesbiancouples, 6434 gaycouples: global_lang.gender.gaycouples, 6435 allmembers: "All members", 6436 withphotos: "Members with photos", 6437 broadcasting: "Members broadcasting now", 6438 broadcastingsound: "Members broadcasting with sound", 6439 applytoincoming: "Apply the selected filters to incoming messages" 6440 }, 6441 broadcast: { 6442 public: "Broadcast Publicly", 6443 mute: "Mute", 6444 score: "Score", 6445 viewers: "Viewers", 6446 applyfilters: "Apply Who\'s Online Filters" 6447 }, 6448 form: { 6449 find: "Find", 6450 between: "Between", 6451 and: "and", 6452 show: "Show", 6453 race: "Race", 6454 bodytype: "Body Type", 6455 orientation: "Sexual Orientation", 6456 maritalstatus: "Marital Status", 6457 options: "Options" 6458 }, 6459 placeholder: { 6460 typemessagehere: "Type message here..." 6461 }, 6462 age: "Age", 6463 broadcasting_now: "Broadcasting now", 6464 sort_by: "Sort by", 6465 distance: "Distance", 6466 handle: "Username", 6467 tabs: { 6468 whos_online: "Online", 6469 friends: "Friends", 6470 incoming: "Incoming" 6471 } 6472 }, 6473 system:{ 6474 acceptinvite: "<handle>
6474 has accepted your friend request.", 6475 broadcast_started: "You have started broadcasting", 6476 broadcast_stopped: "You have stopped broadcasting", 6477 composing: "<handle> is typing...", 6478 decline: "<handle> is not available to chat", 6479 decline_webcam: "You have declined the webcam invitation.", 6480 enter_chat: "<handle> has entered the chat", 6481 exit_chat: "<handle> has left the chat", 6482 failed_delivery: "This message was not delivered: <handle>", 6483 ignore: "<handle> is not available to chat", 6484 ignore_autoreply: "<handle> has declined the chat request with this message \"[msg_token]\"", 6485 invite: "<handle> has sent you a friend request.", 6486 invitation_sent: "Your webcam invitation has been sent to <handle>", 6487 invitation_cancelled: "Your broadcast stopped. Pending invitiation will not be sent to <handle>", 6488 invite_broadcast: "<handle> has started broadcasting. Watch now?", 6489 loggedout: "<handle> is not on IM", 6490 mobile_ignore: "The mobile IM does not support that feature.", 6491 network_invite_accepted: "<handle> has accepted your friend request.", 6492 network_invite_declined: "<handle> has declined your friend request.", 6493 no_response: "No response from <handle>", 6494 now_friends: "You are now friends with <handle>.", 6495 request_failed: "Your friend request was not sent to <handle>.", 6496 request_sent: "Your friend request has been sent to <handle>.", 6497 sending: "Sending...", 6498 stopped_viewing_broadcast: "<handle> has stopped viewing your webcam", 6499 stopping_broadcast: "<handle> is no longer broadcasting", 6500 viewing_broadcast: "<handle> is viewing your webcam", 6501 waiting: "Waiting for <handle> to respond", 6502 webcam_accept: "<handle> has accepted to view your webcam", 6503 webcam_decline: "<handle> has declined to view your webcam", 6504 welcome: "You have re-entered the chat.", 6505 exit_imc: "<handle> is not on IM", 6506 initiate_broadcast: "Initiating broadcastingâ¦", 6507 virtual_gift: "I hope you like the virtual gift I picked for you.", 6508 received_gift: "You received {{points}} points", 6509 sent_gift: "You sent {{points}} points as a fan", 6510 received_tip: "{{amount}} points received", 6511 sent_tip: "Tipped you {{amount}} points", 6512 broadcast_state_stopped: "Broadcast has been stopped", 6513 broadcast_state_public: "Broadcast has been made public", 6514 broadcast_state_private: "Broadcast has been made private", 6515 broadcast_status_connecting: "Broadcast status: connecting", 6516 broadcast_status_closed: "Broadcast status: closed", 6517 broadcast_status_registered: "Broadcast status: registered", 6518 broadcast_status_connect_error: "Broadcast error: connect error", 6519 broadcast_status_streamnotfound: "Broadcast error: stream not found", 6520 broadcast_status_failed: "Broadcast error: failed", 6521 broadcast_status_connected: "Broadcast status: connected" 6522 }, 6523 tooltips:{ 6524 delivered_icon: "Delivered", 6525 delivering_icon: "Sent", 6526 delivery_failed: "Undelivered", 6527 help_button: "Help", 6528 mute_button: "Mute Alerts", 6529 unmute_button: "Unmute Alerts", 6530 refresh_button: "Refresh", 6531 broadcast_button: "View Broadcasting",
6532 broadcast_audio_button: "View Broadcasting with Sound", 6533 smilies_button: "Smiley", 6534 photo_button: "Attach a Photo", 6535 report_button: "Interact" 6536 }, 6537 me: "Me", 6538 no_search_results: "There are no members matching these filters. <a href='#' class='messenger_refresh_link'>View online members.</a>", 6539 no_incoming: "You currently don\'t have any incoming messages.", 6540 no_friends: "No friends are online.", 6541 photo: "Photo", 6542 photos: "Photos", 6543 select_photo: "Select a photo", 6544 video: "Video", 6545 videos: "Videos", 6546 friend: "friend", 6547 friends: "Friends", 6548 fan: "fan", 6549 fans: "fans" 6550 }, 6551 filters: { 6552 body_type: [1,2,3,4,5,6], 6553 marital_status: [1,2,3,4,5,6], 6554 race: [1,2,3,4,5,6,7,8,9], 6555 show_sex: [1,2,3,4,5,6,7], 6556sex_orient: [1,2,3,4], 6557show: ['all','only_photos','only_broadcasting','only_wsound'] 6558 }, 6559 patterns: { 6560 disallow_in_handle: /[^0-9A-Za-z_\-\.]/g, 6561 leading_non_alpha: /^([^A-Za-z]){1}/, 6562 system_message: /^\[(exit_chat|enter_chat|exit_imc|waiting|invite|timeout|loggedout|decline|ignore|ignore_autoreply|initiate_broadcast|invite_broadcast|webcam_accept|accept_webcam|webcam_decline|decline_webcam|webcam_on|webcam_off|webcam_connecting|welcome|stopping_broadcast|invitation_sent|invitation_cancelled|request_sent|request_failed|network_invite_accepted|network_invite_declined|now_friends|mobile_ignore){1}(\s.+)*]$/, 6563 system_photo: /^\[photo (https?:\/\/.+\.?(.+)\.com\/(.+)\/imc\/uploads\/(.+))]$/, 6564 system_webcam: /^\[webcam_invite (rtmp:\/\/(.+))]$/, 6565 system_invite: /^\[invite (.+)]$/, 6566 system_vgift: /^\[vgift (.+)]$/, 6567 system_tip: /^\[tip (.+)]$/ 6568 }, 6569 site: "bdsm", 6570 socket_server: "imchat.adultfriendfinder.com"/*""*/, 6571 socket_port: "5000"/*""*/, 6572 specs: { 6573 closed_min_width: 431, 6574 open_min_width: 860, 6575 stealth_default_width: 431, 6576 stealth_default_height: 512, 6577 broadcast_startup_timeout: 10000, 6578 broadcast_dialog_timeout: 5000, 6579 chatwin_width: 531, 6580 chatwin_height: 475, 6581 delivery_attempts: 3, 6582 incoming_message_expire: 120000, 6583 whos_online_limit: 50, 6584 whos_online_refresh: 300000, 6585 paywall_pagelimit: 3, 6586 view_window_open: "resizable=yes,width=526,height=460,location=no", 6587 viewer_limit: 25 6588 }, 6589 timers: { 6590 chat_window_unload_delay: 1000, 6591 check_failed_message_delay: 10000, 6592 check_inbox_interval: 15000, 6593 dialog: 5000, 6594 tab_flash_interval: 1000, 6595 view_window_unload_delay: 1000 6596 }, 6597 urls: { 6598 chat_window: "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&sendim=1&action=video_public_view&trlid=config-messenger_v15-4", 6599 check_login: "/coreapi/session?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6600 get_profile: "/p/imc/imc_action.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
66005sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6601 profile: "/profile/{{handle}}?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6602 broadcast_info: "/p/imc/imc_action.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-2", 6603 broadcast_audio: "/p/imc/imc_action.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-3", 6604 whos_online: "/p/imc/webimc_online.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6605 //whos_online: "/coreapi/imc_online?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6606 banned_users: "/blocked_members?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6607 filter_settings: "/cupid_settings?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6608 invite: "/p/circle/invitations.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6609 network_invite: "/p/circle/people.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-3", 6610 help: "/p/help.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&category=INSTANT_MESSENGER&trlid=config-messenger_v15-2", 6611 view_video: "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=video_public_view&trlid=config-messenger_v15-5", 6612 paywall_auth: "/coreapi/new_conversation_counter?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=config-messenger_v15-1", 6613 paywall_upgrade: "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=standard_IMC&trlid=config-messenger_v15-9", 6614 report_abuse: "/p/abuse.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=imc&trlid=config-messenger_v15-1" 6615 }, 6616 who_string: "r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" 6617 } 6618 return p[strName] || undefined; 6619} 6620 6621 VIce.setView('ListItem', VIce.extend("view","ListItem",{ 6622 6623 member_collection: VIce.collection('Member'), 6624 6625 viceInit: function () { 6626 if (this.model) { 6627 this.prop_model = this.model; 6628 } 6629 this._list_item_initialize(); 6630 }, 6631 _triggerPageEvent: function (event) { 6632 var page = VIce.currentPage(); 6633 if (page) { 6634 page.trigger(event,this.model); 6635 } 6636 }, 6637 6638 redirectOrderFlirt: function (e,data) { 6639 var url = VIce.gsub.link('order_flirt',{ values: { pwsid: this.model.get('pwsid') } }), 6640 win = data.win || window, 6641 wname = win.name; 6642 6643 window.open(url,wname); 6644 }, 6645 redirectOrder: function (args) { 6646 var origin = args.origin; 6647 window.location.href = VIce.gsub.link('order',{ 6648 values: { 6649 pwsid: this.model.get('pwsid'), 6650 origin: origin 6651 } 6652 }); 6653 }, 6654 6655 sendFlirt: function (e,data) { 6656 var flirtCollection = VIce.collection('Flirt');
6657 var def = flirtCollection.sendRequest({ 6658 with_pwsid : this.model.get('pwsid'), 6659 with_handle : this.model.get('handle'), 6660 }, 'use_deferred'); 6661 var thisListItem = this; 6662 6663 if (def) { 6664 def.fail(function (json) { 6665 if (json.response.indexOf("Standard Member") > -1) { 6666 thisListItem.redirectOrderFlirt(e,data); 6667 } 6668 }); 6669 } 6670 thisListItem.model.set("can_flirt",false); 6671 this._triggerPageEvent("flirted"); 6672 }, 6673 bidOnMember: function () { 6674 this.becomeAFan(); 6675 }, 6676 becomeAFan: function () { 6677 this.trigger('becoming_a_fan',{model: this.model}); 6678 FF_actionsManager.doShowBidLB({their_pwsid: this.model.get('pwsid')}); 6679 }, 6680 addToHotlist: function () { 6681 console.warn('handleHotlist'); 6682 6683 if ( CD && CD.member && CD.member.profile_on == '0' && CD.LB ) { 6684 var template = Handlebars.compile(document.getElementById("tpl_hotlist_user_profile_off_popover").innerHTML); 6685 CD.LB.open(template({ 6686 'member' : { 6687 'handle' : this.model.get('handle') 6688 } 6689 }), { 6690 css_style: ".modal-body { padding: 30px; }.modal-body p { font-size: 16px; padding: 10px; }" 6691 }); 6692 6693 return false; 6694 } else if ( CD && CD.LB && this.model.get('profile_on') == '0' ) { 6695 var template = Handlebars.compile(document.getElementById("tpl_hotlist_profile_off_popover").innerHTML); 6696 CD.LB.open(template({ 6697 'member' : { 6698 'handle' : this.model.get('handle') 6699 } 6700 }), { 6701 css_style: ".modal-body { padding: 30px; }.modal-body p { font-size: 16px; padding: 10px; }" 6702 }); 6703 6704 return false; 6705 } else { 6706 var hotlistCollection = VIce.collection('Hotlist'); 6707 hotlistCollection.sendRequest({ 6708 with_pwsid: this.model.get('pwsid'), 6709 with_handle: this.model.get('handle'), 6710 }); 6711 this.model.set("is_hotlisted",1); 6712 this._triggerPageEvent("hotlisted"); 6713 this.becomeAFan(); 6714 } 6715 }, 6716 _askedForPhoto:function (data) { 6717 this.trigger("askedForPhoto",true); 6718 this.model.set('asked_for_photo',true); 6719 }, 6720 openIM: function () { 6721 if (VIce.globals.has_imc_widget === 1 && VIce.globals.site === 'ffadult') { 6722 if (CD.utils) { 6723 CD.utils.launchConversation(this.model.get('handle')); 6724 } 6725 else { 6726 var url = '/go/page/conversation?user_handle=' + this.model.get('handle') + '&no_perf=1#chatwindow_' + this.model.get('handle') + '?{}' 6727 window.open(url , '', 'width=490,height=860,resizable'); 6728 } 6729 } else { 6730 if (CD.utils) { 6731 CD.utils.launchMessenger({handle: this.model.get('handle')}); 6732 } 6733 else { 6734 var url = '/messenger.html?imc_mode=stealth&no_perf=1&conversation=' + this.model.get('handle'); 6735 window.open(url , '', 'width=456,height=466,resizable'); 6736 } 6737 } 6738 }, 6739 sendAskForPhoto: function () { 6740 var deferred_obj = this.member_collection.askForPhoto({ 6741 handle: this.model.get('handle') 6742 }); 6743 6744 if (deferred_obj) { 6745 deferred_obj.then($.proxy(this._askedForPhoto,this)); 6746 } 6747 }, 6748 showFriendWindow: function () { 6749 var pwsid = this.model.get('pwsid'); 6750 var handle= this.model.get('handle'); 6751 6752 var url = VIce.gsub.link('friend_add', 6753 {values: { 6754 mid: pwsid, 6755 to_handle: handle}} 6756 ); 6757 window.open(url, 6758 'invite', 6759 'resizable=yes,scrollbars=yes,height=520,width=430', 6760 false) 6761 6762 //this.model.set("can_friend",false); 6763 //this._triggerPageEvent("friended"); 6764 }, 6765 _setMemberBanned: function (ajax_return,data) { 6766 this.model.set('is_blocked',true); 6767 }, 6768 blockMember: function () { 6769 var handle = this.model.get('handle'); 6770 this.member_collection.blockMember(handle).then($.proxy(this._setMemberBanned,this)); 6771 }, 6772 render: function () { 6773 var ret; 6774 var render_func = this.parent.render; 6775 if (this.parent.render == this.render) { 6776 render_func = this.parent.parent.render; 6777 } 6778 6779 ret = render_func.apply(this,arguments); 6780 VIce.currentPage().parseRoles(this.$el,true,this); 6781 return ret; 6782 }, 6783 6784})); 6785 6786 6787VIce.setView('Member', VIce.extend("view","ListItem",{ 6788 6789 member_collection: VIce.collection("Member"), 6790 6791 6792 viceInit: function () { 6793 var render_view = ''; 6794 6795 if (this.ele_options) { 6796 this.item_tag = this.ele_options['item-tag'] || 'div'; 6797 this.tmpl = this.ele_options.tmpl ? (this.ele_options.tmpl) : 'passport_row_template'; 6798 } 6799 this.allow_targets = 1; 6800 this._list_item_initialize(); 6801 }, 6802 deleteStatusUpdate: function (passed_info,status_data) { 6803 this.model.set("act_feed_status",status_data.status); 6804 }, 6805 deleteStatus: function (id) { 6806 if (id) { 6807 this.member_collection.once("deleteStatus:success",this.deleteStatusUpdate,this); 6808 this.member_collection.deleteStatus(id); 6809 } 6810 6811 }, 6812 updateStatus: function (status) { 6813 if (_.isModel(status)) { 6814 status = status.get('status'); 6815 } 6816 if (status) { 6817 this.member_collection.updateStatus(status); 6818 this.model.set("act_feed_status",status); 6819 } 6820 var page = VIce.currentPage(); 6821 if (page) { 6822 page.hideLightbox(); 6823 } 6824 }, 6825 6826 showUpdateStatus: function () { 6827 VIce.currentPage().lightbox(VIce.template('profile_update_status_form',{}),{ 6828 parent: this 6829 }); 6830 6831 }, 6832 6833 addItem: function (model,options) { 6834 var template_vars = {}; 6835 template_vars = template_vars || {}; 6836 6837 var model = model.clone(); 6838 model._view = this; 6839 6840 // make sure that anyting that has bound to this prop_model 6841 // gets updated 6842 this.prop_model.set(model.toJSON()); 6843 6844 // now add the events to the new model 6845 // this should be merge, but underscore 6846 // doesn't support it. 6847 if (this.prop_model._events 6848 && model._events 6849 ) { 6850 _.each(this.prop_model._events, function (v,k) { 6851 if (model._events[k]) { 6852 $.merge(model._events[k],v); 6853 } else { 6854 model._events[k] = [v]; 6855 } 6856 }); 6857 } 6858 6859 6860 $.extend(true,model._events, this.prop_model._events); 6861 6862 this.setValues(model); 6863 this.prop_model = this.model; 6864 6865 // this is so that template vars will be treated as the defaults
6866 // then ajax data will overwrite those as we move about the page. 6867 _.extend(template_vars, this.template_vars, this.ajax_data); 6868 6869 console.warn(this.name, "Member:_addItemWithModel"); 6870 6871 options = options || {}; 6872 this.render(); 6873 }, 6874})); 6875 6876 VIce.setView('MessengerListItem', VIce.extend("view","ListItem",{ 6877 name: 'MessengerListItem', 6878}));//end ListItem 6879 6880VIce.setView('Member', VIce.extend("view","ListItem",{ 6881}));//end Member 6882 6883 VIce.setView('Chatwindow', VIce.BaseView.extend({ 6884 name: 'MessengerChatWindow', 6885 tmpl: 'chat_window', 6886 max_invites: 20, 6887 viceInit: function(){ 6888 if (this.$el.html() != "") { 6889 this.is_rendered = true; 6890 return true; 6891 } 6892 6893 var thisChatWindow = this, 6894 chatwin = ( CD.utils.checkExists("options.parent_view.win",this) ) ? this.options.parent_view.win : ( this.options.win || window ) ; 6895 6896 //a chatwindow will typically have a parent_view which is the chatviewer 6897 this.chatviewer = (chatwin.app) ? chatwin.app : this.options.parent_view; 6898 6899 this.win = chatwin; 6900 this.win.chat = this; 6901 this.model = this.options.model || this.parent_view.model; 6902 this.handle = this.chatviewer.handle || this.model.get('handle'); 6903 6904 this._receipts = {}; 6905 this.setMessenger(); 6906 6907 this.is_iframe = this.win.location != this.win.parent.location; 6908 this.doc = this.win.document; 6909 this.detect_chatstate = 'on'; 6910 this.chatstate = 'active'; 6911 this.rows = {}; 6912 6913 if (this.chatviewer.handle) { 6914 this.chatviewer.chat = this; 6915 this.chatviewer.flashvars.streamWanted = this.model.get('stream_id'); 6916 this.chatviewer.flashvars.serverId = this.model.get('stream_id_ip'); 6917 6918 this.chatviewer.renderHeader(); 6919 } 6920 6921 this.handleWindowLoad(); 6922 6923 this.is_standard = (VIce.logged_in_member.get('level') < 200)? true : false; 6924 6925 this.render(); 6926 6927 this.outgoing_messages = {}; 6928 this.outgoing_timers = {}; 6929 this.pending_messages = []; 6930 this.page_sent = false; 6931 6932 if (!this.is_standard) { 6933 this.page_permission = 'approved'; // values should be "pending","approved","declined" 6934 }else{ 6935 this.addStandardLevelChecks(); 6936 } 6937 }, 6938 adoptMessenger: function(msngr){ 6939 this.adopt = msngr; 6940 }, 6941 surrenderMessenger: function(newmsngr){ 6942 //erase any reference to the messenger or any other instance of VIce 6943 this.stopListening(this.messenger); 6944 6945 delete this.messenger; 6946 delete CD.messenger; 6947 6948 VIce = newmsngr.framework; 6949 var cp = VIce.currentPage(); 6950 if ( 6951 window.app 6952 && window.app.constructor.prototype.name == 'ChatViewer' 6953 ) { 6954 window.app.setMessenger(newmsngr); 6955 } 6956 6957 var old_html = window.top.document.getElementsByTagName('html')[0], 6958 new_html = window.top.document.getElementsByTagName('iframe')[0].contentDocument.getElementsByTagName('html')[0]; 6959 6960 window.top.lvswon = window.lvswon; 6961 window.top.is_registered = false; 6962 window.top.chat_events_set = false; 6963 6964 this.win = window.top; 6965 6966 try{ 6967 window.top.document.replaceChild(new_html,old_html); 6968 jQuery(window.top.document.body).find('.chatwindow').on("click","[data-click]",$.proxy(this.handleDataClick,this)) 6969 } 6970 catch(e){ 6971 //console.log('Exception thrown trying to replace window html'); 6972 } 6973 }, 6974 setMessenger: function(msngr){ 6975 thisChatWindow = this; 6976 if (!msngr) { 6977 msngr = this.options.messenger || this.options.parent_view.messenger; 6978 if ( 6979 !msngr 6980 && CD.utils.checkExists("options.parent_view.options.parent_view",this) 6981 ) { 6982 msngr = this.options.parent_view.options.parent_view.messenger 6983 } 6984 if ( 6985 !msngr 6986 && this.chatviewer 6987 ) { 6988 msngr = this.chatviewer.msngr 6989 } 6990 if (!msngr) { 6991 msngr = VIce.currentPage().getVar('MessengerView') 6992 } 6993 } 6994 6995 if (msngr) { 6996 this.stopListening(); 6997 this.messenger = msngr; 6998 this.listenTo(msngr.prop_model,'change:chat_invite_count', this.changeInviteCount); 6999 7000 var thisMessenger = msngr, 7001 handle = this.handle; 7002 7003 this.listenTo(msngr,'chatstate_change:' + handle, this.handleChangeChatState); 7004 this.listenTo(msngr,'message_sent:' + handle, this.handleMessageSent); 7005 this.listenTo(msngr,'receipt:' + handle, this.handleSentMessageReceipt); 7006 this.listenTo(msngr,'messenger_close', this.handleMessengerClose); 7007 this.listenTo(msngr,'chat_exit:' + handle, this.handleChatExit); 7008 this.listenTo(msngr,'chat_enter:' + handle, this.handleChatEnter); 7009 this.listenTo(msngr,'welcome_back:' + handle, this.handleWelcome); 7010 this.listenTo(msngr,'waiting:' + handle, this.handleWaiting); 7011 this.listenTo(msngr,'message_autoreply:' + handle, this.handleNotAvailable); 7012 this.listenTo(msngr,'message_ignore:' + handle, this.handleNotAvailable); 7013 this.listenTo(msngr,'message_timeout:' + handle, this.handleNotAvailable); 7014 this.listenTo(msngr,'message_decline:' + handle, this.handleNotAvailable); 7015 this.listenTo(msngr,'networkinvite_sent:' + handle, this.handleNetworkInviteSent); 7016 this.listenTo(msngr,'networkinvite_failed:' + handle, this.handleNetworkInviteFailure); 7017 this.listenTo(msngr,'networkinvite_received:' + handle, this.handleNetworkInviteReceived); 7018 this.listenTo(msngr,'networkinvite_accepted:' + handle, this.handleNetworkInviteAccepted); 7019 this.listenTo(msngr,'accept_networkinvite:' + handle, this.handleAcceptNetworkInvite); 7020 this.listenTo(msngr,'accept_webcaminvite:' + handle, this.handleAcceptWebcamInvite); 7021 this.listenTo(msngr,'decline_webcaminvite:' + handle, this.handleDeclineWebcamInvite); 7022 this.listenTo(msngr,'broadcaststarted:' + handle, this.handleBroadcastStarted); 7023 this.listenTo(msngr,'broadcaststopped:' + handle, this.handleBroadcastStopped); 7024 this.listenTo(msngr,'flirted:' + handle, this.handleFlirted); 7025 this.listenTo(msngr,'hotlisted:' + handle, this.handleHotlisted); 7026 this.listenTo(msngr,'banned:' + handle, this.handleDeclined); 7027 this.listenTo(msngr,'blocked:' + handle, this.handleDeclined); 7028 this.listenTo(msngr,'viewwindow_opened:' + handle, this.handleViewWindowOpened); 7029 this.listenTo(msngr,'viewwindow_closed:' + handle, this.handleViewWindowClosed); 7030 7031 this.off('chatrow_added').on('chatrow_added', this.handleChatRowAdded); 7032 this.off('chatrow_added:' + handle).on('chatrow_added:' + handle,msngr.handleChatRowAdded,msngr); 7033 this.off('chatstate_change').on('chatstate_change', msngr.handleChatstateChange,msngr); 7034 7035 } 7036 }, 7037 // allow model change event as well as this.changeInveteCount 7038 changeInviteCount: function (model, v) { 7039 if (arguments.length == 1) { 7040 v = model; 7041 } 7042 if (!this.invite_ele) { 7043 this.invite_ele = this.$('#chat_invite_num'); 7044 } 7045 this.invite_ele.html(v); 7046 }, 7047 headerTemplateJSON: function(d){ 7048 jQuery.extend(d,{ 7049 rowtype: 'passport', 7050 chat_header_row: true, 7051 video_header_row: true, 7052 is_passport: true, 7053 passport_adjustable: true, 7054 can_view_their_broadcast: this.messenger.canViewTheirBroadcast(d.handle), 7055 profile_url: this.messenger.getProfileUrl(d.handle), 7056 parent_view: this.messenger.name 7057 }); 7058 return d; 7059 }, 7060 templateJSON: function(d){ 7061 7062 var lang = this.messenger.lang, 7063 buttons = lang.buttons, 7064 tooltips = lang.tooltips, 7065 interactions = lang.interactions; 7066 7067 jQuery.extend(d, { 7068 smilies_button_tooltip: tooltips.smilies_button, 7069 photo_button_tooltip: tooltips.photo_button, 7070 report_button_tooltip: tooltips.report_button, 7071 is_embedded: true, 7072 is_stealth: this.stealth, 7073 is_standard: this.is_standard, 7074 //host_messenger: this.userparams.host_messenger, 7075 //messenger_url: (!!this.userparams.host_messenger) ? CD.utils.buildURL(this.messenger.urls.messenger,{imc_mode:'stealth',conversation: this.handle}), 7076 start_webcam_btn: buttons.send_webcam, 7077 send_btn: buttons.send, 7078 can_view_my_broadcast: this.messenger.canViewMyBroadcast(d.handle), 7079 message_button_text: interactions.message, 7080 hotlist_button_text: (d.hotlisted) ? interactions.hotlisted : interactions.hotlist , 7081 invite_button_text: (d.is_friend) ? (d.is_friend == 2 ? interactions.inviting : interactions.invited) : interactions.invite , 7082 flirt_button_text: (parseInt(d.can_flirt,10) === 0) ? interactions.flirted.flirt : interactions.flirts.flirt, 7083 profile_url: this.messenger.getProfileUrl(d.handle) 7084 }); 7085 7086 return d; 7087 }, 7088 render: function(model){ 7089 if (!model) { model = this.model } 7090 7091 this.listenTo(this.chatviewer.model, "change:hotlist_state", this.chatviewer.setHotlistState); 7092 this.listenTo(this.chatviewer.model, "change:flirt_state", this.chatviewer.setFlirtState); 7093 this.listenTo(this.chatviewer.model, "change:can_friend", this.chatviewer.updateCanFriend); 7094 7095 this.chatviewer.setHotlistState(); 7096 this.chatviewer.updateCanFriend(); 7097 this.chatviewer.setFlirtState(); 7098 7099 var tmpl_data = {}; 7100 var html = ''; 7101 var chat_window = this.$(".chatwindow"); 7102 7103 var thisChatwindow = this, 7104 mdata = model.toJSON(), 7105 history = this.messenger.getChatHistory(this.handle); 7106 7107 if (history.items.his.length > 0) { 7108 this.page_permission = 'approved'; 7109 } 7110 7111 tmpl_data = this.templateJSON(jQuery.extend(mdata,{ 7112 is_embedded: !!this.options.is_embedded, 7113 chathistory: history.html || "", 7114 messenger_paywall: VIce.template("messenger_paywall"), 7115 show_chat_invite_number: this.is_standard, 7116 chat_invite_num: this.messenger.prop_model.get("chat_invite_count") || 0, 7117 stream_id: mdata.stream_id + "|" + mdata.stream_id_ip 7118 })); 7119 7120 html = VIce.template( 7121 this.tmpl, 7122 tmpl_data 7123 ); 7124 7125 //make sure that the chat events are registered for the new html 7126 window.chat_events_set = false;
7127 7128 this.$el.html(html); 7129 if (this.is_iframe) { this.$el.addClass('framechat'); } 7130 7131 if (!this.rendered) { 7132 // cache elements 7133 this.interactions_dropdown = this.$('.chat-tools-interactions'); 7134 this.interactions_button = this.$('.interactions-button'); 7135 7136 //Iframe load event for handling image uploads 7137 this.$('.submit_frame').load(function(){ 7138 thisChatwindow.handleSubmitFrameLoad(this) 7139 }); 7140 7141 this.registerChatEvents(); 7142 7143 VIce.setTimer( 7144 'enterChat', 7145 function(){thisChatwindow.enterChat()}, 7146 300 7147 ) 7148 7149 this.rendered = true; 7150 7151 } 7152 7153 this.chatviewer.resize(); 7154 7155 return this; 7156 }, 7157 setHotlistState: function () { 7158 return this.chatviewer.setHotlistState(); 7159 }, 7160 setFlirtState: function () { 7161 return this.chatviewer.setFlirtState(); 7162 }, 7163 updateCanFriend: function () { 7164 return this.chatviewer.updateCanFriend(); 7165 }, 7166 handleDataClick: function (e,data){ 7167 var button = $(e.currentTarget), 7168 func = button.attr("data-click"); 7169 if (button.hasClass('disabled')) { return false } 7170 this[func](e,data); 7171 }, 7172 7173 handleProfileLinkClick: function(e,data){ 7174 var t = $(e.currentTarget); 7175 return this.messenger.handleProfileLinkClick(e,{ 7176 'profile-url': t.attr("data-profile-url"), 7177 'target': t.attr("data-target") 7178 }); 7179 }, 7180 registerChatEvents: function() { 7181 var target = this.$('.message-area'); 7182 if (!this.win.chat_events_set) { 7183 target.off(); 7184 7185 var thiscw = this, 7186 handle = this.model.toJSON().handle, 7187 messenger = this.messenger; 7188 7189 // Handle Key Press 7190 target.keypress(function(e) { 7191 var thisval = $(this).val(), 7192 current_detect_state = thiscw.detect_chat_state, 7193 current_state = thiscw.getChatState(); 7194 7195 if(e.which != 13) { 7196 if(// Composing a message 7197 thisval 7198 && current_detect_state != 'on' 7199 ) { 7200 // Enable state detection 7201 thiscw.detect_chat_state = 'on' 7202 // We send the friend a "composing" chatstate 7203 thiscw.setChatState('composing'); 7204 } 7205 else if(// Flushed the message which was being composed 7206 !thisval 7207 && current_detect_state == 'on' 7208 ) { 7209 // We change the state detect input 7210 thiscw.detect_chat_state = 'off' 7211 7212 // We send the friend an "active" chatstate 7213 thiscw.setChatState('active'); 7214 } 7215 7216 } else { 7217 // Add a new line 7218 if(e.shiftKey) { target.val(target.val() + '\n') } 7219 else { 7220 // Send the message 7221 thiscw.sendMessage(); 7222 // Reset the composing database entry 7223 thiscw.detect_chat_state = 'off'; 7224 thiscw.setChatState('active'); 7225 } 7226 e.preventDefault(); 7227 } 7228 }); 7229 7230 // Handle Change 7231 target.change(function() { 7232 // Reset the composing database entry 7233 thiscw.detect_chat_state = 'off'; 7234 }); 7235 7236 //Handle Focus 7237 target.focus(function() { 7238 var current_state = thiscw.getChatState(); 7239 7240 if( 7241 current_state != 'composing' 7242 && $(this).val() 7243 ) {// Something was written, user started writing again 7244 thiscw.setChatState('composing'); 7245 7246 } 7247 else if (current_state != 'active') {// Nothing in the input, user is active 7248 thiscw.setChatState('active'); 7249 } 7250 }); 7251 7252 //Handle Blur 7253 target.blur(function() { 7254 var current_state = thiscw.getChatState(); 7255 7256 // Something was written, user paused 7257 if( 7258 current_state != 'paused' 7259 && $(this).val() 7260 ) { 7261 thiscw.setChatState('paused'); 7262 } 7263 //Nothing in the input, user is inactive 7264 else if (current_state != 'inactive') { 7265 thiscw.setChatState('inactive'); 7266 } 7267 7268 if (thiscw.getChatState() != current_state) { 7269 thiscw.trigger('change_chatstate',{ 7270 chatstate: thiscw.getChatState(), 7271 handle: thiscw.messenger.member.get('handle') 7272 }); 7273 } 7274 }); 7275 7276 target[0].chat_events_set = true; 7277 this.win.chat_events_set = true; 7278 7279 } 7280 }, 7281 handleWindowLoad: function(){ 7282 var handle = this.handle; 7283 7284 /*update window title*/ 7285 this.win.parent.window.document.title = handle + " - Chatting"; 7286 7287 if (this.chatviewer) { 7288 this.chatviewer.chat_controls.open_chat.removeClass('disabled'); 7289 this.chatviewer.resize() 7290 } 7291 7292 if (this.messenger) { 7293 //remove row from incoming 7294 this.messenger.removeFromIncoming(handle,false); 7295 this.messenger.removeFromArchive(handle); 7296 } 7297 7298 }, 7299 fitToScreen: function(page,win){ 7300 if (!win) { win = window } 7301 var $window = VIce.$(win), 7302 b = page.find('[data-role="body"]'), 7303 css = { 7304 'min-height': $window.height(), 7305 'min-width': $window.width() 7306 }; 7307 7308 page.css(css); 7309 b.css(css); 7310 }, 7311 handleSubmitFrameLoad: function(frame){ 7312 var p = jQuery(frame).contents().find('pre'); 7313 if (p.length) { 7314 eval("var d = " + p.text() + ";"); 7315 var msg = "[photo " + d.url +"]"; 7316 this.messenger.sendMessage(this.handle, msg); 7317 this.destroyFileDialog(); 7318 } 7319 7320 }, 7321 enableButtons: function(){ 7322 var thisChatWindow = this, 7323 model = this.messenger.findExistingModel(this.handle,true); 7324 if (!model) { return false } 7325 /*set window active value*/ 7326 window.active = 1; 7327 7328 this.$('.broadcast button.disabled').not('.broadcasting').removeClass('disabled'); 7329 7330 if ( this.messenger.canViewTheirBroadcast(this.handle) ) { 7331 this.$('.top button').removeClass('disabled'); 7332 } 7333 7334 /*end Move to chat window handler*/ 7335 7336 7337 }, 7338 disableButtons: function(){ 7339 this.$('.broadcast button').not('#send_chat_button').addClass('disabled'); 7340 this.$('.top button').addClass('disabled'); 7341 }, 7342 handleChangeChatState: function(data){//Update chatstate from them 7343 this.displayPartnerChatState(); 7344 if (data.chatstate != 'gone') { 7345 this.enableButtons(); 7346 } 7347 else { 7348 this.disableButtons(); 7349 } 7350 },
7351 setChatState: function(chatstate){ 7352 if (!window) {return false} 7353 if (chatstate != window.chatstate) { 7354 if (chatstate == 'gone') { this.disableButtons(); } 7355 window.chatstate = chatstate; 7356 try{ 7357 this.messenger.trigger('chatstate_change',{ 7358 chatstate: chatstate, 7359 handle: this.handle 7360 }); 7361 7362 } 7363 catch(e){/*console.log(e.message)*/} 7364 } 7365 }, 7366 getChatState: function(){ 7367 return (!window || window.closed) ? 'gone' : window.chatstate ; 7368 }, 7369 7370 _sendMessage: function (msg) { 7371 this.messenger.sendMessage(this.handle,this.$('.message-area').val()); 7372 }, 7373 __handleCanPage: function () { 7374 var thisChatWindow = this, 7375 handle = this.handle, 7376 msngr = this.messenger; 7377 7378 this.page_permission = "approved"; 7379 if (this.pending_messages) { 7380 $.each(this.pending_messages, function (i,msg) { 7381 msngr.sendMessage(handle,msg); 7382 }); 7383 this.pending_messages = []; 7384 } 7385 msngr.member_collection.addIMCCounter(this.model.get('pwsid')).then(function (json) { 7386 thisChatWindow.messenger.changeInviteCount(json.counter); 7387 }); 7388 }, 7389 __handleCantPage: function () { 7390 this.page_permission = "declined"; 7391 this.$('.message-area').val(''); 7392 this.messenger.trigger('message_notsent',{ 7393 reason: 'paywall' 7394 }) 7395 7396 }, 7397 sendMessage: function(){ 7398 if (this.page_permission == "approved") { 7399 this._sendMessage(); 7400 } else if (this.page_permission == 'declined') { 7401 this.__handleCantPage(); 7402 } else if (!this.page_permission) { 7403 7404 // make sure this is first 7405 // otherwise if the VIce.can finishes first 7406 // the pending_message won't be there. 7407 this.pending_messages.push(this.$('.message-area').val()); 7408 7409 if (!this.pending_page) { 7410 this.pending_page = true; 7411 VIce.can("send_page",{ to_pwsid: this.model.get('pwsid') }).then($.proxy(this.__handleCanPage,this), 7412 $.proxy(this.__handleCantPage,this)); 7413 } 7414 7415 } 7416 }, 7417 markDelivered: function(message_id, count){ 7418 var thisMessenger = this; 7419 var handle = message_id.substring(message_id.indexOf('_') + 1), 7420 chatrow = this.$('.message_text[data-id="'+message_id+'"]'); 7421 count = count || 0; 7422 7423 if (chatrow.length) { 7424 chatrow.parent().find('.date .sprite-delivery-pending').addClass('sprite-delivered').removeClass('sprite-delivery-pending').attr('data-original-title',this.messenger.lang.tooltips.delivered_icon); 7425 } else if(count < 3) { 7426 count++; 7427 try { 7428 setTimeout(function () { 7429 thisMessenger.markDelivered(message_id,count); 7430 }, 500); 7431 } catch (e) {} 7432 } 7433 }, 7434 markFailed: function(message_id){ 7435 var handle = message_id.substring(message_id.indexOf('_') + 1), 7436 chatrow = this.$('.message_text[data-id="'+message_id+'"]'); 7437 7438 if (chatrow.length) { 7439 chatrow.parent().find('.date .sprite-delivery-pending').attr('data-original-title',this.messenger.lang.tooltips.delivery_failed); 7440 } 7441 }, 7442 handleSmileysButtonClick: function(e){ 7443 /*TODO - cache these elements*/ 7444 if (!this.isDisabled(e)) { 7445 var menu = this.$('.chat-tools-smileys'); 7446 if (menu.hasClass('open')) { 7447 this.destroySmileyDialog(); 7448 } else { 7449 this.createSmileyDialog('smileys'); 7450 } 7451 menu.toggleClass('open'); 7452 } 7453 }, 7454 isDisabled: function (e) { 7455 var button = $(e.currentTarget); 7456 if (button.hasClass('disabled')) { return true } 7457 return false; 7458 }, 7459 handleAddPhotoButtonClick: function(e) { 7460 7461 if (!e || !this.isDisabled(e)) { 7462 var menu = this.$('.chat-tools-file'); 7463 if (menu.hasClass('open')) { 7464 this.destroyFileDialog(); 7465 } else { 7466 this.createFileDialog('file'); 7467 } 7468 menu.toggleClass('open'); 7469 } 7470 },/*end function handleAddPhotoButtonClick*/ 7471 createSmileyDialog: function() { 7472 /*if it already exists, we're done*/ 7473 if(this.$('.bubble-smileys').length) { return false } 7474 7475 var html = '<ul class="dropdown-menu dropdown-menu-btn"><li><div class="bubble-smileys">' + this.smileyLinks() + '</div></li></ul>'; 7476 7477 return this.$('.chat-tools-smileys.btn-group').append(html); 7478 7479 },/*end function createSmileyDialog*/ 7480 smileyLinks: function() { 7481 var links = '', 7482 elink = this.emoteLink, 7483 smilies = this.messenger.emoticons, 7484 l = smilies.length, 7485 smiley,classname; 7486 7487 for(i = 0; i < l; i++) { 7488 smiley = smilies[i]; 7489 classname = (smiley.name.indexOf('bdsm') != -1) ? 'bdsm-smiley' : 'ff-smiley' ; 7490 7491 links += elink(smiley.seq, smiley.name, classname); 7492 } 7493 return links; 7494 }, 7495 emoteLink: function(smiley, image, classname) { 7496 if (!classname) { classname = 'ffsmiley'} 7497 return '<a class="emoticon '+ classname +'" data-smiley="' + escape(smiley) + '" data-click="insertSmiley"><img src="https://secureimage.securedataimages.com/images/common/chat/smilies/'+image+'.gif" title="'+smiley+'" /></a>'; 7498 }, 7499 createFileDialog: function(){ 7500 /*if it already exists, we're done*/ 7501 if( this.$('.bubble-file').length ) { return false } 7502 7503 // File send 7504 var thisChatwindow = this, 7505 lang = this.messenger.lang, 7506 html = '<div class="bubble-file">' + 7507 '<div class="modal-backdrop"></div>'+ 7508 '<form id="oob-upload" action="/p/imc/chatbody.cgi" target="submit_frame" method="post" enctype="multipart/form-data">' + 7509 '<div id="lb-main" class="modal">' + 7510 '<div class="modal-header">' + 7511 '<span id="lb-x" class="close">×</span>' + 7512 '<p class="title">' + lang.select_photo + '</p>' + 7513 '</div>' + 7514 '<div class="modal-body">' + 7515 this.messenger.generateFileShare(this.handle) + 7516 '</div>' + 7517 '<div class="modal-footer">' + 7518 '<button type="SUBMIT" class="btn btn-tiny" name="send">'+ lang.buttons.send +'</button>' + 7519 '</div>' + 7520 '</form></div>'; 7521 7522 jQuery(this.win.document.body).append(html).find('.close').on('click', function(){ 7523 thisChatwindow.handleAddPhotoButtonClick() 7524 }); 7525 VIce.currentPage().parseRoles(this.$('.bubble-smileys')); 7526 }, 7527 destroySmileyDialog: function(){ 7528 this.$('.chat-tools-smileys .dropdown-menu').remove(); 7529 }, 7530 destroyFileDialog: function(){ 7531 jQuery(this.win.document.body).find('.bubble-file').remove(); 7532 }, 7533 insertSmiley: function(e) { 7534 var thisChatwindow = this, 7535 selector = this.$('.message-area'), 7536 button = jQuery(e.currentTarget), 7537 data = button.data(), 7538 smiley = unescape(data.smiley), 7539 selem = selector.get(0), 7540 oValue = selector.val(), 7541 nValue = ''; 7542 7543 // there must be a space at the end of the pattern 7544 if( 7545 oValue 7546 && oValue.charAt(oValue.length-1) == " " 7547 ) { oValue += ' ' } 7548 7549 nValue = oValue + smiley + ' '; 7550 7551 // render the new value and focus on textarea 7552 selector.val(nValue).focus(); 7553 this.moveCaretToEnd(selem); 7554 7555 // Work around Chrome's little problem 7556 try { 7557 window.setTimeout(function() { thisChatwindow.moveCaretToEnd(selem) }, 4); 7558 }catch(e) {} 7559 /*close the dropdown*/ 7560 this.$('.chat-tools-smileys').removeClass('open'); 7561 7562 /*prevent default behavior*/ 7563 return false;
7564 7565 },/*end insertSmiley*/ 7566 moveCaretToEnd: function(el) { 7567 if (typeof el.selectionStart == "number") { 7568 el.selectionStart = el.selectionEnd = el.value.length; 7569 } else if (typeof el.createTextRange != "undefined") { 7570 el.focus(); 7571 var range = el.createTextRange(); 7572 range.collapse(false); 7573 range.select(); 7574 } 7575 }, 7576 toggleInteractionsMenu: function(){ 7577 this.interactions_dropdown.toggleClass('open'); 7578 }, 7579 handleInteractionsButtonClick: function(e,data){ 7580 if (!this.isDisabled(e)) { 7581 this.toggleInteractionsMenu(); 7582 } 7583 7584 }, 7585 7586 handleFlirtLinkClick: function(e,data){ 7587 if (this.chatviewer.model.get('can_flirt')) { 7588 this.chatviewer.sendFlirt(e,data); 7589 } 7590 this.interactions_dropdown.removeClass('open'); 7591 7592 }, 7593 handleHotlistLinkClick: function(e,data){ 7594 this.chatviewer.addToHotlist(e,data); 7595 this.interactions_dropdown.removeClass('open'); 7596 }, 7597 handleInviteLinkClick: function(e,data){ 7598 this.messenger.sendNetworkInvitation(this.model); 7599 }, 7600 handleSendWebcamButtonClick: function(e,data){ 7601 if (jQuery(e.currentTarget).hasClass('disabled')) { return false; } 7602 /*This sends the webcam invite*/ 7603 var msngr = this.messenger, 7604 membr = msngr.member, 7605 is_stealth = !!msngr.stealth, 7606 his_handle = (is_stealth) ? msngr.conversation : this.handle, 7607 my_handle = membr.get('handle'), 7608 raw_conv = '', 7609 raw_rows = [], 7610 conv_rows = [], 7611 d = null, 7612 chat_history = '', 7613 u; 7614 7615 /*TODO - implement stealth functionality*/ 7616 if (is_stealth) { 7617 raw_conv = this.$('.content').html(); 7618 raw_rows = jQuery(raw_conv); 7619 conv_rows = raw_rows.not('[data-type="system-message"]'), 7620 d = jQuery('<div>'); 7621 7622 /*we are going to store the conversation and then relaunch broadcasting*/ 7623 d.html(conv_rows); 7624 chat_history = d.html(); 7625 7626 /*store a record of this conversation so it can be restored from localStorage*/ 7627 if (window.localStorage) { 7628 localStorage.setItem('conversation_' + my_handle,msngr.conversation); 7629 localStorage.setItem('history_' + my_handle,chat_history); 7630 } 7631 7632 /*clean the url of the stealth params and set the broadcast param*/ 7633 u = window.location; 7634 u.search = 'broadcast=1&broadcast_state=private'; 7635 7636 /*change window name to avoid creating loop*/ 7637 window.name = 'video_broadcast' + membr.get('pwsid'); 7638 window.reload(u); 7639 return false; 7640 } 7641 7642 /*add this user to the broadcast_invites object so the invitation can be sent when the broadcast is ready*/ 7643 msngr.broadcast_invites[his_handle] = 'pending'; 7644 7645 if (!membr.get('stream_url')) { 7646 msngr.displaySystemMessage(his_handle, 'initiate_broadcast'); 7647 } 7648 7649 if (msngr.current_broadcast_state == 'stopped') { msngr.launchBroadcaster(e,{istate:'private'}) } 7650 else { 7651 if (membr.get('stream_id')) { 7652 msngr.sendWebcamInvite(his_handle); 7653 } 7654 } 7655 7656 }, 7657 incrementOutgoingMessage: function(msg_id){ 7658 if (this.outgoing_messages[msg_id]) { this.outgoing_messages[msg_id]++ } 7659 else {this.outgoing_messages[msg_id] = 1} 7660 }, 7661 removeOutgoingMessage: function(msg_id){ 7662 try{ 7663 if(this.outgoing_messages[msg_id]) {delete this.outgoing_messages[msg_id]} 7664 window.clearTimeout(this.outgoing_timers[msg_id]); 7665 delete this.outgoing_timers[msg_id]; 7666 } 7667 catch(e){ 7668 } 7669 }, 7670 handleMessageFailed: function(msg){ 7671 var msg_id = msg.getID(); 7672 7673 this.removeOutgoingMessage(msg_id); 7674 this.markFailed(msg_id); 7675 this.messenger.displaySystemMessage(this.handle,'timeout'); 7676 }, 7677 handleMessageSent: function(data){ 7678 try { 7679 if (!data) { data = {} } 7680 var win = data.win || window; 7681 if (data.chat_type == 'user-message') { 7682 var thisChatWindow = this; 7683 this.$('.message-area').val(''); 7684 //wait for receipt 7685 this.outgoing_timers[data.message.getID()] = win.setTimeout( 7686 function(){thisChatWindow.checkMessageReceived(data.message)}, 7687 this.messenger.timers.check_failed_message_delay 7688 ); 7689 } 7690 }catch(e){} 7691 }, 7692 handleSentMessageReceipt: function(data){ 7693 var message = data.message, 7694 msg_id = message.getID(), 7695 row = this.$('.content').find('.message[data-id="'+msg_id+'"]'); 7696 this._receipts[ msg_id ] = true; 7697 7698 this.markDelivered(msg_id); 7699 this.handleMessageDelivered(message); 7700 row.attr('data-received',data.receipt_stamp); 7701 7702 }, 7703 handleMessageDelivered: function(msg){ 7704 var msg_id = msg.getID(); 7705 7706 this.removeOutgoingMessage(msg_id); 7707 }, 7708 checkMessageReceived: function(msg){ 7709 var thisChatWindow = this, 7710 msg_id = msg.getID(), 7711 been_received = this.$('.message[data-id="'+msg_id+'"]').find('.delivery').hasClass('sprite-delivered'); 7712 receipt_received = this._receipts[msg_id]; 7713 7714 if (been_received || receipt_received) { 7715 this.handleMessageDelivered(msg); 7716 this.markDelivered(msg_id); 7717 7718 } 7719 else { 7720 this.incrementOutgoingMessage(msg_id); 7721 7722 if (this.outgoing_messages[msg_id] > this.messenger.specs.delivery_attempts) { 7723 //stop trying to send it. 7724 this.handleMessageFailed(msg); 7725 } else { 7726 //try to resend it 7727 var msngr = this.messenger, 7728 xid = msngr.makeXID(this.handle), 7729 event_data = { 7730 recipient: xid, 7731 recipient_handle: this.handle, 7732 message: msg, 7733 body_text: msg.getBody(), 7734 chat_type: 'user-message', 7735 is_page: msngr.isPaging(this.handle) 7736 }; 7737
7738 msngr.win.con.send(msg,function(){ thisChatWindow.messenger.triggerMessageReceived(eventdata) }); 7739 try { 7740 this.outgoing_timers[msg_id] = window.setTimeout( 7741 function(){thisChatWindow.checkMessageReceived(msg)}, 7742 this.messenger.timers.check_failed_message_delay 7743 ); 7744 } catch(e) {} 7745 } 7746 } 7747 }, 7748 enterChat: function(){ 7749 try { 7750 this.scrollChatWindow(); 7751 //let the other user know you have entered the chat 7752 this.setChatState('active'); 7753 this.messenger.trigger('enter_chat',{ 7754 handle: this.handle 7755 }); 7756 } 7757 catch(e){} 7758 }, 7759 handleMessengerClose: function(data){ 7760 if (!this.messenger.stealth) { 7761 this.messenger.sendSystemMessage('exit_chat',this.handle); 7762 this.win.close(); 7763 } else { 7764 7765 if ( 7766 data.adopt == this.handle 7767 && data.messenger == this.messenger 7768 ) { 7769 //allow chat to listen to new messenger 7770 this.win.chat_is_loaded = false; 7771 //add CD to win 7772 this.win.CD = CD; 7773 //recreate the messenger from template 7774 jQuery(this.win.document.body).append(jQuery('<iframe class="messenger" src="/messenger?no_perf=1&messenger_version=15&imc_mode=stealth&conversation=' + this.handle + '&conversations=' + this.messenger.orphans + '" />')); 7775 } 7776 7777 } 7778 }, 7779 handleChatExit: function(data){ 7780 this.messenger.handleTheyExitChat(data.sender); 7781 }, 7782 handleChatEnter: function(data){ 7783 this.stopWaiting(data.sender); 7784 this.messenger.handleTheyEnterChat(data.sender); 7785 7786 }, 7787 handleWelcome: function(data){ 7788 this.stopWaiting(data.sender); 7789 7790 this.messenger.displaySystemMessage(this.handle, 'welcome'); 7791 7792 this.enableButtons(); 7793 }, 7794 handleWaiting: function(data){ 7795 if (!this.response_timer) { 7796 this.messenger.displaySystemMessage(this.handle, 'waiting'); 7797 this.startWaiting(); 7798 } 7799 }, 7800 startWaiting: function(){ 7801 var thisChatWindow = this; 7802 //if there is already a timer clear it out and nullify it 7803 if ( 7804 this.response_timer 7805 && this.messenger.response_timers[this.handle] 7806 ) { 7807 return true; 7808 this.stopWaiting(); 7809 //window.clearTimeout(this.response_timer); 7810 //this.response_timer = null; 7811 } 7812 7813 //start waiting 7814 this.messenger.startWaitingForResponse(this.handle); 7815 try { 7816 this.response_timer = window.setTimeout(function(){thisChatWindow.noResponse()}, this.messenger.specs.incoming_message_expire); 7817 } catch(e) {} 7818 return true; 7819 7820 }, 7821 stopWaiting: function(){ 7822 //TODO: This can be improved greatly with the task scheduler and a receipt manager 7823 //stop waiting 7824 try{ 7825 window.clearTimeout(this.response_timer); 7826 this.response_timer = null; 7827 this.messenger.stopWaitingForResponse(this.handle); 7828 } 7829 catch(e){ 7830 } 7831 7832 }, 7833 noResponse: function(){ 7834 this.stopWaiting(); 7835 this.messenger.displaySystemMessage(this.handle, 'timeout'); 7836 }, 7837 handleNotAvailable: function(data){ 7838 switch(data.reason){ 7839 case 'autoreply': 7840 this.messenger.displaySystemMessage(this.handle,'ignore_autoreply',data.system_message.displayBody); 7841 break; 7842 case 'timeout': 7843 this.messenger.displaySystemMessage(this.handle,'ignore'); 7844 break; 7845 case 'decline': 7846 this.messenger.displaySystemMessage(this.handle,'decline'); 7847 break; 7848 7849 default: 7850 this.messenger.displaySystemMessage(this.handle, 'ignore'); 7851 7852 } 7853 }, 7854 handleInviteActionClick: function(e){ 7855 return this.chatviewer.sendFriendInvite(); 7856 }, 7857 handleNetworkInviteSent: function(data){ 7858 window.invite_id = data.list[0].inviteid; 7859 this.messenger.displaySystemMessage(this.handle, 'request_sent'); 7860 7861 this.messenger.sendSystemMessage('invite', this.handle); 7862 7863 this.$('.invite_btn').text(this.messenger.lang.inviting); 7864 this.$('[data-click="handleInviteActionClick"]').addClass('disabled'); 7865 this.interactions_dropdown.removeClass('open'); 7866 7867 }, 7868 handleNetworkInviteFailure: function(data){ 7869 this.messenger.displaySystemMessage(this.handle, 'request_failed'); 7870 this.$('[data-click="handleInviteActionClick"]').addClass('disabled'); 7871 this.interactions_dropdown.removeClass('open'); 7872 }, 7873 handleNetworkInviteReceived: function(data){ 7874 /*TODO make this generate a proper chatRow for the invite message*/ 7875 var dt = new Date(), 7876 messenger = this.messenger, 7877 message = data.system_message, 7878 messageCode = messenger.createChatRow({ 7879 message_their_handle: this.handle, 7880 message_my_handle: messenger.member.get('handle'), 7881 message_text: jQuery.trim(message.displayBody), 7882 message_time: messenger.getFormattedTime(dt), 7883 message_stamp: messenger.getTimeStamp(dt), 7884 message_type: 'system-message', 7885 message_htmlenc: false, 7886 message_is_from: 'him', 7887 message_is_from_text: this.handle , 7888 message_id: data.message.getID() 7889 }); 7890 7891 this.addChatRow(messageCode); 7892 }, 7893 handleNetworkInviteAccepted: function(data){//This is them accepting the invite from me 7894 /*display system message*/ 7895 this.displaySystemMessage('acceptinvite'); 7896 this.displaySystemMessage('now_friends'); 7897 }, 7898 handleAcceptNetworkInvite: function(data){//This is me accepting the invite from them 7899 /*display system message*/ 7900 this.displaySystemMessage('now_friends'); 7901 7902 this.$('button.network_accept').text('Accepted').addClass('disabled'); 7903 this.$('button.network_decline').addClass('disabled'); 7904 }, 7905 handleWebcamInviteAccepted: function(data){ 7906 7907 }, 7908 handleAcceptWebcamInvite: function(e,data){ 7909 7910 }, 7911 handleDeclineWebcamInvite: function(data){ 7912 // remove buttons 7913 }, 7914 handleBroadcastStarted: function(data){ 7915 this.chatviewer.model.set({ 7916 is_broadcasting: 1, 7917 stream_id: data.stream_id, 7918 stream_url: data.stream_url 7919 }); 7920 }, 7921 handleBroadcastStopped: function(data){ 7922 this.chatviewer.model.set({ 7923 is_broadcasting: 0, 7924 stream_id: null, 7925 stream_url: null 7926 }); 7927 }, 7928 acceptWebCamInvite: function(e,data){ 7929 var button = jQuery(e.currentTarget); 7930 if (button.hasClass('disabled')) { return false } 7931 // send msg: [accept_webcam] 7932 this.displaySystemMessage('accept_webcam'); 7933 this.messenger.sendSystemMessage('webcam_accept',this.handle); 7934 // launch viewer window 7935 7936 this.chatviewer.launchVideo(e,data); 7937 7938 // button text -> accepted 7939 button.addClass('disabled'); 7940 button.siblings().addClass('disabled'); 7941 button.text(this.messenger.lang.buttons.accepted); 7942 }, 7943 declineWebCamInvite: function (e,data) { 7944 var button = jQuery(e.currentTarget); 7945 if (button.hasClass('disabled')) { return false } 7946 // remove the row asking to accept. 7947 button.parent().remove(); 7948 //display message 7949 this.displaySystemMessage('decline_webcam'); 7950 //tell them 7951 app.msngr.sendSystemMessage('webcam_decline',this.handle); 7952 }, 7953 handleFlirted: function(data){ 7954 this.$('.flirt_btn').text(this.messenger.lang.interactions.flirted.flirt); 7955 }, 7956 handleHotlisted: function(data){ 7957 this.$('.hotlist_btn').text(this.messenger.lang.interactions.hotlisted); 7958 }, 7959 handleDeclined: function(){ 7960 /*remove this row from the interface*/ 7961 //this.messenger.decline_incoming(this.handle); 7962 7963 /*close window*/ 7964 this.win.close(); 7965 }, 7966 handleBanMemberClick: function(e,data){ 7967 this.chatviewer.handleBanMemberClick(e) 7968 }, 7969 handleReportAbuseClick: function(e,elem) { 7970 var url = CD.utils.buildURL(this.messenger.urls.report_abuse,{ 7971 abuse_pwsid: this.chatviewer.model.get('pwsid'), 7972 abuse_handle: this.handle, 7973 origin: 'imc' 7974 }); 7975 7976 window.openWindow(url,'reportabuse','scrollbars=1,resizable=1,width=1000,height=700'); 7977 7978 },/*end function handleReportAbuseClick*/ 7979 handleWindowUnload: function(){ 7980 7981 this.stopListening(); 7982 this.setChatState('gone'); 7983 }, 7984 addChatRow: function(row){ 7985 var mode = (row.$el.hasClass('me')) ? 'me' : 'him', 7986 row_id = row.$el.attr('data-id'), 7987 row_exists = this.$('.message[data-id="'+ row_id +'"]'), 7988 composing_line = this.$('.message[data-type="composing"]'), 7989 sending_line = this.$('.message[data-type="sending"]'); 7990 7991 if (!row_exists.length) { 7992 row.chatwindow = this; 7993 // Remove the sending line if any exists 7994 if (sending_line.length) { 7995 sending_line.remove(); 7996 } 7997
7998 // Remove composing line if message is from him and one exists 7999 if (composing_line.length) { 8000 composing_line.before(row.el.outerHTML); 8001 if (mode == 'him') { 8002 composing_line.remove(); 8003 } 8004 } 8005 else { 8006 this.$('.content').append(row.el.outerHTML); 8007 } 8008 8009 this.trigger('chatrow_added',row); 8010 this.trigger('chatrow_added:' + this.handle,row); 8011 } 8012 8013 8014 }, 8015 addChatTip: function(tip){ 8016 this.$('.content').append(tip); 8017 this.scrollChatWindow(); 8018 }, 8019 addVGift: function(vgift){ 8020 this.$('.content').append(vgift); 8021 this.scrollChatWindow(); 8022 }, 8023 addChatPhoto: function(photo){ 8024 this.$('.content').append(photo); 8025 this.scrollChatWindow(); 8026 }, 8027 addChatCamInvite: function(cam_invite){ 8028 this.$('.content').append(cam_invite); 8029 this.scrollChatWindow(); 8030 }, 8031 addChatNetworkInvite: function(invite){ 8032 this.$('.content').append(invite); 8033 this.scrollChatWindow(); 8034 }, 8035 launchChatPhoto: function(e,data){ 8036 window.openWindow($(e.currentTarget).attr("data-photo"),'photowin','width=800,height=600'); 8037 this.scrollChatWindow(); 8038 }, 8039 handleChatRowAdded: function(row){ 8040 this.scrollChatWindow(); 8041 }, 8042 handleViewWindowOpened: function(data){ 8043 var model = data.model || this.messenger.findExistingModel(data.handle,true); 8044 if (model) { model.set({am_viewing:true}) } 8045 }, 8046 handleViewWindowClosed: function(data){ 8047 this.messenger.findExistingModel(data.handle).set({am_viewing:false}) 8048 }, 8049 scrollChatWindow: function(){ 8050 var container = this.$('.content').get(0); 8051 if (container) { container.scrollTop = container.scrollHeight } 8052 }, 8053 displaySystemMessage: function(msgCode){ 8054 return this.messenger.displaySystemMessage(this.handle, msgCode); 8055 }, 8056 displayPartnerChatState: function(){ 8057 var text = '', 8058 handle = this.handle, 8059 win = this.messenger.getChatWindow(handle), 8060 windowTitle = handle + " - Chatting"; 8061 8062 switch(this.messenger.getPartnerChatState(handle)) { 8063 8064 case 'active': // Active 8065 text = "Your friend is paying attention to the conversation."; 8066 break; 8067 8068 8069 case 'composing': // Composing 8070 this.displaySystemMessage('composing'); 8071 windowTitle = handle + " (Typing...)"; 8072 8073 break; 8074 8075 8076 case 'paused': // Paused 8077 text = "Your friend stopped writing a message."; 8078 8079 break; 8080 8081 8082 case 'inactive': // Inactive 8083 // Remove the composing line if any exists 8084 var composing_line = this.$('.content .message[data-type="composing"]'); 8085 if (composing_line.length) { 8086 composing_line.remove(); 8087 } 8088 8089 break; 8090 8091 8092 case 'gone': // Gone 8093 text = "Your friend closed the chat."; 8094 8095 break; 8096 } 8097 if (win) { 8098 if (win.contentWindow) { windowTitle = null;} 8099 if (windowTitle) { 8100 win.document.title = windowTitle; 8101 } 8102 } 8103 8104 }, 8105 addStandardLevelChecks: function () { 8106 var thisMessenger = this.messenger; 8107 VIce.can.check("send_page", function (check,info) { 8108 var deferred_obj = $.Deferred(); 8109 thisMessenger.member_collection.getIMCCanContact(info.to_pwsid).then(function (json) { 8110 if (json.can_contact) { 8111 deferred_obj.resolve(true); 8112 } else { 8113 deferred_obj.resolve(false); 8114 } 8115 }, function() { 8116 deferred_obj.resolve(false); 8117 }); 8118 8119 return deferred_obj; 8120 }); 8121 }, 8122})); 8123 8124 VIce.setView("VideoViewer",VIce.BaseView.extend({ 8125 name: 'Viewer', 8126 tmpl: 'viewer_main', 8127 viceInit: function(){ 8128 var thisViewer = this, 8129 model = VIce.model('Member'), 8130 urlvars = CD.utils.parseURLVars(window.location.search); 8131 8132 if (!urlvars.chat) { urlvars.chat = "enabled" } 8133 8134 window.app = this; 8135 8136 this.msngr = CD.utils.getMessenger(); 8137 this.flashvars = FF_videoviewer.CONFIG('flashvars'); 8138 this.flashparams = FF_videoviewer.CONFIG('flashparams'); 8139 this.flashattr = FF_videoviewer.CONFIG('flashattr'); 8140 this.lang = jQuery.extend({},FF_messenger.CONFIG('lang'),FF_videoviewer.CONFIG('lang')); 8141 this.urls = CD.CONFIG('urls'); 8142 8143 if (CD.ABTEST('SOC3224Upsell')) { 8144 this.flashvars.lvsModels = this.getUpsellModels(); 8145 } 8146 8147 this.model = new model(); 8148 8149 this.model.fetch({ 8150 url: CD.utils.buildURL("/p/imc/imc_action.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
81505sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_view_videoviewer-4",{ 8151 "action": "get_profile", 8152 "extend_rating": 1, 8153 "handle": "", 8154 "json": 1, 8155 "site": "bdsm" 8156 }), 8157 success: function(model){ 8158 var pdata = model.get('passport'); 8159 model.set(pdata) 8160 model.unset('passport'); 8161 8162 thisViewer.handle = model.get('handle'); 8163 thisViewer.ratings = new CD.utils.MemberRatings(); 8164 thisViewer.render(model); 8165 thisViewer.deployVideo(); 8166 if ( urlvars.chat == "auto" ) { thisViewer.launchMessenger(); } 8167 8168 window.onresize = _.throttle(function(){thisViewer.resize()},100); 8169 } 8170 }); 8171 8172 }, 8173 headerTemplateJSON: function(d){ 8174 var lang = this.lang, 8175 urls = this.urls; 8176 8177 jQuery.extend(d,{ 8178 rowtype: 'passport', 8179 chat_header_row: true, 8180 video_header_row: true, 8181 img: d.photo, 8182 can_view_their_broadcast: true, //this.messenger.canViewTheirBroadcast(d.handle), 8183 profile_url: this.chatter.getProfileUrl(d.handle), 8184 location: stdMapping.mapStdLocation(d.country,d.state,d.city,VIce.logged_in_member.get('country')), 8185 gender: stdMapping.mapStdGender(d.gender,d.age,d.age2), 8186 is_passport: true, 8187 passport_adjustable: true, 8188 dist: d.distance, 8189 num_photos: d.photo_count, 8190 num_videos: d.video_count, 8191 online: (d.app_type == 'mobile'), 8192 is_chatting: false, 8193 photos_text: (d.photo_count == 1) ? lang.photo : lang.photos , 8194 photo_divider: (d.video_count > 0 || d.friend_count > 0) ? "|" : "" , 8195 photo_manager_url: urls.photo_manager + d.pwsid, 8196 videos_text: (d.video_count == 1) ? lang.video : lang.videos , 8197 video_divider: (d.friend_count > 0) ? "|" : "" 8198 }); 8199 8200 return d; 8201 }, 8202 templateJSON: function(d){ 8203 return jQuery.extend(d,{ 8204 location: stdMapping.mapStdLocation(d.country,d.state,d.city,VIce.logged_in_member.get('country')) 8205 }); 8206 }, 8207 render: function(model){ 8208 if (!model) { model = this.model; } 8209 8210 this.chatter = VIce.view('MessengerRow'); 8211 this.chatter.model = model; 8212 8213 var thisViewer = this, 8214 mdata = model.templateJSON(model.toJSON()), 8215 headertxt = this.chatter.render( this.headerTemplateJSON( mdata ) ).el.outerHTML, 8216 ratingSlider; 8217 8218 this.$el.html(VIce.template(this.tmpl,{ 8219 chatheader: headertxt 8220 })); 8221 8222 ratingSlider = this.$('#rating'); 8223 8224 //cache references to DOM elements 8225 this.video_controls = { 8226 launch_chat_button: this.$('.open-chat'), 8227 exit_chat_button: this.$('.exit-chat'), 8228 container: this.$(".video-controls"), 8229 vote: this.$('#vote'), 8230 volume: this.$('#volume'), 8231 play: this.$('#play-pause'), 8232 mute: this.$('#mute'), 8233 reconnect: this.$('#reconnect') 8234 } 8235 8236 this.video_container = this.$('.video-container'); 8237 this.chat_container = this.$('.chatwindow'); 8238 8239 this.video_container.on({ 8240 mouseover: function() { 8241 var video = thisViewer.video[0]; 8242 if(video.fadeIn) { 8243 video.setFullScreenButtonFormat({alpha:0.5}); 8244 } 8245 }, 8246 mouseout: function() { 8247 var video = thisViewer.video[0]; 8248 if(video.fadeOut) { 8249 video.fadeOut(0); 8250 } 8251 } 8252 }); 8253 8254 this.video_controls.play.on('click',function(e){ thisViewer.handlePlayButtonClick(e) }); 8255 this.video_controls.reconnect.on('click',function(e){ thisViewer.reloadVideo() }); 8256 this.video_controls.mute.on('click',function(e){ thisViewer.handleMuteButtonClick(e) }); 8257 this.video_controls.volume.on('click','.bar', function(e) { thisViewer.handleVolumeClick(e) }); 8258 8259 if ( _.isFunction(ratingSlider.slider) ) { 8260 ratingSlider.slider({ 8261 slide: videorating, 8262 change: videoratingSend, 8263 value: 25, 8264 max: 50, 8265 step: 5 8266 }); 8267 } 8268 8269 // Update vote text for the video 8270 function videorating(event, ui) { 8271 thisViewer.video_controls.vote.text((ui.value / 10).toFixed(1).toString()); 8272 }; 8273 8274 // Send out a vote for the video 8275 function videoratingSend(event, ui) { 8276 thisViewer.ratings.setRating(thisViewer.flashvars.streamWanted, (ui.value / 10).toFixed(1)); 8277 videorating(event, ui); 8278 }; 8279
8280 8281 }, 8282 /*deployVideo: function(restart){ 8283 var height = jQuery(window).height() - ( this.$('.passport-container').height() + this.$('.video-controls').height() ) ; 8284 8285 if (this.has_chat) { height -= this.chat_container.height() } 8286 swfobject.embedSWF(this.flashvars.swfFile,"lvp","100%",height,"10.0.0",false,this.flashvars,this.flashparams,this.flashattr); 8287 this.video = this.$('#lvp'); 8288 if (restart) { this.videoPlayPause(false); } 8289 if (this.has_chat) { 8290 this.$el.addClass('chatting'); 8291 this.video.removeAttr('style'); 8292 } 8293 }, 8294 reloadVideo: function(){ 8295 this.videoPlayPause(true); 8296 this.video.replaceWith('<div id="lvp" width="0" height="0"/>'); 8297 this.deployVideo(true); 8298 }, 8299 launchMessenger: function(){ 8300 var newwinleft = (window.screenX < window.screen.width / 2) ? window.screen.width : 0 ; 8301 this.deployMessenger(); 8302 CD.utils.launchMessenger({ 8303 handle: this.handle, 8304 win: window, 8305 left: newwinleft 8306 }); 8307 }, 8308 deployMessenger: function(){ 8309 window.resizeBy(0,300); 8310 this.$el.addClass('chatting'); 8311 this.video.removeAttr('style'); 8312 this.video_controls.container.css({ 8313 'bottom':'315px', 8314 'height':'30px' 8315 }); 8316 this.video_controls.launch_chat_button.addClass('hide'); 8317 this.video_controls.exit_chat_button.removeClass('hide'); 8318 this.has_chat = true; 8319 }, 8320 closeMessenger: function(){ 8321 var msngr = CD.utils.getMessenger(), 8322 handle = this.handle; 8323 if (msngr) { 8324 msngr.handleWindowUnload(handle); 8325 msngr.trigger('chatwindow_closed',{handle: handle, win: this.chatwin}) 8326 } 8327 this.has_chat = false; 8328 jQuery(this.chat_container).empty(); 8329 8330 this.video_controls.exit_chat_button.addClass('hide'); 8331 this.video_controls.launch_chat_button.removeClass('hide'); 8332 window.resizeBy(0,-300); 8333 this.$el.removeClass('chatting'); 8334 this.video_controls.container.removeAttr('style'); 8335 },*/ 8336 resize: function(){ 8337 var win = jQuery(window), 8338 wheight = win.height(), 8339 width = win.width(), 8340 lndscp = true, 8341 ppc = this.$('.passport-container'), 8342 is_sh = ppc.hasClass('short'), 8343 height = wheight - (125 + this.$('.video-controls').height()), 8344 sh = false, 8345 th = true; 8346 8347 if (this.has_chat) { wheight -= this.chat_container.height() } 8348 lndscp = width >= wheight 8349 if (this.has_chat) { height -= this.chat_container.height() } 8350 sh = !is_sh && lndscp ; 8351 th = is_sh && !lndscp ; 8352 if (is_sh && lndscp) { height += 75; } 8353 8354 if (sh) { 8355 ppc.addClass('short'); 8356 } 8357 else if (th) { 8358 ppc.removeClass('short'); 8359 } 8360 8361 this.video.height(height); 8362 return true; 8363 }, 8364 handlePlayButtonClick: function(e) { 8365 this.videoPlayPause(this.video_controls.play.find('div').hasClass('sprite-pause')); 8366 }, 8367 videoPlayPause: function(pause) { 8368 var video = this.video[0], 8369 controls = this.video_controls, 8370 lang = this.lang, 8371 button = controls.play, 8372 icon = button.find('div'), 8373 tttext = pause ? lang.start : lang.pause; 8374 8375 button.attr('data-tooltip',tttext); 8376 8377 if (pause) { 8378 icon.removeClass('sprite-pause').addClass('sprite-play'); 8379 video.stopWatching(); 8380 } else { 8381 icon.removeClass('sprite-play').addClass('sprite-pause'); 8382 video.startWatching(); 8383 } 8384 8385 button.blur(); 8386 }, 8387 handleMuteButtonClick: function(e){ 8388 var controls = this.video_controls, 8389 icon = controls.mute.find('div'), 8390 muteIco = 'sprite-mute2', 8391 newvol = icon.hasClass(muteIco) ? 60 : 0 ; 8392 8393 if (!newvol) { controls.volume.find('.bar').removeClass('x') } 8394 this.videoVolume(newvol); 8395 $(this).blur(); 8396 }, 8397 videoVolume: function (vol) { 8398 var controls = this.video_controls, 8399 lang = this.lang, 8400 icon = controls.mute.find('div'), 8401 muteIco = 'sprite-mute2', 8402 volIco = 'sprite-volume2', 8403 unmute = vol > 0, 8404 tttext = unmute ? lang.mute : lang.unmute ; 8405 8406 if ( vol > 0 && unmute ) { 8407 icon.removeClass(muteIco).addClass(volIco); 8408 } else if (vol < 1 && !unmute ) { 8409 icon.removeClass(volIco).addClass(muteIco); 8410 } 8411 controls.mute.attr('data-tooltip',tttext); 8412 this.video[0].volumeChange(vol); 8413 }, 8414 handleVolumeClick: function(e) { 8415 var elem = jQuery(e.currentTarget).addClass('x'), 8416 vol = parseInt(elem.attr('data-vol'),10); 8417 8418 elem.siblings().each( function(){ 8419 var e = jQuery(this), 8420 thisVol = parseInt(e.attr('data-vol'),10); 8421 8422 e.toggleClass('x', (thisVol <= vol)) 8423 }); 8424 this.videoVolume(vol); 8425 }, 8426 handleAbuseLinkClick: function(e){ 8427 var row = jQuery(e.currentTarget).closest('.messenger_row'), 8428 url = CD.utils.buildURL(this.urls.video_viewer,{ 8429 userid: row.attr('data-pwsid'), 8430 view_handle: row.attr('data-handle') 8431 }); 8432 8433 return window.openWindow(url, "reportAbuse","scrollbars=no,resizable=yes,width=600,height=700") != null; 8434 }, 8435 //flashInterface: function(doThis) { 8436 //var video; 8437 8438 //video = (navigator.appName.indexOf("Microsoft") != -1) ? window[videoApp.defaults.video] : document[videoApp.defaults.video]; 8439 8440 //if (typeof doThis.adjvol !== 'undefined') { 8441 //video.volumeChange(doThis.adjvol); 8442 //} 8443 //if (typeof doThis.fullscreen !== 'undefined') { 8444 //// video.fullscreen(doThis.fullscreen); 8445 //} 8446 //if (typeof doThis.startStop !== 'undefined') { 8447 //if (doThis.startStop ) { 8448 //video.stopWatching(); 8449 //} else { 8450 //video.startWatching(); 8451 //} 8452 //} 8453 //}, 8454 //some of these may go 8455 getUpsellModels: function(num) { 8456 if (!num) { num = 3 } 8457 var models = [], 8458 rand; 8459 8460 if(window.opener && window.opener.opener) { 8461 this.root_window = window.opener.opener; 8462 } 8463 lvswon = this.sexFilter(); 8464 if( 8465 lvswon 8466 && lvswon.length >= num 8467 ) { 8468 while(models.length < num){ 8469 rand = Math.floor(Math.random() * lvswon.length); 8470 if (models.indexOf(lvswon[rand]) == -1) { models.push(lvswon[rand])} 8471 } 8472 } else { 8473 console.error('not enough models!'); 8474 } 8475 return JSON.stringify({json: models}); 8476 }, 8477 redirectLvsModel: function(stream) { 8478 var urls = this.urls, 8479 link = (stream) ? CD.utils.buildURL(urls.lvsModels,{stream: stream}) : urls.lvsTop ; 8480 8481 if(this.root_window && !this.root_window.closed) { 8482 this.root_window.location = link; 8483 } else { 8484 window.openWindow(link,'lvswindow'); 8485 } 8486 this.closeIM(); 8487 }, 8488 sexFilter: function() { 8489 var lfp = VIce.logged_in_member.get('CUPID').looking_for_person || VIce.logged_in_member.get('looking_for_person') || '2', 8490 res = []; 8491 8492 if (lfp.search(/[2345]/) >= 0 ){ res = res.concat(lvswon.filter(function(v) { return v.o == 'F'})) } 8493 if (lfp.search(/[16]/) >= 0 ){ res = res.concat(lvswon.filter(function(v) { return v.o == 'M'})) } 8494 if (lfp.search(/[7]/) >= 0 ){ res = res.concat(lvswon.filter(function(v) { return v.o == 'TS'})) } 8495 8496 return res; 8497 }, 8498 closeIM: function() { 8499 if(window.opener) { 8500 window.opener.close(); 8501 } 8502 window.close(); 8503 } 8504 8505 8506})); 8507 8508 var lvswon; 8509if (!self.chatwindowunload) { 8510 self.chatwindowunload = function(view){ 8511 var handle = view.handle, 8512 p = VIce.currentPage(), 8513 msngr = view.msngr; 8514 8515 delete p.vars['ChatViewer_' + handle]; 8516 delete p.vars['ChatWindow_' + handle]; 8517 8518 view.stopListening(msngr); 8519 view.chat.stopListening(msngr); 8520 8521 view.off(); 8522 view.chat.off(); 8523 8524 view.removeWindowEvent('beforeunload',triggerWindowUnload); 8525 if (view.has_video) {view.closeVideo();} 8526 if (msngr) { 8527 msngr.handleWindowUnload(handle); 8528 msngr.trigger('chatwindow_closed',{handle: handle, win: view.chatwin}) 8529 } 8530 } 8531} 8532function triggerWindowUnload(){ chatwindowunload(window.app) } 8533VIce.setView('ChatViewer',VIce.BaseView.extend({ 8534 name: 'ChatViewer', 8535 tmpl: 'viewer_main', 8536 viceInit: function(){ 8537 if (this.el[0].ownerDocument.defaultView != window) { return false } 8538 if (!VIce.logged_in_member && self.setLoggedInMember) { setLoggedInMember() } 8539 var thisViewer = this, 8540 data = (this.options.parent_view && (this.options.parent_view.win || this.options.parent_view.messenger)) ? this.options.parent_view : {}, 8541 model = VIce.model('Member'), 8542 page = VIce.currentPage(), 8543 winname = '', 8544 urlvars = {}, 8545 launchVideo = false, 8546 launchChat = true, 8547 thisconfig = function(){}; 8548 8549 this.win = data.win || window; 8550 winname = this.win.name; 8551 urlvars = CD.utils.parseURLVars(this.win.location.search); 8552 launchVideo = !!urlvars.streamid && !urlvars.sendim;
8553 launchChat = !!urlvars.conversation || !launchVideo; 8554 thisconfig = this.win.FF_videoviewer.CONFIG; 8555 8556 this.handle = data.handle || urlvars.username || urlvars.user_handle;/*TODO - standardize this*/ 8557 this.pwsid = urlvars.user_pwsid; 8558 8559 this.win.app = this; 8560 8561 if (!winname) { winname = 'ffchat_' + this.handle; } 8562 if (window.get && !window.get(winname)) { window.register(winname,this.win); } 8563 8564 if (!data.messenger && window.opener && window.opener.CD && window.opener.CD.messenger) { data.messenger = window.opener.CD.messenger } 8565 8566 this.msngr = data.messenger || CD.utils.getMessenger(); 8567 if ( 8568 this.msngr 8569 && this.msngr.stealth 8570 && !launchChat 8571 && this.msngr.win != this.win.parent 8572 ) { 8573 delete this.msngr; 8574 } 8575 this.flashvars = thisconfig('flashvars'); 8576 this.flashparams = thisconfig('flashparams'); 8577 this.flashattr = thisconfig('flashattr'); 8578 this.lang = jQuery.extend({},FF_messenger.CONFIG('lang'),thisconfig('lang')); 8579 this.urls = CD.CONFIG('urls'); 8580 this.passport_container = this.$('.passport-container'); 8581 this.default_hide_chat = true; 8582 8583 if (CD.ABTEST('SOC3224Upsell')) { 8584 this.flashvars.lvsModels = this.getUpsellModels(); 8585 } 8586 8587 if (data.model) { 8588 this.model = data.model; 8589 fetchSuccess(this.model); 8590 } 8591 else { 8592 this.model = new model(); 8593 } 8594 8595 this.model.url = CD.utils.buildURL("/p/imc/imc_action.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=vice_view_chatviewer-5",{ 8596 "action": "get_profile", 8597 "extend_rating": 1, 8598 "handle": this.handle, 8599 "json": 1, 8600 "site": "bdsm" 8601 }); 8602 8603 if (!data.model) { 8604 this.model.fetch({ 8605 success: fetchSuccess, 8606 error: fetchError 8607 }); 8608 } 8609 8610 this.addWindowEvent('beforeunload',triggerWindowUnload); 8611 this.listenTo(this.model, 'change', this.renderHeader); 8612 8613 page.on('tip_placed', function(e,data){thisViewer.handleTipComplete(e,data)}); 8614 page.on('redirect_to', function(e,data){thisViewer.handleTipRedirect(e,data)}); 8615 page.on('GiftSelector:submitted', function(e,data){thisViewer.handleGiftSubmit(e,data)}); 8616 8617 function fetchSuccess(model){ 8618 var pdata = model.get('passport'), 8619 msngr = thisViewer.msngr, 8620 winkey = thisViewer.handle.toLowerCase(); 8621 8622 model.set(pdata) 8623 model.unset('passport'); 8624 8625 thisViewer.ratings = new CD.utils.MemberRatings(); 8626 8627 thisViewer.default_hide_chat = !!launchVideo; 8628 8629 thisViewer.render({ 8630 video: launchVideo, 8631 chat: launchChat
8632 }); 8633 8634 if ( 8635 msngr 8636 && ( 8637 !msngr.viewwindows 8638 || !msngr.viewwindows[winkey] 8639 || msngr.viewwindows[winkey].closed 8640 ) 8641 ) { 8642 msngr.trigger('viewwindow_opened',{ 8643 handle: thisViewer.handle, 8644 win: thisViewer.win, 8645 model: model 8646 }) 8647 } 8648 8649 thisViewer.win.onresize = _.throttle(function(){thisViewer.resize()},100); 8650 }//end private function fetchSuccess 8651 8652 function fetchError(data){ 8653 //console.log('There was an error fetching the data', data); 8654 }//end private function fetchError 8655 8656 }, 8657 setChatWindow: function(chatwindow_view){ 8658 this.chat = chatwindow_view; 8659 }, 8660 getUpsellModels: function(num) { 8661 if (!num) { num = 3 } 8662 var models = [], 8663 rand; 8664 8665 lvswon = this.sexFilter(); 8666 if( 8667 lvswon 8668 && lvswon.length >= num 8669 ) { 8670 while(models.length < num){ 8671 rand = Math.floor(Math.random() * lvswon.length); 8672 if (models.indexOf(lvswon[rand]) == -1) { models.push(lvswon[rand])} 8673 } 8674 } else { 8675 console.error('not enough models!'); 8676 } 8677 return JSON.stringify({json: models}); 8678 }, 8679 sexFilter: function() { 8680 var lim = VIce.logged_in_member, 8681 lfp = lim.get('CUPID').looking_for_person || lim.get('looking_for_person') || '2', 8682 res = []; 8683 8684 if (lvswon) { 8685 if (lfp.search(/[2345]/) >= 0 ){ res = res.concat(lvswon.filter(function(v) { return v.o == 'F'})) } 8686 else if (lfp.search(/[16]/) >= 0 ){ res = res.concat(lvswon.filter(function(v) { return v.o == 'M'})) } 8687 else if (lfp.search(/[7]/) >= 0 ){ res = res.concat(lvswon.filter(function(v) { return v.o == 'TS'})) } 8688 } 8689 8690 return res; 8691 }, 8692 render: function(opts){ 8693 if (!opts) { opts = {} } 8694 var model = (opts.model) ? opts.model : this.model ; 8695 8696 this.chatter = VIce.view('MessengerRow',{ 8697 model: model, 8698 messenger: this.msngr 8699 }); 8700 8701 if (model.get('hotlisted') && !model.get('is_hotlisted')) { model.set('is_hotlisted', model.get('hotlisted')) } 8702 8703 this.listenTo(this.model, "change:hotlist_state", this.setHotlistState); 8704 this.listenTo(this.model, "change:flirt_state", this.setFlirtState); 8705 this.listenTo(this.model, "change:can_friend", this.updateCanFriend); 8706 this.listenTo(this.chatter, "becoming_a_fan", this.resizeForLightbox); 8707 8708 var thisViewer = this, 8709 mdata = model.templateJSON(model.toJSON()), 8710 headertxt = this.chatter.render( this.headerTemplateJSON( mdata ) ).el.outerHTML, 8711 ratingSlider; 8712 8713 this.$el.html(VIce.template(this.tmpl,{ 8714 chatheader: headertxt, 8715 handle: this.handle 8716 })); 8717 8718 this.passport_container = this.$('.passport-container'); 8719 8720 ratingSlider = this.$('#rating'); 8721 8722 VIce.render_with_hb = true; 8723 //cache references to DOM elements 8724 this.video_controls = { 8725 send_tip_button: this.$('.send-tip'), 8726 send_vgift_button: this.$('.send-vgift'), 8727 container: this.$(".video-controls"), 8728 vote: this.$('#vote'), 8729 volume: this.$('#volume'), 8730 play: this.$('#play-pause'), 8731 mute: this.$('#mute'), 8732 reconnect: this.$('#reconnect') 8733 } 8734 8735 this.chat_controls = { 8736 open_chat: this.$('.open-chat'), 8737 close_chat: this.$('.exit-chat') 8738 } 8739 8740 this.video_container = this.$('.video-container'); 8741 this.chat_container = this.$('.chatwindow'); 8742 8743 this.video_container.on({ 8744 mouseover: function() { 8745 var video = thisViewer.video[0]; 8746 if(video.fadeIn) { 8747 video.setFullScreenButtonFormat({alpha:0.5}); 8748 } 8749 }, 8750 mouseout: function() { 8751 var video = thisViewer.video[0]; 8752 if(video.fadeOut) { 8753 video.fadeOut(0); 8754 } 8755 } 8756 }); 8757 8758 if ( _.isFunction(ratingSlider.slider) ) { 8759 ratingSlider.slider({ 8760 slide: videorating, 8761 change: videoratingSend, 8762 value: 25, 8763 max: 50, 8764 step: 5 8765 }); 8766 } 8767 8768 if (opts.video) { 8769 this.deployVideo(); 8770 } 8771 8772 if (opts.chat) { 8773 this.deployChat(); 8774 } 8775 else { 8776 this.chat_controls.open_chat.removeClass('disabled'); 8777 this.resize(); 8778 } 8779 8780 // Update vote text for the video 8781 function videorating(event, ui) { 8782 thisViewer.video_controls.vote.text((ui.value / 10).toFixed(1).toString()); 8783 }; 8784 8785 // Send out a vote for the video 8786 function videoratingSend(event, ui) { 8787 thisViewer.ratings.setRating(thisViewer.flashvars.streamWanted, (ui.value / 10).toFixed(1)); 8788 videorating(event, ui); 8789 }; 8790 8791 }, 8792 8793 setHotlistState: function () { 8794 var h = VIce.currentPage().getVar('header_hotlist_state'), 8795 c = VIce.currentPage().getVar('chat_hotlist_state'), 8796 m = this.model; 8797 8798 if ( (h || c) && m ) { 8799 if (c) { 8800 c.set_state( 8801 {'hotlist_state': m.get('hotlist_state')}, 8802 {prop: 'hotlist_state'} 8803 ); 8804 } 8805 8806 if (h) { 8807 h.set_state( 8808 {'hotlist_state': m.get('hotlist_state')}, 8809 {prop: 'hotlist_state'} 8810 ); 8811 } 8812 } 8813 }, 8814 setFlirtState: function () { 8815 var h = VIce.currentPage().getVar('flirtState'), 8816 c = VIce.currentPage().getVar('chat_flirtState'), 8817 m = this.model; 8818 if ( (h || c) && m) { 8819 if (c) { 8820 c.set_state( 8821 {'flirt_state': m.get('flirt_state')}, 8822 {prop: 'flirt_state'} 8823 ); 8824 } 8825 8826 if (h) { 8827 h.set_state( 8828 {'flirt_state': m.get('flirt_state')}, 8829 {prop: 'flirt_state'} 8830 ); 8831 } 8832 } 8833 }, 8834 updateCanFriend: function () { 8835 var h = VIce.currentPage().getVar('friendState'), 8836 c = VIce.currentPage().getVar('chat_friendState'), 8837 m = this.model; 8838 if ( (h || c) && m) { 8839 if (c) { 8840 c.set_state( 8841 {'friend_status': m.get('friend_status')}, 8842 {prop: 'friend_status'} 8843 ); 8844 } 8845 if (h) { 8846 h.set_state( 8847 {'friend_status': m.get('friend_status')}, 8848 {prop: 'friend_status'} 8849 ); 8850 } 8851 } 8852 }, 8853 handleTipComplete: function(e,data) { 8854 var m = CD.utils.getMessenger(), 8855 msg = '[tip '+ data.tip +']', 8856 msngrwin, 8857 murl; 8858 if (!m) { 8859 murl = CD.utils.buildURL('/messenger.html',{ 8860 imc_mode: 'sendmessage', 8861 recipient: data.broadcaster_handle, 8862 message: msg 8863 }) 8864 jQuery('body').find('iframe[name="sendmessage_frame"]').remove(); 8865 msngrwin = document.createElement('iframe'); 8866 msngrwin.setAttribute('name','sendmessage_frame'); 8867 jQuery('body').append(msngrwin); 8868 msngrwin.src = murl; 8869 } else { 8870 if (!m.isConnected()) { 8871 m.connect(function(){ 8872 m.sendMessage(data.broadcaster_handle,msg); 8873 }) 8874 } else { 8875 m.sendMessage(data.broadcaster_handle,msg); 8876 } 8877 8878 //console.log('Tip complete. Message sent: ' + msg); 8879 } 8880 8881 }, 8882 handleTipRedirect: function(e,data) { 8883 window.openWindow(data.url,'ffmain'); 8884 }, 8885 handleGiftSubmit: function(e,data){ 8886 var selected_gifts = (data.win) ? data.gifts : data, 8887 win = data.win || window, 8888 $elem = jQuery(win.document).find('[data-view="GiftSelector"]'), 8889 info = $elem.attr('data-template-vars').split(','), 8890 handle = info[0].split(':').pop(), 8891 inc,gift,giftname,gift_url,gift_val,gift_id; 8892 8893 for (inc in selected_gifts) { 8894 gift = selected_gifts[inc].attributes; 8895 giftname = gift.name; 8896 gift_url = gift.picture_name; 8897 gift_val = gift.price; 8898 gift_id = gift.id; 8899 8900 if ( this.msngr ) { 8901 this.msngr.sendMessage(handle,'[vgift '+ gift_id +'|'+ gift_val +'|'+ g
8901ift_url +']'); 8902 } 8903 } 8904 }, 8905 renderHeader: function(d){ 8906 if (!d) { d = this.model.templateJSON(this.model.toJSON()); } 8907 if (d.toJSON) { d = d.toJSON() } 8908 if (this.chatter) { 8909 var data = this.headerTemplateJSON( d ), 8910 html = this.chatter.render( data ).el.outerHTML; 8911 8912 this.passport_container.html(html); 8913 VIce.currentPage().parseRoles(this.$el.find("[data-role=render]").parent(),true,this); 8914 8915 this.$('.activity_container.dropdown').on('click',this.toggleActionsMenu); 8916 8917 this.setHotlistState(); 8918 this.updateCanFriend(); 8919 this.setFlirtState(); 8920 } 8921 }, 8922 toggleActionsMenu: function(e,data){ 8923 if (jQuery(e.currentTarget).hasClass('disabled')) { return false; } 8924 jQuery(this).toggleClass('open'); 8925 }, 8926 handleDataClick: function (e,data){ 8927 var button = this.$(e.currentTarget), 8928 func = button.attr("data-click"); 8929 if (button.hasClass('disabled')) { return false } 8930 if (this[func]) { this[func](e,data); } 8931 }, 8932 handleProfileLinkClick: function(e,data){ 8933 var t = VIce.$(e.currentTarget), 8934 d = { 8935 'profile-url': t.attr("data-profile-url"), 8936 'target': t.attr("data-target") 8937 }; 8938 if (this.msngr) { return this.msngr.handleProfileLinkClick(e,d) } 8939 else { 8940 window.open(d['profile-url'],d.target); 8941 } 8942 8943 }, 8944 headerTemplateJSON: function(d){ 8945 var lang = this.lang, 8946 urls = this.urls; 8947 try { 8948 jQuery.extend(d,{ 8949 rowtype: 'passport', 8950 chat_header_row: true, 8951 is_friend: (d.is_friend && d.is_friend.toString() === '1'), 8952 can_friend: (d.friend_status == 'can_friend'), 8953 can_hotlist: (d.hotlist_state == 'hotlist'), 8954 video_header_row: true, 8955 img: d.img || d.photo, 8956 can_view_their_broadcast: (this.msngr) ? this.msngr.canViewTheirBroadcast(d.handle) : !!d.stream_id, 8957 profile_url: this.chatter.getProfileUrl(d.handle), 8958 location: stdMapping.mapStdLocation(d.country,d.state,d.city,VIce.logged_in_member.get('country')), 8959 gender: stdMapping.mapStdGender(d.gender,d.age,d.age2), 8960 is_passport: true, 8961 passport_adjustable: true, 8962 dist: d.distance, 8963 num_photos: d.photo_count, 8964 num_videos: d.video_count, 8965 online: (d.app_type == 'mobile'), 8966 webcam_on: d.is_broadcasting, 8967 has_video: this.has_video, 8968 view_button_text: lang.buttons.view_webcam, 8969 close_button_text: lang.buttons.close_webcam, 8970 is_chatting: false, 8971 photos_text: (d.photo_count == 1) ? lang.photo : lang.photos , 8972 photo_divider: (d.video_count > 0 || d.friend_count > 0) ? "|" : "" , 8973 photo_manager_url: urls.photo_manager + d.pwsid, 8974 videos_text: (d.video_count == 1) ? lang.video : lang.videos , 8975 video_divider: (d.friend_count > 0) ? "|" : "" 8976 }); 8977 8978 } 8979 catch(e){ 8980 //console.log(e); 8981 } 8982 8983 return d; 8984 }, 8985 templateJSON: function(d){ 8986 return jQuery.extend(d,{ 8987 location: stdMapping.mapStdLocation(d.country,d.state,d.city,VIce.logged_in_member.get('country')) 8988 }); 8989 }, 8990 setMessenger: function(msngr){ 8991 if (!msngr) { return false } 8992 if ( 8993 this.chat 8994 && this.chat != this 8995 && ( 8996 !this.chat.messenger 8997 || this.chat.messenger != msngr 8998 ) 8999 ) { 9000 this.chat.setMessenger(msngr); 9001 } 9002 else { 9003 if (msngr.stealth) { return false; } 9004 } 9005 this.msngr = msngr; 9006 this.chatter.setMessenger(msngr); 9007 }, 9008 launchVideo: function(e,data){ 9009 if (!data) { data = jQuery(e.currentTarget).data() } 9010 var button = jQuery(e.currentTarget), 9011 stream_data = data.stream.split('|'); 9012 if (button.hasClass('disabled')) { return false } 9013 this.flashvars.streamWanted = stream_data[0]; 9014 this.flashvars.serverId = stream_data[1] === undefined ? this.flashvars.serverId : stream_data[1]; 9015 this.deployVideo(); 9016 }, 9017 deployVideo: function(restart){ 9018 if ( 9019 !this.has_video 9020 || restart 9021 ) { 9022 var vtime = (new Date()).getTime(), 9023 thisChatViewer = this, 9024 mdl = this.model, 9025 mmdl = (this.msngr) ? this.msngr.findExistingModel(this.handle,true) : undefined; 9026 9027 if (!this.flashvars.streamWanted) { 9028 if ( 9029 !!this.msngr 9030 && (mdl = this.msngr.findExistingModel(this.handle,true)) 9031 ) { 9032 if (this.chat) { this.chat.model = mdl } 9033 } 9034 if (mdl) { 9035 this.flashvars.streamWanted = mdl.get('stream_id'); 9036 this.flashvars.serverId = this.flashvars.forceStreamIdIp || mdl.get('stream_id_ip'); 9037 9038 } 9039 9040 } 9041 if (this.flashvars.streamWanted) { 9042 //open the window only enough to show the video 9043 var winheight = this.win.outerHeight, 9044 width = this.win.innerWidth, 9045 vheight = width * 3 / 4, 9046 cheight; 9047 9048 if (this.has_chat) { 9049 cdiff = this.chat_container.height() - 180; 9050 vheight -= cdiff; 9051 this.win.restoreSize = winheight; 9052 if (!restart) { this.win.resizeBy(0,vheight) } 9053 } 9054 else { 9055 this.hideMsg(); 9056 } 9057 9058 if ( this.flashvars.forceStreamIdIp) { 9059 this.flashvars.serverId = this.flashvars.forceStreamIdIp; 9060 } 9061 this.win.swfobject.embedSWF(this.flashvars.swfFile,"lvp","100%","100%","10.0.0",false,this.flashvars,this.flashparams,this.flashattr); 9062 9063 this.$el.addClass('viewing'); 9064 this.video = this.$('#lvp'); 9065 this.video_container.removeClass('hide'); 9066 this.video_controls.container.removeClass('hide'); 9067 if (restart) { this.videoPlayPause(false); } 9068 if (this.has_chat) { 9069 this.video.removeAttr('style'); 9070 this.showMsg(); 9071 this.chat.scrollChatWindow(); 9072 } 9073 this.has_video = true; 9074 this.renderHeader(); 9075 this.resize(); 9076 if (mdl) { 9077 mdl.set({ 9078 is_broadcasting: 1, 9079 am_viewing: vtime 9080 }); 9081 } 9082 if (!!mmdl) { 9083 mmdl.set({ 9084 is_broadcasting: 1, 9085 am_viewing: vtime 9086 }); 9087 } 9088 } 9089 } 9090 }, 9091 reloadVideo: function(){ 9092 this.videoPlayPause(true); 9093 this.video.replaceWith('<div id="lvp" width="0" height="0"/>'); 9094 this.deployVideo(true); 9095 }, 9096 closeVideo: function(){ 9097 var rwin = this.win.parent || this.win, 9098 rest_height = rwin.restoreSize || this.msngr.specs.chatwin_height, 9099 mdl = this.model, 9100 mmdl = this.msngr.findExistingModel(this.handle); 9101 9102 this.videoPlayPause(true); 9103 this.video.stop(); 9104 this.video.replaceWith('<div id="lvp" width="0" height="0"/>'); 9105 this.has_video = false;
9106 9107 mdl.set({ 9108 am_viewing: undefined 9109 }); 9110 mmdl.set({ 9111 am_viewing: undefined 9112 }); 9113 9114 if (this.has_chat) { 9115 9116 this.video_container.addClass('hide'); 9117 this.video_controls.container.addClass('hide'); 9118 this.chat_container.removeAttr('style'); 9119 this.$el.removeClass('viewing'); 9120 rwin.resizeTo(this.win.outerWidth,rest_height); 9121 this.renderHeader(); 9122 9123 9124 } 9125 else { 9126 rwin.close(); 9127 } 9128 }, 9129 addWindowEvent: function (evntName,hndlr){ 9130 if ( this.win.addEventListener ) { this.win.addEventListener( evntName, hndlr, false ) } 9131 else if ( this.win.attachEvent ) { this.win.attachEvent( "on"+evntName, hndlr ) } 9132 else if ( this.win.onLoad ) { this.win['on'+evntName] = hndlr } 9133 }, 9134 removeWindowEvent: function (evntName,hndlr){ 9135 if ( this.win.addEventListener ) { this.win.removeEventListener( evntName, hndlr, false ) } 9136 else if ( this.win.attachEvent ) { this.win.detachEvent( "on"+evntName, hndlr ) } 9137 else if ( this.win.onLoad ) { this.win['on'+evntName] = null } 9138 }, 9139 launchStealthMessenger: function(opts){ 9140 var msngrwin, 9141 murl; 9142 9143 murl = CD.utils.buildURL('/messenger.html',{ 9144 imc_mode: 'stealth', 9145 conversation: this.handle 9146 }) 9147 9148 jQuery('body').find('iframe[name="stealthmessage_frame"]').remove(); 9149 msngrwin = document.createElement('iframe'); 9150 msngrwin.setAttribute('name','stealthmessage_frame'); 9151 msngrwin.setAttribute('class','stealthmessage_frame'); 9152 jQuery('body').append(msngrwin); 9153 msngrwin.src = murl; 9154 }, 9155 launchVGift: function(e,data){ 9156 var is_gold = false, 9157 level, 9158 disabled = jQuery(e.currentTarget).hasClass('disabled'), 9159 user_model = this.msngr && this.msngr.member ? this.msngr.member.toJSON() : null; 9160 9161 if (!disabled) { 9162 //adjust z-index of lightbox so this dialog appears in front 9163 jQuery('#lb-box').css('z-index','999'); 9164 9165 if (user_model && user_model.level) { 9166 level = user_model.level; 9167 if (isFinite(level) && parseInt(level, 10) > 299) { 9168 is_gold = true; 9169 } 9170 9171 } 9172 9173 VIce.widget.vgift_popup({ 9174 handle: this.handle, 9175 pwsid: this.pwsid, 9176 trigger_redirect: "true", 9177 standalone: "true", 9178 is_gold: is_gold 9179 }); 9180 } 9181 9182 }, 9183 sendTip: function(){ 9184 var me = VIce.logged_in_member, 9185 pwsid = this.pwsid, 9186 tip_type = 'chat'; 9187 9188 if (this.has_video){ 9189 tip_type = 'broadcast'; 9190 } 9191 9192 if (!pwsid && this.model){ 9193 pwsid = this.model.get('pwsid'); 9194 } 9195 9196 9197 VIce.widget.send_tip({ 9198 tipper_handle: me.get('handle'), 9199 tipper_pwsid: me.get('pwsid'), 9200 broadcaster_handle: this.handle, 9201 broadcaster_pwsid: pwsid, 9202 tip_type: tip_type 9203 }) 9204 }, 9205 showMsg: function(e,data) { 9206 if ( 9207 e 9208 && jQuery(e.currentTarget).hasClass('disabled') 9209 ) { return false } 9210 9211 //if there is no messenger then deployChat 9212 if ( 9213 !this.msngr 9214 || this.msngr.stealth 9215 ) { return this.deployChat() } 9216 9217 this.stopBlinkChatButton(); 9218 this.has_chat = true; 9219 if ( 9220 this.msngr 9221 && this.msngr.win.closed 9222 && this.msngr.stealth 9223 ) { 9224 this.msngr = null; 9225 this.launchStealthMessenger(); 9226 this.deployChat(); 9227 } 9228 if (this.msngr) { 9229 if (!this.msngr.isConnected()) { 9230 this.msngr.connect(); 9231 } 9232 this.msngr.removeFromIncoming(this.handle); 9233 this.chat_controls.open_chat.removeClass('disabled'); 9234 9235 VIce.currentPage().addClass('show-msg').removeClass('hide-msg'); 9236 this.$el.addClass('chatting'); 9237 if (!this.chat) { 9238 this.launchChat(); 9239 } 9240 this.resize(); 9241 } 9242 }, 9243 hideMsg: function() { 9244 if (this.msngr) { this.msngr.sendSystemMessage('exit_chat',this.handle) } 9245 this.has_chat = false;
9246 VIce.currentPage().addClass('hide-msg').removeClass('show-msg'); 9247 this.$el.removeClass('chatting'); 9248 this.resize(); 9249 }, 9250 blinkChatButton: function(){ 9251 var b = this.$('.open-chat,.exit-chat'); 9252 this.button_blinker = window.setInterval(function(){ 9253 b.each(function(i,e){ 9254 var $e = jQuery(e); 9255 var bgcolor = ($e.css('backgroundColor') == 'rgb(233, 233, 233)') ? '#333333' : '#E9E9E9'; 9256 var fgcolor = ($e.css('color') == 'rgb(102, 102, 102)') ? '#FFFFFF' : '#666666'; 9257 $e.css({ 9258 backgroundColor:bgcolor, 9259 color:fgcolor 9260 }) 9261 }); 9262 9263 },1000); 9264 9265 }, 9266 stopBlinkChatButton: function(){ 9267 window.clearInterval(this.button_blinker); 9268 this.$('.open-chat,.exit-chat').css({ 9269 backgroundColor: '#E9E9E9', 9270 color: '#666666' 9271 }) 9272 }, 9273 launchChat: function(){ 9274 var newwinleft = (this.win.screenX < this.win.screen.width / 2) ? this.win.screen.width : 0 ; 9275 var ChatViewer = this; 9276 if ( 9277 !this.msngr 9278 || this.msngr.win.closed 9279 ) { this.setMessenger(CD.utils.getMessenger()) } 9280 if ( 9281 this.msngr 9282 && !this.msngr.stealth 9283 && !this.msngr.win.closed 9284 ) { 9285 this.msngr.showChatInViewerWindow(this.win); 9286 this.deployChat(); 9287 } 9288 else { 9289 if (!this._int_check) { 9290 var mopts = { 9291 handle: this.handle, 9292 win: this.win, 9293 left: newwinleft 9294 }; 9295 if (this.msngr) { 9296 var hw = this.msngr.getStealthHostWindow(); 9297 CD.utils.startMessenger({messenger:hw.name}); 9298 return true; 9299 } else { 9300 CD.utils.launchMessenger(mopts); 9301 } 9302 this._int_check = 0; 9303 this._int_timer = setInterval(function () { 9304 var msgr = CD.utils.getMessenger(); 9305 if (msgr) { 9306 clearInterval(ChatViewer._int_timer); 9307 ChatViewer.deployChat(); 9308 ChatViewer._int_check =0; 9309 } else if(ChatViewer._int_check > 30) { 9310 clearInterval(ChatViewer._int_timer); 9311 ChatViewer._int_check =0; 9312 9313 } else { 9314 ChatViewer._int_check++; 9315 } 9316 console.warn("CHECING", msgr); 9317 },500); 9318 } 9319 } 9320 }, 9321 deployChat: function(){ 9322 //console.log('ChatviewerView->deployChat'); 9323 if (!this.has_chat) { 9324 //console.log('I do not have a chat. I want to launch one'); 9325 9326 this.$el.addClass('chatting'); 9327 this.chat_container.removeClass('hide'); 9328 9329 if (!this.msngr) { 9330 //console.log('There is no messenger set. Let me look for one...'); 9331 var m = CD.utils.getMessenger(); 9332 if ( 9333 m 9334 && !m.stealth 9335 ) { this.setMessenger(m) } 9336 } 9337 9338 if (!this.chat) { 9339 //console.log('The chat does not exist lets parse that role...'); 9340 var cp = VIce.currentPage(), 9341 cw = this.win.$('.chatwindow').parent(); 9342 9343 if ( 9344 cw.length 9345 && cp.parseRoles(cw,true,this) 9346 ){ 9347 this.chat = cp.getVar('ChatWindow_' + this.handle); 9348 } 9349 } 9350 9351 if (this.msngr) { 9352 //console.log('There is a messenger at this point...'); 9353 if (!this.msngr.stealth) { 9354 //make sure it is connected 9355 if (!this.msngr.isConnected()) { this.msngr.connect() } 9356 //if the chatwindow view has not been parsed already 9357 9358 this.msngr.trigger('chatwindow_opened',{ 9359 handle: this.handle, 9360 win: this.win, 9361 chatview: this.chat 9362 }); 9363 } 9364 else { 9365 //console.log('...the messenger is STEALTH') 9366 9367 if ( 9368 this.msngr.win != this.win 9369 && this.msngr.win != this.win.parent 9370 ) { 9371 //console.log('...but it is in another window. It should be replaced.'); 9372 this.default_hide_chat = false;
9373 if (this.has_video) { CD.utils.launchMessenger(); } 9374 } 9375 else { 9376 if (this.msngr.win == this.win.parent) { 9377 if ( 9378 this.chat 9379 && !this.chat.rendered 9380 ) { 9381 this.chat.render(); 9382 } 9383 9384 } 9385 else { 9386 this.msngr.showChatInViewerWindow(this.win); 9387 } 9388 //console.log('...and it lives in this window. Must be mine!'); 9389 9390 } 9391 } 9392 } 9393 else { 9394 //console.log('Man...there is no messenger'); 9395 if (this.has_video) { 9396 //I was watching a video and wanted to add the chat 9397 this.launchChat(); 9398 } 9399 else { 9400 //I don't have a video this is just a chat window 9401 this.launchStealthMessenger(); 9402 } 9403 } 9404 9405 this.chat_controls.open_chat.removeClass('disabled'); 9406 this.resize(); 9407 9408 if (this.default_hide_chat) { 9409 //console.log('Hiding message'); 9410 this.hideMsg(); 9411 } else { 9412 //console.log('I have a chat cooking'); 9413 this.has_chat = true; 9414 } 9415 9416 if (this.has_video) { 9417 this.resize(); 9418 } 9419 9420 } 9421 }, 9422 closeChat: function(){ 9423 if (this.has_chat) { 9424 var thisViewer = this, 9425 msngr = this.msngr || CD.utils.getMessenger(), 9426 handle = this.handle, 9427 rest_height = this.win.outerHeight - jQuery(this.chat_container).height(), 9428 rest_width = this.win.outerWidth; 9429 9430 if (msngr) { 9431 msngr.handleWindowUnload(handle); 9432 msngr.trigger('chatwindow_closed',{handle: handle, win: this.chatwin}) 9433 } 9434 9435 delete VIce.currentPage().vars['ChatViewer_' + handle]; 9436 delete VIce.currentPage().vars['ChatWindow_' + handle]; 9437 9438 this.has_chat = false; 9439 this.win.top.is_registered = false; 9440 this.win.top.chat_events_set = false; 9441 jQuery(this.chat_container).empty(); 9442 9443 this.win.resizeTo(rest_width,rest_height); 9444 9445 this.$el.removeClass('chatting'); 9446 this.video_container.removeAttr('style'); 9447 if (this.has_video) { 9448 window.setTimeout(thisViewer.resize,100); 9449 } 9450 } 9451 }, 9452 resize: function(){ 9453 if ( 9454 this.passport_container 9455 && this.has_video 9456 ) { 9457 var win = jQuery(this.win), 9458 wheight = this.win.innerHeight || win.height(), 9459 width = this.win.innerWidth || win.width(), 9460 chatrdy = this.has_chat && !!this.msngr && !!this.msngr.getChatWindow(this.handle), 9461 ppc = this.passport_container, 9462 minchat = (chatrdy) ? 180 : 0, 9463 pph = ppc.height(), 9464 pad = 15, 9465 //figure the available height to display the video 9466 aheight = Math.max((wheight - pph - this.video_controls.container.height() - pad - minchat), 160), 9467 //figure out the optimal height based on the width of the window 9468 oheight = Math.max(Math.floor(width * 3 / 4), 160), 9469 //the actual height of the video 9470 vheight = this.video.height(), 9471 //the actual width of the video (should always be the same as the window) 9472 vwidth = this.video.width(), 9473 //if the min-height is reached, use min-width 9474 awidth = 213.33, 9475 //if constraining the width, calculate the margin 9476 vmarg = Math.max(Math.round((width - awidth) / 2), 0), 9477 //is the screen too narrow to display the video correctly 9478 toonrw = vheight > oheight, 9479 //is the screen too short to display the video correctly 9480 toosht = oheight > aheight, 9481 sh = true, 9482 th = false, 9483 cch; 9484 9485 this.video_container.removeAttr('style'); 9486 9487 if (toosht) { 9488 this.video_container.height(aheight) 9489 if (aheight == 160) { 9490 this.video_container.width(awidth); 9491 this.video_container.css({left:vmarg}); 9492 } 9493 } else { 9494 this.video_container.height(oheight) 9495 if (oheight == 160) { 9496 this.video_container.width(awidth); 9497 this.video_container.css({left:vmarg}); 9498 } 9499 } 9500 if (toonrw) { 9501 var contrl_offset = (this.video_container.height() - oheight) * -1, 9502 video_offset = contrl_offset / 2; 9503 9504 this.video_container.css('top', video_offset + 'px'); 9505 this.video_controls.container.css('top', contrl_offset + 'px'); 9506 } else { 9507 var contrl_offset = 0; 9508 this.video_controls.container.removeAttr('style'); 9509 this.chat_container.removeAttr('style'); 9510 } 9511 if (chatrdy) { 9512 cch = wheight - pph - this.video_container.height() - this.video_controls.container.height() - contrl_offset - pad; 9513 this.chat_container.height(cch); 9514 if (contrl_offset) { this.chat_container.css('top',contrl_offset + 'px'); } 9515 } 9516 } 9517 return true; 9518 }, 9519 handlePlayButtonClick: function(e) { 9520 this.videoPlayPause(this.video_controls.play.find('div').hasClass('sprite-pause')); 9521 }, 9522 videoPlayPause: function(pause) { 9523 if (this.has_video) { 9524 var video = this.video[0], 9525 controls = this.video_controls, 9526 lang = this.lang, 9527 button = controls.play, 9528 icon = button.find('div'), 9529 tttext = pause ? lang.start : lang.pause; 9530 9531 button.attr('data-tooltip',tttext); 9532 9533 if (pause) { 9534 icon.removeClass('sprite-pause').addClass('sprite-play'); 9535 video.stopWatching(); 9536 } else { 9537 icon.removeClass('sprite-play').addClass('sprite-pause'); 9538 video.startWatching(); 9539 } 9540 9541 button.blur(); 9542 } 9543 }, 9544 handleMuteButtonClick: function(e){ 9545 var controls = this.video_controls, 9546 icon = controls.mute.find('div'), 9547 muteIco = 'sprite-mute2', 9548 newvol = icon.hasClass(muteIco) ? 60 : 0, 9549 volbar = controls.volume.find('[data-vol="'+ newvol +'"]') ; 9550 9551 if (!newvol) { 9552 controls.volume.find('.bar').removeClass('x'); 9553 this.videoVolume(newvol); 9554 } 9555 else { this.handleVolumeClick({target:volbar.get(0)}) } 9556 $(this).blur(); 9557 }, 9558 videoVolume: function (vol) { 9559 var controls = this.video_controls, 9560 lang = this.lang, 9561 icon = controls.mute.find('div'), 9562 muteIco = 'sprite-mute2', 9563 volIco = 'sprite-volume2', 9564 unmute = vol > 0, 9565 tttext = unmute ? lang.mute : lang.unmute ; 9566 9567 if ( vol > 0 && unmute ) { 9568 icon.removeClass(muteIco).addClass(volIco); 9569 } else if (vol < 1 && !unmute ) { 9570 icon.removeClass(volIco).addClass(muteIco); 9571 } 9572 controls.mute.attr('data-tooltip',tttext); 9573 this.video[0].volumeChange(vol); 9574 }, 9575 handleVolumeClick: function(e) { 9576 var elem = jQuery(e.target).addClass('x'), 9577 vol = parseInt(elem.attr('data-vol'),10); 9578 9579 elem.siblings().each( function(){ 9580 var e = jQuery(this), 9581 thisVol = parseInt(e.attr('data-vol'),10); 9582 9583 e.toggleClass('x', (thisVol <= vol)) 9584 }); 9585 this.videoVolume(vol); 9586 }, 9587 handleAbuseLinkClick: function(e){ 9588 var row = jQuery(e.currentTarget).closest('.messenger_row'), 9589 url = CD.utils.buildURL(this.urls.video_viewer,{ 9590 userid: row.attr('data-pwsid'), 9591 view_handle: row.attr('data-handle') 9592 }); 9593 9594 return window.openWindow(url, "reportAbuse","scrollbars=no,resizable=yes,width=600,height=700") != null; 9595 }, 9596 handleFriendInvite: function(e,data){ 9597 if (jQuery(e.target).closest('.invite_btn').hasClass('disabled')){ return false } 9598 this.sendFriendInvite(e,data); 9599 }, 9600 sendFriendInvite: function(e,data){ 9601 return this.chatter.sendFriendInvite(e,data); 9602 }, 9603 handleNetworkInviteSent: function(data){ 9604 var handle = data.invited, 9605 button = this.$('[data-click="handleFriendInvite"] .btn'), 9606 m = this.messenger; 9607 9608 m.displaySystemMessage(handle, 'request_sent'); 9609 m.sendSystemMessage('invite', handle); 9610 9611 button.attr('data-original-title',m.lang.interactions.inviting); 9612 button.addClass('disabled'); 9613 }, 9614 handleNetworkInviteFailure: function(data){ 9615 var handle = data.invited, 9616 button = this.$('[data-click="handleFriendInvite"] .btn'); 9617 9618 this.messenger.displaySystemMessage(handle, 'request_failed'); 9619 button.addClass('disabled'); 9620 }, 9621 sendFlirt: function(e,data){ 9622 data.win = window.get('ffmain') || this.win.opener; 9623 return this.chatter.sendFlirt(e,data); 9624 }, 9625 redirectOrderFlirt: function () { 9626 var url = VIce.gsub.link('order_flirt', { values: { pwsid: this.model.get('pwsid') } }); 9627 return window.openWindow(url, 'ffmain'); 9628 }, 9629 addToHotlist: function(e,data){ 9630 this.resizeForLightbox(); 9631 return this.chatter.addToHotlist(e,data); 9632 }, 9633 becomeAFan: function(e,data){ 9634 return this.chatter.becomeAFan(e,data); 9635 }, 9636 bidOnMember: function(e,data){
9637 return this.chatter.bidOnMember(e,data); 9638 }, 9639 resizeForLightbox: function(){ 9640 //close the dropdown menu 9641 if (this.chat) { 9642 this.chat.interactions_dropdown.removeClass('open'); 9643 } 9644 //resize the window if needed 9645 var min_width = 780, 9646 min_height = 665, 9647 cur_width = window.outerWidth, 9648 cur_height = window.outerHeight, 9649 new_width = Math.max(min_width,cur_width), 9650 new_height = Math.max(min_height,cur_height) 9651 9652 window.resizeTo(new_width, new_height); 9653 }, 9654 handleFlirted: function(data){ 9655 this.$('.flirt_btn ._text').text(this.lang.interactions.flirted.flirt); 9656 }, 9657 handleHotlisted: function(data){ 9658 this.$('.hotlist_btn ._text').text(this.lang.interactions.hotlisted); 9659 } 9660}));//end extend 9661 9662if (!String.prototype.htmlEnc) { 9663 String.prototype.htmlEnc = function() { 9664 if(!this) { return this } 9665 9666 return this.replace(/&/g,"&") 9667 .replace(/</g,"<") 9668 .replace(/>/g,">") 9669 .replace(/\'/g,"'") 9670 .replace(/\"/g,""") 9671 .replace(/\n/g,"<br />"); 9672 } 9673} 9674 9675 </script>
9675 9676 9677 9678<!-- -->
9678<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-handlebars_helper-1559284416.js"></script>
9678<!-- DNE -->
9679<script> 9680 VIce.setModel("Member", VIce.BaseModel.extend({ 9681 idAttribute: 'pwsid', 9682 male_sex: { 9683 "1": true, 9684 "3": true, 9685 "4": true, 9686 "6": true, 9687 "7": true 9688 }, 9689 initialize: function () { 9690 this.on("change:is_hotlisted",this.updateHotlistState,this); 9691 this.on("change:hotlisted",this.updateHotlistState,this); 9692 this.on("change:topfan_off",this.updateHotlistState,this); 9693 this.on("change:i_am_a_fan_of_rank",this.updateHotlistState,this); 9694 this.on("change:can_flirt",this.updateFlirtState,this); 9695 this.on("change:is_friend",this.updateCanFriend,this); 9696 9697 if (this.get("swing")) { 9698 var new_swing = //logic 9699 this.set("swing_normalize", new_swing); 9700 } 9701 this.updateHotlistState(); 9702 this.updateCanFriend(); 9703 this.updateFlirtState(); 9704 }, 9705 updateFlirtState: function () { 9706 var can_flirt = this.get("can_flirt"); 9707 var flirt_state = "can_flirt"; 9708 if (!can_flirt) { 9709 flirt_state = "cant_flirt"; 9710 9711 if (VIce.logged_in_member 9712 && VIce.logged_in_member.get("level") == "100" && !this.get('standard_contact')) { 9713 flirt_state = "cant_flirt_standard"; 9714 } 9715 } 9716 this.set('flirt_state', flirt_state); 9717 }, 9718 updateCanFriend: function () { 9719 var friend_status = 'can_friend'; 9720 var invite_status = this.get("is_friend"); 9721 var can_friend = true; 9722 if (invite_status == 2) { 9723 can_friend = false; 9724 friend_status = 'invite_sent'; 9725 } else if (invite_status == 1) { 9726 can_friend = false; 9727 friend_status = 'is_friend'; 9728 } else { 9729 can_friend = true; 9730 friend_status = 'can_friend'; 9731 } 9732 this.set('can_friend',can_friend); 9733 this.set('friend_status', friend_status); 9734 }, 9735 9736 updateHotlistState: function () { 9737 if (this.get('hotlisted')) { 9738 this.set({'is_hotlisted':1},{'silent': true}); 9739 } 9740 9741 if (parseInt(this.get('is_hotlisted'),10) > 0) { 9742 if (this.get('topfan_off') 9743 || VIce.globals.topfan_off 9744 ) { 9745 this.set('hotlist_state','hotlisted'); 9746 } else { 9747 var rank = this.get('i_am_fan_of_rank'); 9748 9749 if (rank) { 9750 if (rank > 0) { 9751 this.set('hotlist_state','fan_rank'); 9752 } else { 9753 this.set('hotlist_state','bid_more'); 9754 } 9755 } else { 9756 this.set('hotlist_state','become_a_fan'); 9757 } 9758 } 9759 } else { 9760 this.set('hotlist_state' ,'hotlist'); 9761 } 9762 }, 9763 9764 templateJSON: function (data) { 9765 data = data || this.toJSON(); 9766 9767 if (!data.online) { 9768 9769 if (VIce.logged_in_member) { 9770 data.online = VIce.logged_in_member.get("pwsid") == data.pwsid? true : false; 9771 } 9772 } 9773 9774 data.std_location = data.location; 9775 data.level = data.status || data.level; 9776 data.verified_member = data.verified; 9777 if (data.i_am_fan_of_rank) { 9778 data.rank = parseInt(data.i_am_fan_of_rank, 10); 9779 } 9780 if (data.rank === 1) { 9781 data.is_top_fan = 1; 9782 } 9783 if (data.distance) { 9784 data.distance = parseInt(data.distance, 10); 9785 data.distance = data.distance > 1 ? data.distance : 0; 9786 } 9787 if (data.last_visit_datetime && _.isString(data.last_visit_datetime)) { 9788 data.last_visit_datetime = data.last_visit_datetime.replace(/-/g, '/'); 9789 } 9790 data.passport = data.passport || data.spendee_passport || data.spender_passport; 9791 9792 data.sex = data.sex || data.gender; // for some accounts we have gender but not sex. 9793 data.gender = data.gender || data.sex; // not sure if this happens, but just to cover bases 9794 9795 if (stdMapping 9796 && stdMapping.mapStdGender 9797 ) { 9798 data.mapped_gender = stdMapping.mapStdGender(data.sex,data.age,data.age2); 9799 } 9800 9801 data.message_points = data.message_points || 10; 9802
9803 data.type_key = (data.from_sex && data.from_sex.toString().match(/^[127]$/)) ? 'i' : 'we'; 9804 9805 if ( VIce.notifications && VIce.notifications.type_messages && data.type && VIce.notifications.type_messages[ data.type ]) { 9806 data.notification_msg = VIce.notifications.type_messages[ data.type ][ data.type_key ]; 9807 } 9808 9809 if ( !data.features ) { 9810 data.features = { 9811 'age' : data.age, 9812 'age2' : data.age2 9813 } 9814 } 9815 9816 if ( data ) { 9817 data.confirm_or_verify_badge = Handlebars.helpers.showConfirmed.call({ 9818 verify : data.verify || false, 9819 verified_photo : data.verified_photo || false 9820 }); 9821 } 9822 9823 //debugger; 9824 console.log("Member setting hotlist_state", data.hotlist_state); 9825 return data; 9826 }, 9827 isMale: function(){ 9828 return this.male_sex[this.get('sex')]; 9829 } 9830 9831})); 9832// this is because we changed the memeber objct 9833// and will make sure the correct base member is used 9834VIce.BaseCollection = VIce.BaseCollection.extend({ 9835 model: VIce.model("Member"), 9836}); 9837<!-- --></script>
9837<script> 9838 9839VIce.on("init", function () { 9840var model = VIce.model("Member"); 9841 9842VIce.logged_in_member = new model({ 9843 9844 pwsid: "", 9845 handle: "", 9846 show_pprofile: "", 9847 level: "", 9848 sex: "", 9849 sex_orient: "", 9850 sex_orient2: "", 9851 age: "", 9852 birth: "", 9853 bday_day: "", 9854 bday_day2: "", 9855 bday_month: "", 9856 bday_month2: "", 9857 bday_year: "", 9858 bday_year2: "", 9859 birth_day_age: "", 9860 birth_day_age2: "", 9861 eye_color: "", 9862 eye_color2: "", 9863 hair_color: "", 9864 hair_color2: "", 9865 hair_length: "", 9866 hair_length2: "", 9867 race: "", 9868 race2: "", 9869 height: "", 9870 height2: "", 9871 body_type: "", 9872 body_type2: "", 9873 endowment_width: "", 9874 endowment_width2: "", 9875 endowment_length: "", 9876 endowment_length2: "", 9877 circumsized: "", 9878 circumsized2: "", 9879 brasize: "", 9880 brasize2: "", 9881 bracup: "", 9882 bracup2: "", 9883 email: "", 9884 aim: "", 9885 aim2: "", 9886 yim: "", 9887 yim2: "", 9888 msn: "", 9889 msn2: "", 9890 icqnum: "", 9891 icqnum2: "", 9892 title: "", 9893 profile: "", 9894 profession: "", 9895 profession2: "", 9896 religion: "", 9897 religion2: "", 9898 education: "", 9899 education2: "", 9900 marital_status: "", 9901 have_children: "", 9902 want_children: "", 9903 swing: "", 9904 drinking: "", 9905 drinking2: "", 9906 smoking: "", 9907 smoking2: "", 9908 drugs: "", 9909 drugs2: "", 9910 willing_relocate: "", 9911 city: "", 9912 county: "", 9913 state: "", 9914 9915 lang_spoken: "english", 9916 other_lang_spoken: "", 9917 num_friends: "", 9918 num_videos: "", 9919 num_albums: "", 9920 num_album_photos: "", 9921 num_favorite_photos: "", 9922 view_contact_credits: "", 9923 highlight: "", 9924 standard_contact: "", 9925 online_now: "", 9926 looking_for_person: "", 9927 looking_for_what: "", 9928 looking_for_desc: "", 9929 autoreply_on: "", 9930 email_on: "", 9931 soc_profile_on: "", 9932 profile_on: "", 9933 is_hot: "", 9934 mailing_list: "", 9935 photo_exists: "", 9936 auto_renew: "", 9937 submitted_personal_preferences: "", 9938 no_erotic: "", 9939 mc_filter: "", 9940 mc_version: "", 9941 mc_show: "", 9942 mc_show2: "", 9943 9944 my_blog: "", 9945 price_single_profile_view: "$9.90", 9946 VIEWS_COUNT: "", 9947 EMAILS_SENT_COUNT: "", 9948 HOTLIST_COUNT: "", 9949 WINKS_COUNT: "", 9950 WINKS_SENT_COUNT: "", 9951 HOTLISTED_COUNT: "", 9952 can_qb: 0, 9953 9954 CUPID: { 9955 experience_length: "", 9956 looking_for_what: "", 9957 profession: "", 9958 looking_for_person: "", 9959 brasize: "", 9960 bracup: "", 9961 demeanor: "", 9962 min_age: "", 9963 outness: "", 9964 role: "", 9965 want_children: "", 9966 on: "", 9967 diet: "", 9968 synagogue: "", 9969 dist_max_value: "", 9970 country: "", 9971 lat: "", 9972 lon: "", 9973 location_id: "", 9974 education: "", 9975 have_children: "", 9976 culture: "", 9977 race: "", 9978 sex: "", 9979 sex_orient: "", 9980 kosher: "", 9981 religion: "", 9982 denomination: "", 9983 body_type: "", 9984 max_age: "", 9985 marital: "", 9986 drinking: "", 9987 income: "", 9988 lang_spoken: "", 9989 salary: "", 9990 fetish: "", 9991 smoking: "" 9992 } 9993 9994 } 9995)});; 9996 9997</script>
9997<!-- -->
9998<script src="https://secureimage.securedataimages.com/images/cams/js/sockjs/sockjs.min.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-global-1735203907.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-language_dropdown-1559284445.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-json2-1559284432.js"></script>
9998<!-- json2 -->
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-jquery_custom-1600896015.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-corelib-1559284390.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-utility_library-1559284453.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-fruit2-1578007936.js"></script>
9998<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-global_mapping-1559284420.js"></script>
9998 9999
10000<script type="text/javascript"> 10001 if ( !stdMapping ) { 10002 var stdMapping = CD.GlobalMapping({ 10003 site: 'bdsm', 10004 'is_out' : 0, 10005 'text_gender_1' : "M", 10006 'text_gender_2' : "F", 10007 'text_gender_3' : "C", 10008 'text_gender_4' : "G", 10009 'text_gender_5' : "LC", 10010 'text_gender_6' : "GC", 10011 'text_gender_7' : "T", 10012 'myLanguage' : "english", 10013 'myCountry' : "", 10014 'text_x_year' : "over a year ago", 10015 'text_x_month' : "[NUM] months ago", 10016 'text_1_month' : "a month ago", 10017 'text_x_week' : "[NUM] weeks ago", 10018 'text_1_week' : "about 1 week ago", 10019 'text_x_day' : "{JS_time} days ago", 10020 'text_1_day' : "yesterday", 10021 'text_x_hour' : "{JS_time} hours ago", 10022 'text_1_hour' : "about 1 hour ago", 10023 'text_x_minute' : "{JS_time} minutes ago", 10024 'text_1_minute' : "about 1 minute ago", 10025 'text_x_second' : "{JS_time} seconds ago", 10026 'text_1_second' : "right now", 10027 'svrTimeZone' : "-0700".substring(1,3).replace(/^0/,''), 10028 'text_status_1' : "Single", 10029 'text_status_2' : "Married", 10030 'text_status_3' : "Divorced", 10031 'text_status_4' : "Separated", 10032 'text_status_5' : "Attached", 10033 'text_status_6' : "Widowed", 10034 'text_status_0' : "Prefer not to say", 10035 'text_more_3mo' : "More than 3 months ago" 10036 }); 10037 } 10038</script>
10038 10039<!-- -->
10039<script type="text/javascript"> 10040CD = window.CD || {}; 10041 10042if (CD.namespace) { 10043 CD.namespace('CD.CONFIG'); 10044} 10045 10046CD.CONFIG = function(strName) { 10047 var private_values = { 10048 is_admin: false, 10049 is_dev: false, 10050 timezone_offset: parseInt('-0700'.substring(1,3).replace(/^0/,'')), 10051 search: { 10052 list_options: [ 10053 {"label":"Any","miles":999999,"kilometers":999999}, 10054 {"label":"5","miles":5,"kilometers":3}, 10055 {"label":"10","miles":10,"kilometers":6}, 10056 {"label":"20","miles":20,"kilometers":12}, 10057 {"label":"50","miles":50,"kilometers":31}, 10058 {"label":"75","miles":75,"kilometers":46}, 10059 {"label":"80","miles":80,"kilometers":50}, 10060 {"label":"100","miles":100,"kilometers":63}, 10061 {"label":"160","miles":160,"kilometers":100}, 10062 {"label":"200","miles":200,"kilometers":125}, 10063 {"label":"300","miles":300,"kilometers":186}, 10064 {"label":"500","miles":500,"kilometers":313}, 10065 {"label":"800","miles":800,"kilometers":500}, 10066 {"label":"1000","miles":1000,"kilometers":625}, 10067 {"label":"1600","miles":1600,"kilometers":1000}, 10068 {"label":"2000","miles":2000,"kilometers":1243}, 10069 {"label":"3000","miles":3000,"kilometers":1864}, 10070 {"label":"5000","miles":5000,"kilometers":3106}, 10071 {"label":"10000","miles":10000,"kilometers":6214} 10072 ], 10073 distance_unit: "kilometers" 10074 }, 10075 pagination: { 10076 lang: { 10077 "next":"Next", 10078 "prev":"Previous" 10079 } 10080 }, 10081 badges: { 10082 gold_text: "Gold", 10083 gold_tooltip: "Gold Member", 10084 vip_text: "VIP", 10085 vip_tooltip: "VIP Member", 10086 verified_text: "Verified", 10087 verified_tooltip: "Verified Member", 10088 confirmed_tooltip: "Real ID Submitted & Confirmed", 10089 online_text: "Online", 10090 online_tooltip: "Online Now", 10091 broadcasting_text: "Live on Cam", 10092 broadcasting_tooltip: "Broadcasting Now", 10093 friends_text: "Friends", 10094 friends_tooltip: "Already Friends", 10095 imc_text: "On IM", 10096 imc_tooltip: "On IM Now", 10097 topfan_tooltip_numone: "#1 Fan", 10098 topfan_tooltip_numtwo: "#2 Fan", 10099 topfan_tooltip_numxxx: "#99+ Fan", 10100 mobile_text: "On Mobile IM", 10101 mobile_tooltip: "On Mobile IM" 10102 }, 10103 urls: { 10104 chat_window: "/go/page/conversation?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_global_config-1", 10105 profile: "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_global_config-4&mid=", 10106 hb_profile_optimized_photo: "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{pwsid}}&profile_optimized_photo_id={{optimized_photo}}&trlid=javascript_global_config-5", 10107 hb_profile: "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{pwsid}}&trlid=javascript_global_config-6", 10108 member_webcams: "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=video_public_view&trlid=javascript_global_config-6", 10109 friend_manager:"/p/circle/people.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
101095sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&status=1&action=show_friends&trlid=javascript_global_config-4&mid=", 10110 photo_manager:"/p/manage_photos.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do=show_profile_photo_page&trlid=javascript_global_config-2&mid=", 10111 upgrade:"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_global_config-10", 10112 video_manager:"/p/video/manager.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=view_indexed_video&trlid=javascript_global_config-1&stream_id=", 10113 fan_manager:"/go/page/top_fans_member_fanlist.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_global_config-2&pwsid=", 10114 messenger: "/messenger?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_global_config-1", 10115 broadcaster: "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&test=yes&app_type=web_imc&action=broadcast&trlid=javascript_global_config-7" 10116 }, 10117 10118 gender_map: { 10119 man: 1, 10120 woman: 2, 10121 couple: 3, 10122 group: 4, 10123 lesbiancouple: 5, 10124 gaycouple: 6, 10125 trans: 7, 10126 male: 1, 10127 female: 2, 10128 men: 1, 10129 women: 2, 10130 couples: 3, 10131 groups: 4, 10132 lesbiancouples: 5, 10133 gaycouples: 6 10134 }, 10135 10136 lang: { 10137 view_more: "more", 10138 gender: { 10139 man: "Man", 10140 woman: "Woman", 10141 couple: "Couple (man/woman)", 10142 group: "Group", 10143 lesbiancouple: "Couple (2 women)", 10144 gaycouple: "Couple (2 men)", 10145 trans: "TS/TV/TG", 10146 male: "Male", 10147 female: "Female", 10148 men: "Men", 10149 women: "Women", 10150 couples: "Couples (man/woman)", 10151 groups: "Groups", 10152 lesbiancouples: "Couples (2 women)", 10153 gaycouples: "Couples (2 men)" 10154 }, 10155 race: { 10156 "0": "Prefer not to say", 10157 "prefernotsay": "Prefer not to say", 10158 "1": "American Indian", 10159 "nativeamerican": "American Indian", 10160 "2": "Asian", 10161 "asian": "Asian", 10162 "3": "Black", 10163 "black": "Black", 10164 "4": "Caucasian", 10165 "caucasian": "Caucasian", 10166 "5": "East Indian", 10167 "eastindian": "East Indian", 10168 "6": "Hispanic", 10169 "hispanic": "Hispanic", 10170 "7": "Middle Eastern", 10171 "middleeastern": "Middle Eastern", 10172 "8": "Mixed", 10173 "mixed": "Mixed", 10174 "9": "Other", 10175 "other": "Other" 10176 }, 10177 bodytype: { 10178 "0": "Prefer not to say", 10179 "prefernotsay": "Prefer not to say", 10180 "1": "Average", 10181 "average": "Average", 10182 "2": "Slim/Petite", 10183 "slimpetite": "Slim/Petite", 10184 "3": "Athletic", 10185 "athletic": "Athletic", 10186 "4": "Ample", 10187 "ample": "Ample", 10188 "5": "A little extra padding", 10189 "extrapadding": "A little extra padding", 10190 "6": "BBW/BBM", 10191 "large": "BBW/BBM" 10192 }, 10193 maritalstatus: { 10194 "0": "Prefer not to say", 10195 "prefernotsay": "Prefer not to say", 10196 "1": "Single", 10197 "single": "Single", 10198 "2": "Married", 10199 "married": "Married", 10200 "3": "Divorced", 10201 "divorced": "Divorced", 10202 "4": "Separated", 10203 "separated": "Separated", 10204 "5": "Attached", 10205 "attached": "Attached", 10206 "6": "Widowed", 10207 "widowed": "Widowed" 10208 }, 10209 miles: "miles", 10210 kilometers: "kilometers", 10211 orientation: { 10212 "0":"Prefer not to say", 10213 "1":"Straight", 10214 "2":"Gay/Lesbian", 10215 "3":"Bisexual", 10216 "4":"Bi-curious", 10217 "17":"Straight", 10218 "18":"Gay/Lesbian", 10219 "19":"Bisexual", 10220 "20":"Bi-curious", 10221 "prefernotsay": "Prefer not to say", 10222 "straight": "Straight", 10223 "bisexual": "Bi-sexual", 10224 "bicurious": "Bi-curious", 10225 "gay": "Gay/Lesbian" 10226 } 10227 }, 10228 images: { 10229 size_300: { 10230 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/male.jpg", 10231 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/female.jpg", 10232 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/couple.jpg", 10233 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/group.jpg", 10234 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/lesbian_couple.jpg", 10235 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/gay_couple.jpg", 10236 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/300x300/tstvtg.jpg" 10237 }, 10238 size_96: { 10239 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/male.gif", 10240 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/female.gif", 10241 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/couple.gif", 10242 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/group.gif", 10243 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/lesbian_couple.gif", 10244 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/gay_couple.gif", 10245 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/tstvtg.gif" 10246 }, 10247 size_96t: { 10248 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/male.jpg", 10249 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/female.jpg", 10250 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/couple.jpg", 10251 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/group.jpg", 10252 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/lesbian_couple.jpg", 10253 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/gay_couple.jpg", 10254 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/96x96/tstvtg.jpg" 10255 }, 10256 size_72: { 10257 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/male.gif", 10258 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/female.gif", 10259 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/couple.gif", 10260 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/group.gif", 10261 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/lesbian_couple.gif", 10262 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/gay_couple.gif", 10263 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/72x72/tstvtg.gif" 10264 }, 10265 size_48: { 10266 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/male.gif", 10267 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/female.gif", 10268 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/couple.gif", 10269 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/group.gif", 10270 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/lesbian_couple.gif", 10271 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/gay_couple.gif", 10272 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/48x48/tstvtg.gif" 10273 }, 10274 size_32: { 10275 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/male.gif", 10276 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/female.gif", 10277 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/couple.gif", 10278 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/group.gif", 10279 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/lesbian_couple.gif", 10280 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/gay_couple.gif", 10281 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/32x32/tstvtg.gif" 10282 }, 10283 size_24: { 10284 no_photo_1: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/male.gif", 10285 no_photo_2: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/female.gif", 10286 no_photo_3: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/couple.gif", 10287 no_photo_4: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/group.gif", 10288 no_photo_5: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/lesbian_couple.gif", 10289 no_photo_6: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/gay_couple.gif", 10290 no_photo_7: "https://secureimage.securedataimages.com/images/common/no_photo/24x24/tstvtg.gif" 10291 } 10292 10293 }, 10294 cobrand: { 10295 site: "bdsm", 10296 dcb: "bdsm.com", 10297 is_cobrand: true, 10298 pg_filter: false }, 10299 messages: { 10300 edit_photo_success_msg: "Your photos have been updated!", 10301 tip_sent: "Tip sent", 10302 tip_error: "There was an error with your request, please try again later." 10303 }, 10304 specs: { 10305 messenger: { 10306 default_width: 506, 10307 default_height: 835, 10308 reduced_width: 506, 10309 reduced_height: 512, 10310 chatwin_width: 450, 10311 chatwin_height: 475, 10312 broadcast_width: 860 10313 } 10314 } 10315 } 10316 10317 return private_values[strName]; 10318} 10319if (CD.namespace) { 10320 CD.namespace('CD.ABTEST'); 10321} 10322CD.ABTEST = function(strName) { 10323 var is_ffadult = false;
10324 var is_cobrand = true; 10325 var is_english = true; 10326 var private_values = { 10327 ab_38990StandFreeProfView: function() { 10328 var in_test_value = parseInt("", 10); 10329 return ( false 10330 /* 10331 in_test_value > 0 && 10332 CD.member.level < 200 && 10333 CD.member.country == 'United States' && 10334 CD.member.lang_spoken.toLowerCase() == 'english' && 10335 is_ffadult && 10336 !is_cobrand 10337 */ 10338 ); 10339 }, 10340 ab_soc33917camviewer: function() { 10341 var in_test_value = parseInt("", 10); 10342 return in_test_value; 10343 }, 10344 ab_38157Interested: function() { 10345 var in_test_value = parseInt("", 10); 10346 return in_test_value; 10347 }, 10348 ab_40293search: function() { 10349 var in_test_value = parseInt("", 10); 10350 return in_test_value; 10351 }, 10352 ab_37778SOAiicon: function() { 10353 var in_test_value = parseInt("", 10); 10354 return in_test_value; 10355 }, 10356 ab_39985viewer: function() { 10357 var in_test_value = 1; 10358 return in_test_value; 10359 }, 10360 ab_40543IMPaywall: function(){ 10361 var in_test_value = parseInt("", 10); 10362 return in_test_value; 10363 }, 10364 ab_41326AFFDesignModM4: function(){ 10365 var in_test_value = parseInt("", 10); 10366 return in_test_value; 10367 }, 10368 ab_Soc232gifts: function(){ 10369 var in_test_value = parseInt("", 10); 10370 return in_test_value; 10371 }, 10372 ab_SOC3224Upsell: function(){ 10373 var in_test_value = 0; 10374 return in_test_value; 10375 }, 10376 ab_Soc322IM: function(){ 10377 var in_test_value = parseInt("", 10); 10378 return in_test_value; 10379 }, 10380 ab_SOC28983ContentFilter: function(){ 10381 var in_test_value = "0"; 10382 return parseInt(in_test_value,10); 10383 }, 10384 ab_pid_restrictMC: function(){ 10385 var in_test_value = 0; 10386 return in_test_value; 10387 }, 10388 ab_SOC27701SepBroadcast: function(){ 10389 var in_test_value = parseInt("", 10); 10390 return in_test_value; 10391 }, 10392 ab_SOC35529HndShk: function() { 10393 var in_test_value = parseInt("", 10); 10394 return in_test_value; 10395 } 10396 } 10397 10398 if (private_values['ab_' + strName]) { 10399 return private_values['ab_' + strName](); 10400 } else { 10401 if (window.console) { console.log('The AB Test ' + strName + ' is not recognized.'); } 10402 return false; 10403 } 10404} 10405 10406 10407CD.globals = CD.globals || {}; 10408CD.globals.is_standard = "true"; 10409CD.globals.is_aff = false;
10410CD.globals.ip = "181.215.65.66" || "181.215.65.66"; 10411CD.globals.sex = ''; 10412CD.globals.main_domain = "alt.com"; 10413CD.deftags = CD.deftags || {}; 10414CD.deftags.mc = { 10415 "t" : "Upgrade to see what {{handle}} has to say!", 10416 "t_reply" : "Upgrade to reply to {{handle}}!", 10417 "t_gift" : "Upgrade to claim {{handle}}âs gift for you!", 10418 "t_photo" : "Upgrade to see {{handle}}âs sexy attachment!", 10419 "t_photos" : "Upgrade to see {{handle}}âs sexy attachments!" 10420}; 10421CD.gsub_link = CD.gsub_link || {}; 10422CD.gsub_link.order_mc = "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin={{origin\}\}&p_pwsid={{pwsid\}\}&trlid=javascript_global_config-11"; 10423 10424 10425// QuickMicroTransactionCDMTX6: start 10426CD.globals.quickMTXABTest = false; 10427if (CD.globals.quickMTXABTest) { 10428 CD.globals.payment_type = ''; 10429 var userPWSID = ""; 10430 var userLevel = parseInt(""); 10431 console.log('userLevel: ', userLevel); 10432 console.log('abTest: ', CD.globals.quickMTXABTest); 10433 function reqListener () { 10434 try { 10435 var res = JSON.parse(this.responseText); 10436 } catch (err) { 10437 var res = { 10438 payload: { 10439 has_profile_photo: false 10440 } 10441 }; 10442 } 10443 // if user is standard, 10444 // and does not have a profile picture (that isn't currently pending approval), 10445 if (userLevel < 300 && 10446 !res.payload.has_profile_photo 10447 ) { 10448 CD.globals.quickMTXCheck = 1; 10449 } else { 10450 CD.globals.quickMTXCheck = 0; 10451 } 10452 } 10453 10454 var oReq = new XMLHttpRequest(); 10455 oReq.addEventListener("load", reqListener); 10456 oReq.open("GET", window.location.origin + "/qz/mtx_photo/v1/" + userPWSID + "/info"); 10457 oReq.send(); 10458} 10459// QuickMicroTransactionCDMTX6: end 10460</script>
10460 10461<!-- -->
10461<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-brand-1559284389.js"></script>
vendor: 1 bytes, line 10461
10461
10462<script> 10463 10464/*create global instance(singleton) of current brand*/ 10465try { 10466 CD.brand = new FF_brand({ 10467 date_created: "2009-11-06 10:58:30", 10468 cobrand_url_bak: "", 10469 gpid: "1171407", 10470 lastmod: "1257534724", 10471 access_group_id: "1", 10472 pid: "g1171407", 10473 is_internal: "1", 10474 id: "11837", 10475 closed: "0", 10476 soft_term: "0", 10477 cobrand_url: "bdsm.com", 10478 cobrand_url_modified: "0", 10479 last_modified: "2009-11-06 11:12:04", 10480 api_key_installed: "", 10481 site: "bdsm", 10482 order_box_url: "" 10483 }); 10484 10485} catch(e) { 10486 10487} 10488</script>
10488<!-- -->
10488<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-notifications-1559284436.js"></script>
vendor: 1 bytes, line 10488
10488
10489<script type="text/javascript">FF_notificationsManager.CONFIG = function(strName) { 10490 10491 var private_values = { 10492 mid: '', 10493 country: '', 10494 no_notification_message: 'No new notifications', 10495 notification_type_map:{ 10496 album_like:"photo_like", 10497 album_comment:"photo_comment", 10498 status_OP_comment:"status_comment" 10499 }, 10500 10501 time_representation: { 10502 am: 'am', 10503 pm: 'pm' 10504 }, 10505 notification_type_config: { 10506 view_upsell: { 10507 only_one_message: true, 10508 show_upgrade: true, 10509 others_show_plus_count: 10 10510 }, 10511 }, 10512 limited_str:" (limited)", 10513 notification_type_messages: { 10514 flirts_with_me:{i:'flirted with you',we:'flirted with you',another:'and 1 other member flirted with you',others:'and <!--grp_cnt--> other members flirted with you',fan:'your #<!--fan_of_mine_rank--> fan flirted with you'}, 10515 email_me:{i:'sent you a message',we:'sent you a message',another:'and 1 other member sent you a message',others:'and <!--grp_cnt--> other members sent you messages',fan:'your #<!--fan_of_mine_rank--> fan sent you a message'}, 10516 invites:{i:'sent you a friend request',we:'sent you a friend request',another:'and 1 other member sent you a friend request',others:'and <!--grp_cnt--> other members sent you a friend request',fan:'your #<!--fan_of_mine_rank--> fan sent you a friend request'}, 10517 accept:{i:'accepted your friend request',we:'accepted your friend request',another:'and 1 other member accepted your friend request',others:'and <!--grp_cnt--> other members accepted your friend request',fan:'your #<!--fan_of_mine_rank--> fan accepted your friend request'}, 10518 view:{i:'viewed your profile',we:'viewed your profile',another:'and 1 other member viewed your profile',others:'and <!--grp_cnt--> other members viewed your profile',fan:'your #<!--fan_of_mine_rank--> fan viewed your profile'}, 10519 video_comment:{i:'commented on your video',we:'commented on your video',another:'and 1 other member commented on your video',others:'and <!--grp_cnt--> other members commented on your video',fan:'your #<!--fan_of_mine_rank--> fan commented on your video'}, 10520 profile_view: {i:'Viewed',we:'Viewed',another:'and 1 other member commented on your video',others:'and <!--grp_cnt--> other members commented on your video',fan:'your #<!--fan_of_mine_rank--> fan commented on your video'}, 10521// interested_view: {i:'Interested?'}, 10522 photo_comment:{i:'commented on your photo',we:'commented on your photo',another:'and 1 other member commented on your photo',others:'and <!--grp_cnt--> other members commented on your photo',fan:'your #<!--fan_of_mine_rank--> fan commented on your photo'}, 10523 hotlist_add:{i:'added you to hotlist',we:'added you to hotlist',another:'and 1 other member added you to their hotlist',others:'and <!--grp_cnt--> other members added you to their hotlist',fan:'your #<!--fan_of_mine_rank--> fan added you to their hotlist'}, 10524 blog_comment:{i:'added a new comment to the blog \"<!--blog_title-->\"',we:'added a new comment to the blog \"<!--blog_title-->\"',another:'and 1 other member also commented on the blog',others:'and <!--grp_cnt--> other members also commented on the blog',fan:'your #<!--fan_of_mine_rank--> fan added a new comment to the blog'}, 10525 group_post_add:{i:'added a new post \"<!--question_title-->\" to the group \"<!--group_title-->\"',we:'added a new post \"<!--question_title-->\" to the group \"<!--group_title-->\"',another:'1 other member posted to \"<!--group_title-->\"',others:'<!--grp_cnt--> other members posted to \"<!--group_title-->\"',fan:'your #<!--fan_of_mine_rank--> added a new post \"<!--question_title-->\" to the group \"<!--group_title-->\"'}, 10526 group_post_comment:{i:'commented on \"<!--question_title-->\" in group \"<!--group_title-->\"',we:'commented on \"<!--question_title-->\" in group \"<!--group_title-->\"',another:'1 other member also commented on your group post',others:'<!--grp_cnt--> other members also commented on your group post',fan:'your #<!--fan_of_mine_rank--> commented on your group post'}, 10527 photo_like:{i:'liked your photo',we:'liked your photo',another:'and 1 other member liked your photo',others:'and <!--grp_cnt--> other members liked your photo',fan:'your #<!--fan_of_mine_rank--> fan liked your photo'}, 10528 photo_trending:{i:'you have a trending photo'},
10529 photo_trending_friend:{i:'is your friend and has a trending photo'}, 10530 photo_trending_hotlist:{i:'is in your hotlist and has a trending photo'}, 10531 album_trending:{i:'you have a trending photo'}, 10532 album_trending_friend:{i:'is your friend and has a trending photo'}, 10533 album_trending_hotlist:{i:'is in your hotlist and has a trending photo'}, 10534 status_trending:{i:'you have a trending status'}, 10535 status_comment:{i:'commented on your status',we:'commented on your status',another:'and 1 other member commented on your status',others:'and <!--grp_cnt--> other members commented on your status',fan:'your #<!--fan_of_mine_rank--> fan commented on your status'}, 10536 status_like:{i:'liked your status',we:'liked your status',another:'and 1 other member liked your status',others:'and <!--grp_cnt--> other members liked your status',fan:'your #<!--fan_of_mine_rank--> fan liked your status'}, 10537 video_like:{i:'liked your video',we:'liked your video',another:'and 1 other member liked your video',others:'and <!--grp_cnt--> other members liked your video',fan:'your #<!--fan_of_mine_rank--> fan liked your video'}, 10538 video_trending:{i:'you have a trending video'}, 10539 video_trending_friend:{i:'is your friend and has a trending video'}, 10540 video_trending_hotlist:{i:'is in your hotlist and has a trending video'}, 10541 original_replied_photo_comment:{i:' replied to this photo you commented on'}, 10542 original_replied_video_comment:{i:' replied to this video you commented on'}, 10543 watched_blog_post:{i:'added a new post \"<!--question_title-->\" to the blog \"<!--blog_title-->\"',we:'added a new post \"<!--question_title-->\" to the blog \"<!--blog_title-->\"',another:'1 other member also posted to your watched blog',others:'<!--grp_cnt--> other members also posted to your watched blog',fan:'your #<!--fan_of_mine_rank--> fan posted to your watched blog'}, 10544 group_member_post:{i:'added a new post \"<!--question_title-->\" to your group \"<!--group_title-->\"',we:'added a new post \"<!--question_title-->\" to your group \"<!--group_title-->\"',another:'1 other member also just posted to your group',others:'<!--grp_cnt--> other members also posted to your group',fan:'your #<!--fan_of_mine_rank--> fan posted to your group'}, 10545 group_mod_post:{i:'added a new post \"<!--question_title-->\" to your group \"<!--group_title-->\"',we:'added a new post \"<!--question_title-->\" to your group \"<!--group_title-->\"',another:'1 other member also just posted to your group',others:'<!--grp_cnt--> other members also posted to your group',fan:'your #<!--fan_of_mine_rank--> fan posted to your group'}, 10546 group_mod_join:{i:'joined your group \"<!--group_title-->\"',we:'joined your group \"<!--group_title-->\"',another:'1 other member also joined your group',others:'<!--grp_cnt--> other members also joined your group',fan:'your #<!--fan_of_mine_rank--> fan joined your group'}, 10547 group_join:{i:'joined your group \"<!--group_title-->\"',we:'joined your group \"<!--group_title-->\"',another:'1 other member also joined your group',others:'<!--grp_cnt--> other members also joined your group',fan:'your #<!--fan_of_mine_rank--> fan joined your group'}, 10548 testimonial_posted:{i:'posted a testimonial to your profile',we:'posted a testimonial to your profile',another:'1 other member also posted a testimonial to your profile',others:'<!--grp_cnt--> other members also posted a testimonial to your profile',fan:'your #<!--fan_of_mine_rank--> fan posted a testimonial to your profile'}, 10549 testimonial_approved:{i:'approved a testimonial you posted'}, 10550 fan_add:{i:'just became your fan',we:'just became your fan',another:'1 other member just became your fan',others:'and <!--grp_cnt--> other members also just became your fan',fan:'just became your #<!--fan_rank--> fan'}, 10551 fan_lower_rank:{i:'you lost #<!--old_rank--> spot on <!--from_handle-->\'s fan list',we:'you lost #<!--old_rank--> spot on <!--from_handle-->\'s fan list',another:'and 1 other fan list dropped your rank',others:'and <!--grp_cnt--> other fan lists dropped your rank'}, 10552 points_add_login:{i:"You\'ve received a login bonus of 25 points for logging into BDSM.com.",we:"You\'ve received a login bonus of 25 points for logging into BDSM.com.",another:"You\'ve received a login bonus of 25 points for logging into BDSM.com.",others:"You\'ve received a login bonus of 25 points for logging into BDSM.com."}, 10553 view_upsell:{i:"saw a limited view of your profile",we:"saw a limited view of your profile",another:"and 1 other Standard Member saw a limited view of your profile",others:"and <!-- grp_cnt --> other Standard Members saw a limited view of your profile"}, 10554 model_online:{i:"Cam model {{from_handle}} wants you to view their webcam"}, 10555 model_intro:{i:"Cam model {{from_handle}} and {{grp_cnt}} other top models are online now!"}, 10556 gave_tips:{i:"Tipped you"} 10557 }, 10558 notification_cta: { 10559 message:"Message {{person}}", 10560 view:"Details", 10561 her:"Her", 10562 him:"Him", 10563 them:"Them",
10564 dismiss: "Dismiss" 10565 }, 10566 notification_row_urls: { 10567 flirts_with_me:"/p/interested.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&pwsid={{from_pwsid}}&trlid=javascript_notifications_defs-1&active_tab=flirt", 10568 email_me:"/p/mc/cover.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-1&folder=inbox", 10569 invites:"/p/network.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-1#friend_requests", 10570 accept:"/p/circle/people.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&status=1&action=show_friends&trlid=javascript_notifications_defs-5", 10571 view:"/p/interested.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&pwsid={{from_pwsid}}&trlid=javascript_notifications_defs-2&active_tab=profile_view", 10572// interested_view:"/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{from_pwsid}}&trlid=javascript_notifications_defs-7", 10573 video_comment:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&videoid={{media_id}}&type=video&trlid=javascript_notifications_defs-4&autoshow=1", 10574 photo_comment:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&aid={{album_id}}&type={{autoshow_type}}&photoid={{media_id}}&trlid=javascript_notifications_defs-5&autoshow=1", 10575 hotlist_add:"/p/interested.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&pwsid={{from_pwsid}}&trlid=javascript_notifications_defs-3&active_tab=hotlist", 10576 blog_comment:"/blog/{{blog_id}}/post_{{question_id}}.html?dcb=bdsm.com&jump={{data_id}}&navbar=1&trlid=javascript_notifications_defs-1&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--", 10577 group_post_add:"/intgroups/gi{{group_id}}/qi{{question_id}}/acview_thread_message.html", 10578 group_post_comment:"/intgroups/gi{{group_id}}/qi{{question_id}}/acview_thread_message.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-1"+"#{{response_id}}", 10579 photo_like:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&aid={{album_id}}&photoid={{media_id}}&type={{autoshow_type}}&trlid=javascript_notifications_defs-6&autoshow=1", 10580 photo_trending:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&photoid={{media_id}}&type=photo&trlid=javascript_notifications_defs-7&autoshow=1", 10581 photo_trending_friend:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
105815sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&photoid={{media_id}}&type=photo&trlid=javascript_notifications_defs-8&autoshow=1", 10582 photo_trending_hotlist:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&photoid={{media_id}}&type=photo&trlid=javascript_notifications_defs-9&autoshow=1", 10583 album_trending:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&aid={{album_id}}&photoid={{media_id}}&type=albumphoto&trlid=javascript_notifications_defs-10&autoshow=1", 10584 album_trending_friend:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&aid={{album_id}}&photoid={{media_id}}&type=albumphoto&trlid=javascript_notifications_defs-11&autoshow=1", 10585 album_trending_hotlist:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&aid={{album_id}}&photoid={{media_id}}&type=albumphoto&trlid=javascript_notifications_defs-12&autoshow=1", 10586 status_trending:(CD.Likebox?"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&statusid={{status_id}}&type=status&trlid=javascript_notifications_defs-13&autoshow=1":"/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{to_pwsid}}&trlid=javascript_notifications_defs-8"), 10587 status_comment:(CD.Likebox?"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&statusid={{status_id}}&type=status&trlid=javascript_notifications_defs-14&autoshow=1":"/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{to_pwsid}}&trlid=javascript_notifications_defs-9"), 10588 status_like:(CD.Likebox?"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&statusid={{status_id}}&type=status&trlid=javascript_notifications_defs-15&autoshow=1":"/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{to_pwsid}}&trlid=javascript_notifications_defs-10"), 10589 video_like:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&videoid={{media_id}}&type=video&trlid=javascript_notifications_defs-16&autoshow=1", 10590 video_trending:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&videoid={{media_id}}&type=video&trlid=javascript_notifications_defs-17&autoshow=1", 10591 video_trending_friend:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&videoid={{media_id}}&type=video&trlid=javascript_notifications_defs-18&autoshow=1", 10592 video_trending_hotlist:"/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
105925sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&videoid={{media_id}}&type=video&trlid=javascript_notifications_defs-19&autoshow=1", 10593 original_replied_photo_comment:"/p/?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--", 10594 original_replied_video_comment:"/p/?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--", 10595 watched_blog_post:"/blog/{{blog_id}}/post_{{question_id}}.html?dcb=bdsm.com&jump={{data_id}}&navbar=1&trlid=javascript_notifications_defs-2&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--", 10596 group_member_post:"/intgroups/gi{{group_id}}/qi{{question_id}}/acview_thread_message.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-2", 10597 group_mod_post:"/intgroups/gi{{group_id}}/qi{{question_id}}/acview_thread_message.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-3", 10598 group_mod_join:"/intgroups/gi{{group_id}}/acshow_group.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-4", 10599 testimonial_posted:"/p/circle/testimonials.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=viewall&trlid=javascript_notifications_defs-1", 10600 testimonial_approved:"/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{from_pwsid}}&trlid=javascript_notifications_defs-11", 10601 group_join:"/intgroups/gi{{group_id}}/acshow_group.html", 10602 blog_post_add:"/blog/{{blog_id}}/post_{{data_id}}.html?jump={{data_id}}&navbar=1&passthru_override=1", 10603 fan_add:"/go/page/top_fans_member_fanlist.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&pwsid={{to_pwsid}}&trlid=javascript_notifications_defs-3", 10604 fan_lower_rank:"/go/page/top_fans_member_fanlist.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&pwsid={{from_pwsid}}&trlid=javascript_notifications_defs-4", 10605 points_add_login:"/p/points.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-2", 10606 view_upsell:"https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do_contact=1&origin=sc_upsell&trlid=javascript_notifications_defs-12", 10607 model_online:"/live-model-chat?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&show=bio&stream={{from_handle}}&trlid=javascript_notifications_defs-1", 10608 model_intro:"/live-model-chat?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
106085sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=whos_online_page&trlid=javascript_notifications_defs-2", 10609 gave_tips:"/p/point_details.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-1" 10610 }, 10611 notification_profile_url: "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&mid={{from_pwsid}}&trlid=javascript_notifications_defs-12", 10612 notification_messagecenter_url: "/p/mc/cover.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_notifications_defs-2", 10613 interested_type_messages: { 10614 flirt: {i:'Flirted with Me',we:'Flirted with us:'}, 10615 hotlist: {i:'Hotlisted Me',we:'Hotlisted us:'}, 10616 profile_view: {i:'Viewed Me',we:'Viewed us'}, 10617 followed_me: {i:'Followed me',we:'Followed us'}, 10618 iicon_view: {i:'Viewed Me',we:'Viewed us'} 10619 }, 10620 interesting_type_messages: { 10621 flirt: {i:'Flirted',we:'Flirted'}, 10622 hotlist: {i:'Hotlisted',we:'Hotlisted'}, 10623 profile_view: {i:'Viewed',we:'Viewed'}, 10624 iicon_view: {i:'Viewed',we:'Viewed'} 10625 }, 10626 lang: { 10627 today: "Today", 10628 yesterday: "Yesterday", 10629 inactive_member: "Inactive Member", 10630 untitled_media: 'Untitled', 10631 my_note: "My note", 10632 add_note: "Add a note", 10633 remove: "Remove", 10634 last_visit: "Last visit", 10635 photo: "Photo", 10636 photos: "Photos", 10637 video: "Video", 10638 videos: "Videos", 10639 friend: "friend", 10640 friends: "Friends", 10641 fan: "fan", 10642 fans: "fans", 10643 member_since: "Member since" 10644 }, 10645 approved_types: [ 10646 "accept", 10647 "album_comment", 10648 "album_like", 10649 "blog_comment", 10650 "email_me", 10651 "flirts_with_me", 10652 "hotlist_add", 10653 "invites", 10654// "interested_view", 10655 "photo_comment", 10656 "photo_like", 10657 "photo_trending", 10658 "video_comment", 10659 "video_like", 10660 "video_trending", 10661 "view", 10662 "gave_tips", 10663 "group_member_post", 10664 "group_mod_join", 10665 "group_mod_post", 10666 "group_post_comment", 10667 "testimonial_approved", 10668 "testimonial_posted", 10669 "watched_blog_post", 10670 "status", 10671 "status_comment", 10672 "status_OP_comment", 10673 "status_like", 10674 "status_trending", 10675 "album_trending", 10676// "points_add_login", 10677 "fan_add", 10678 "fan_lower_rank", 10679 "view_upsell", 10680 "model_online", 10681 "model_intro" 10682 ] 10683 }/*end private config values*/ 10684 10685 return private_values[strName]; 10686}/* end public static function CONFIG */ 10687<!-- --></script>
10687<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-notification_soc5565-1578007935.js"></script>
10687 10688<!-- fruit2 with original css libraries --> 10689 10690<!-- P41138 CSS changes --> 10691 10692 10693 10694 10695 10696 10697<!-- --><div id="hiddenFlirtMenu" style="display:none;"> 10698 <ul class="flirtMenu"> 10699 <li class="hug"><a class="ml30" id="hiddenFlirt4" href="#">Hug</a></li> 10700 <li class="kiss"><a class="ml30" id="hiddenFlirt1" href="#">Kiss</a></li> 10701 <li class="smile"><a class="ml30" id="hiddenFlirt3" href="#">Smile</a></li> 10702 <li class="spank"><a class="ml30" id="hiddenFlirt5" href="#">Spank</a></li> 10703 <li class="wave"><a class="ml30" id="hiddenFlirt2" href="#">Wave</a></li> 10704 <li class="wink"><a class="ml30" id="hiddenFlirt0" href="#">Wink</a></li> 10705 </ul> 10706</div><!-- flirt_menu --> 10707<!-- --> 10708 10709 10710 10711 10712 10713<!-- --> 10714 10715 10716 10717 10718<!-- --> 10719 10720 10721<!-- cobrandImgDirhttps://secureimage.securedataimages.com/images/bdsm.com/dcobrand 10722-->
10722<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-utility-1559284466.js"></script>
10722<script> 10723 //<![CDATA[ 10724 ajax = {}; 10725ajax.x = function(){ 10726 if (document.all) { 10727 try { 10728 return new ActiveXObject("MSXML2.XMLHTTP.3.0"); 10729 } 10730 catch (e) { 10731 10732 try { 10733 return new ActiveXObject('Microsoft.XMLHTTP') 10734 } 10735 catch (e) { 10736 return new XMLHttpRequest() 10737 } 10738 } 10739 } 10740 else { 10741 return new XMLHttpRequest() 10742 } 10743}; 10744ajax.send = function(u, f, m, a){ 10745 u = u.replace(/^http(s)?\:\/\/[^\/]+/, ''); 10746 u += (u.indexOf('?') >= 0) ? '&rid=' + (new Date()).valueOf() + '&' : '?rid=' + (new Date()).valueOf() + '&'; 10747 var x = ajax.x(); 10748 m = (m) ? m : 'GET'; 10749 a = (a) ? a : null; 10750 x.open(m, u, true); 10751 x.onreadystatechange = function(){ 10752 if (x.readyState == 4) { 10753 if (x.status == 302) { 10754 ajax.get(x.getResponseHeader("Location"), f); 10755 } 10756 else { 10757 f(x) 10758 } 10759 } 10760 }; 10761 if (m == 'POST') { 10762 x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 10763 } 10764 try { x.responseType = 'msxml-document'; } catch(e){} 10765 x.send(a) 10766}; 10767self.string_to_xml = function(a){ 10768 var x = null; 10769 a = a.replace(/\<\!\-\-/, '').replace(/\-\-\>/, ''); 10770 if (window.ActiveXObject || "ActiveXObject" in window) { 10771 if(document.documentMode && +document.documentMode > 10) { 10772 x = new ActiveXObject("MSXML2.DOMDocument.6.0"); 10773 } else { 10774 x = new ActiveXObject("Microsoft.XMLDOM"); 10775 } 10776 10777 x.async = "false"; 10778 x.loadXML(a); 10779 } 10780 else { 10781 var s = '<?' + 'xml version="1.0"?>' + a; 10782 x = (new DOMParser()).parseFromString(s, "text/xml"); 10783 10784 if (x.documentElement.nodeName=="parsererror") 10785 { 10786 //alert("Error in XSLT\n\n" + x.documentElement.childNodes[0].nodeValue); 10787 return false; 10788 } 10789 } 10790 return x 10791}; 10792self.xml_xslt_transform = function(xml, xslt){ 10793 10794 var mydiv = document.createElement('DIV'); 10795 10796 10797 10798 /* 10799 Transforms a XML document to a HTML string by using a XSLT document 10800 1. Use type XSLTProcessor, if browser (FF, Safari, Chrome etc) supports it 10801 2. Use function [transformNode] on the XmlDocument, if browser (IE6, IE7, IE8) supports it 10802 3. Use function transform on the XsltProcessor used for IE9 (which doesn't support [transformNode] any more) 10803 4. Throws an error, when both types are not supported 10804 */ 10805 function TransformToHtmlText(xmlDoc, xsltDoc) { 10806 // 1. 10807 if (typeof (XSLTProcessor) != "undefined") { 10808 var xsltProcessor = new XSLTProcessor(); 10809 xsltProcessor.importStylesheet(xsltDoc); 10810 var xmlFragment = xsltProcessor.transformToFragment(xmlDoc, document); 10811 return GetXmlStringFromXmlDoc(xmlFragment); 10812 } 10813 // 2. 10814 if (typeof (xmlDoc.transformNode) != "undefined") { 10815 return xmlDoc.transformNode(xsltDoc); 10816 } 10817 else { 10818 10819 try { 10820 // 3 10821 if (window.ActiveXObject || "ActiveXObject" in window) { 10822 var xslt = new ActiveXObject("Msxml2.XSLTemplate"); 10823 var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 10824 xslDoc.loadXML(xsltDoc.xml); 10825 xslt.stylesheet = xslDoc; 10826 var xslProc = xslt.createProcessor(); 10827 xslProc.input = xmlDoc; 10828 xslProc.transform(); 10829 10830 return xslProc.output; 10831 } 10832 } 10833 catch (e) { 10834 // 4 10835 alert("The type [XSLTProcessor] and the function [XmlDocument.transformNode] are not supported by this browser, can't transform XML document to HTML string!"); 10836 return null; 10837 } 10838 10839 } 10840 } 10841 10842 10843 if (window.ActiveXObject || "ActiveXObject" in window) { 10844 10845 mydiv.innerHTML = TransformToHtmlText(xml, xslt); 10846 } 10847 else if (document.implementation && document.implementation.createDocument) { 10848 10849 xsltProcessor = new XSLTProcessor(); 10850 xsltProcessor.importStylesheet(xslt); 10851 10852 mydiv.appendChild(xsltProcessor.transformToFragment(xml, document)); 10853 10854 10855 10856 } 10857 10858 if (mydiv.firstChild && mydiv.firstChild.tagName) {
10859 return mydiv.firstChild; 10860 } 10861 else if (mydiv.firstChild && mydiv.firstChild.nextSibling && mydiv.firstChild.nextSibling.tagName) { 10862 10863 return mydiv.firstChild.nextSibling; 10864 } 10865 else { 10866 10867 return false; 10868 } 10869}; 10870 10871 10872self.render_simple = function(a, b){ 10873 10874 var d = xml_xslt_transform(a, b); 10875 if (!d.id) { 10876 return false; 10877 } 10878 else if (document.getElementById(d.id)) { 10879 document.getElementById(d.id).parentNode.replaceChild(d, document.getElementById(d.id)); 10880 } 10881 else { 10882 document.body.appendChild(d); 10883 }; 10884 10885 !function($){ 10886 var $d = $(d) 10887 10888 $('a', $d).each(function(){ 10889 var $this = $(this), 10890 _href = this.href; 10891 10892 if( !_href || /javascript\:/i.test(_href) ) return; 10893 10894 if( typeof _href.cobrandURL === 'function') { 10895 this.href = _href.cobrandURL(); 10896 } else { 10897 this.href = _href; 10898 } 10899 }) 10900 }(jQuery); 10901 10902 try{ 10903 document.getElementById(d.id).innerHTML = document.getElementById(d.id).innerHTML.replace(/&#/g, '&#'); 10904 document.getElementById(d.id).innerHTML = document.getElementById(d.id).innerHTML.replace(/&/g, '&'); 10905 } catch (e) {} 10906}; 10907 10908self.object_to_xml = function(a, b){ 10909 var s = ''; 10910 b = b ? b : 'object'; 10911 for (var k in a) { 10912 s += '<' + k + '><![CD' + 'ATA[' + a[k] + ']' + ']></' + k + '>' 10913 }; 10914 return string_to_xml('<' + b + '>' + s + '</' + b + '>') 10915}; 10916self.json_to_xml = function(a, b, c, d){ 10917 b = b ? b : 'groupshows'; 10918 c = c ? c : 'node'; 10919 var xml = string_to_xml('<list id="' + b + '" anon="1" admin="0"/>'); 10920 for (var i = 0; i < a.length; i++) { 10921 var node = string_to_xml('<' + c + '/>'); 10922 if (d == 1) { 10923 node.documentElement.setAttribute('ind', i) 10924 }; 10925 for (var att in a[i]) { 10926 try { 10927 node.documentElement.setAttribute(att, a[i][att]); 10928 } 10929 catch (e) { 10930 } 10931 }; 10932 xml.documentElement.appendChild(node.documentElement.cloneNode(true)); 10933 }; 10934 xml.documentElement.setAttribute('register_link', '/p/register.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=ajax_xml_xslt-2'); 10935 return xml; 10936} 10937 //]]> </script>
10937 10938
10939<script src="https://secureimage.securedataimages.com/css/live_cd/bdsm/english/11837/secure/info_icon_xslt_beta_new-1490210693.js"></script>
10939 10940
10941<script type="text/javascript"> 10942 10943function createCookie(name,value,days) { 10944 if (days) { 10945 var date = new Date(); 10946 date.setTime(date.getTime()+(days*24*60*60*1000)); 10947 var expires = "; expires="+date.toGMTString(); 10948 } 10949 else var expires = ""; 10950 document.cookie = name+"="+value+expires+"; path=/; domain=bdsm.com"; 10951 10952} 10953 10954function readCookie(name) { 10955 var nameEQ = name + "="; 10956 var ca = document.cookie.split(';'); 10957 for(var i=0;i < ca.length;i++) { 10958 var c = ca[i]; 10959 while (c.charAt(0)==' ') c = c.substring(1,c.length); 10960 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 10961 } 10962 return null; 10963}</script>
vendor: 1 bytes, line 10963
10963
10964<script type="text/javascript"> 10965var CD = CD || {} 10966CD.toRad = function(a) { 10967 return a * Math.PI / 180; 10968}; 10969 10970CD.geo_distance = function (f, g) { 10971 CD.lat1 = $j("form[name=dropdownSearch] input[name=lat]").val(); 10972 CD.lon1 = $j("form[name=dropdownSearch] input[name=lon]").val(); 10973 CD.lat2 = f; 10974 CD.lon2 = g; 10975 CD.R = 6371; 10976 CD.dLat = CD.toRad(CD.lat2 - CD.lat1); 10977 CD.dLon = CD.toRad(CD.lon2 - CD.lon1); 10978 CD.a = Math.sin(CD.dLat / 2) * Math.sin(CD.dLat / 2) + Math.cos(CD.toRad(CD.lat1)) * Math.cos(CD.toRad(CD.lat2)) * Math.sin(CD.dLon / 2) * Math.sin(CD.dLon / 2); 10979 CD.c = 2 * Math.atan2(Math.sqrt(CD.a), Math.sqrt(1 - CD.a)); 10980 CD.d = CD.R * CD.c; 10981 CD.m = CD.d / 1.60934; 10982 if ($j("form[name=dropdownSearch] input[name=DISTANCE_MILES]").val() == 1) { 10983 if(Math.round(CD.m) < 2) { 10984 return Math.round(CD.m)+' mile away'; 10985 } else { 10986 return Math.round(CD.m)+' miles away'; 10987 } 10988 } else { 10989 if(Math.round(CD.d) < 2) { 10990 return Math.round(CD.d)+' kilometer away'; 10991 } else { 10992 return Math.round(CD.d)+' kilometers away'; 10993 } 10994 } 10995}; 10996 10997CD.check_online_now = function (a) { 10998 CD.t1 = {}, CD.t2 = {}, CD.difference = {}, CD.dateArray = {}; 10999 CD.reggie = new RegExp(/(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/g); 11000 CD.dateArray = CD.reggie.exec(a); 11001 if (CD.dateArray) { 11002 CD.t1 = new Date((CD.dateArray[1]), (CD.dateArray[2]) - 1, (CD.dateArray[3]), (CD.dateArray[4]), (CD.dateArray[5]), (CD.dateArray[6])); 11003 CD.t2 = new Date(); 11004 CD.difference = (CD.t2 - CD.t1) / 1000; 11005 if (CD.difference < 7200) { 11006 return 1; 11007 } else { 11008 return 0; 11009 } 11010 } else { 11011 return 0; 11012 } 11013}; 11014 11015 11016 11017 self.info_template = null; 11018 var arrowpos = 0; 11019 var winW = 0; 11020 //IE 11021 if(!window.innerWidth) 11022 { 11023 winW = document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth 11024 } 11025 //w3c 11026 else 11027 { 11028 winW = window.innerWidth; 11029 } 11030 if (document.all) { 11031 var oldonload = window.onload; 11032 if (typeof window.onload != 'function') { 11033 window.onload = function () {self.loaded = 'true'}; 11034 } else { 11035 window.onload = function() { 11036 if (oldonload) { 11037 oldonload(); 11038 } 11039 self.loaded = 'true'; 11040 } 11041 } 11042 } else { 11043 self.loaded = 'true'; 11044 } 11045 11046 self.info_icon = function (a) { 11047 if (CD.IiconAPI) { 11048 CD.IiconAPI.handleIiconMouseOver.call( a, jQuery.Event('mouseenter') ); 11049 } 11050 } 11051 self.get_pwsid = function (a) { 11052 var pwsid = (a.src.match(/(\d+\_\d+)\D+/)) ? a.src.match(/(\d+\_\d+)\D+/)[1] : ''; 11053 return pwsid; 11054 } 11055 self.display_info = function (pwsid) { 11056 if (!self.members) { 11057 self.members = {}; 11058 } 11059 if (!members[pwsid]) { 11060 var timestamp = new Date; 11061 11062//-------------------------abtest 37778SOAiicon ---------------------------------------------------- 11063 var ajaxurl = "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_member&trlid=info_icon_xslt_beta_new-13;ajax=1;mid="+pwsid+';timestamp='+timestamp.valueOf() 11064//-------------------------END abtest 37778SOAiicon ---------------------------------------------------- 11065 11066 ajax.send(ajaxurl, 11067 function(r) { 11068 if (r.responseXML) { 11069 members[pwsid] = r.responseXML; 11070 members[pwsid].documentElement.setAttribute('membergender','') 11071 members[pwsid].documentElement.setAttribute('memberlevel','') 11072 members[pwsid].documentElement.setAttribute('filter','') 11073 members[pwsid].documentElement.setAttribute('standard_contact','') 11074 members[pwsid].documentElement.setAttribute('format','') 11075 members[pwsid].documentElement.setAttribute('gallery','gallery') 11076 if (readCookie('ANON_CONFIRM') == 'TRUE') { 11077 members[pwsid].documentElement.setAttribute('filter',0) 11078 } else { 11079 members[pwsid].documentElement.setAttribute('filter',1) 11080 } 11081 /* here we are setting links for external xslt file */
11082 var profileurl = '/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_member&trlid=info_icon_xslt_beta_new-14'; 11083 var origin_check = "0", 11084 orderurl; 11085 var order_url_no_origin = "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=info_icon_xslt_beta_new-13"; 11086 var manage_photos ='/p/manage_photos.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do=show_profile_photo_page&trlid=info_icon_xslt_beta_new-3'; 11087 var member_level=''; 11088 var member_country=''; 11089 var member_language='english'; 11090 var v_pdf_pwsid = ''; 11091 11092 var video_manager_url= '/p/video/manager.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=view_indexed_video&trlid=info_icon_xslt_beta_new-2'; 11093 11094 var friends_url= '/p/circle/people.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&status=1&action=show_friends&trlid=info_icon_xslt_beta_new-6'; 11095 11096 var manage_photos_url='/p/manage_photos.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do=show_profile_photo_page&trlid=info_icon_xslt_beta_new-4'; 11097 11098 if ( origin_check == 1 ) { 11099 orderurl = "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=stdfreeprofile&trlid=info_icon_xslt_beta_new-14"; 11100 } else { 11101 orderurl = "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_member&trlid=info_icon_xslt_beta_new-15"; 11102 } 11103 11104 var winkurl ='/p/wink.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_wink&trlid=info_icon_xslt_beta_new-1'; 11105 var registerurl ='/p/register.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_refer&trlid=info_icon_xslt_beta_new-1'; 11106 var winkupsaleurl = '/go/page/wink_upsale.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_wink_upsale&trlid=info_icon_xslt_beta_new-5'; 11107 var hotlisturl = '/p/hotlist.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=iicon_hotlist&trlid=info_icon_xslt_beta_new-1'; 11108 var recommendurl = '/p/recommendation.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=info_icon_xslt_beta_new-1'; 11109 members[pwsid].documentElement.setAttribute('profileurl',profileurl); 11110 members[pwsid].documentElement.setAttribute('orderurl',orderurl); 11111 members[pwsid].documentElement.setAttribute('order_url_no_origin',order_url_no_origin); 11112 members[pwsid].documentElement.setAttribute('manage_p
11112hotos',manage_photos); 11113 members[pwsid].documentElement.setAttribute('member_level',member_level); 11114 members[pwsid].documentElement.setAttribute('member_country',member_country); 11115 members[pwsid].documentElement.setAttribute('member_language',member_language); 11116 members[pwsid].documentElement.setAttribute('v_pdf_pwsid',v_pdf_pwsid); 11117 members[pwsid].documentElement.setAttribute('video_manager_url',video_manager_url); 11118 members[pwsid].documentElement.setAttribute('friends_url',friends_url); 11119 members[pwsid].documentElement.setAttribute('manage_photos_url',manage_photos_url); 11120 members[pwsid].documentElement.setAttribute('registerurl',registerurl); 11121 members[pwsid].documentElement.setAttribute('winkrul',winkurl); 11122 members[pwsid].documentElement.setAttribute('winkupsaleurl',winkupsaleurl); 11123 members[pwsid].documentElement.setAttribute('hotlisturl',hotlisturl); 11124 members[pwsid].documentElement.setAttribute('recommendurl',recommendurl); 11125 members[pwsid].documentElement.setAttribute('is_callback',1); 11126 members[pwsid].documentElement.setAttribute('purchase_profile_price','$9.90'); 11127 11128 if (current.length && current[0] == pwsid) { 11129 members[pwsid].documentElement.setAttribute('p',current[3]) 11130 members[pwsid].documentElement.setAttribute('x',current[1]) 11131 members[pwsid].documentElement.setAttribute('y',current[2]) 11132 if(arrowpos == 1) 11133 { 11134 members[pwsid].documentElement.setAttribute('c','icon_flipleft'); 11135 } 11136 else 11137 { 11138 members[pwsid].documentElement.setAttribute('c',''); 11139 } 11140 //setTimeout(function(){delayed_render(pwsid,current[0])},1000) 11141 setTimeout(function(){delayed_render(pwsid,current[0])},500) 11142 } 11143 } 11144 } 11145 ) 11146 //ajax.send("http://208.88.181.102/p/member_soa.cgi?site=ffadult&mid="+pwsid+"&m=&iicon=1&do_json=1",function(r){}); 11147 members[pwsid] = string_to_xml("<response/>") 11148 } 11149 members[pwsid].documentElement.setAttribute('p',current[3]) 11150 members[pwsid].documentElement.setAttribute('x',current[1]) 11151 members[pwsid].documentElement.setAttribute('y',current[2]) 11152 if(arrowpos == 1) 11153 { 11154 members[pwsid].documentElement.setAttribute('c','icon_flipleft'); 11155 } 11156 else 11157 { 11158 members[pwsid].documentElement.setAttribute('c',''); 11159 } 11160 //setTimeout(function(){delayed_render(pwsid)},1000) 11161 setTimeout(function(){delayed_render(pwsid)},500) 11162 } 11163 self.delayed_render = function(a) { 11164 if (a == current[0]) { 11165 render_simple(members[a],info_icon_xslt_beta_new); 11166 } 11167 } 11168 self.findpos = function (a) { 11169 var curleft = curtop = 0; 11170 if (a.offsetParent) { 11171 curleft = a.offsetLeft; 11172 curtop = a.offsetTop; 11173 while (a = a.offsetParent) { 11174 curleft += a.offsetLeft; 11175 curtop += a.offsetTop; 11176 } 11177 } 11178 return [curleft,curtop]; 11179 } 11180 11181 self.hide_info = function () { 11182 if (CD.IiconAPI) { 11183 CD.IiconAPI.handleIiconMouseOut(); 11184 } 11185 } 11186 self.xsend_jsx = function (a,b) { 11187 var script = document.createElement('script'); 11188 var myid = (b)? b : 'info_icon' 11189 script.src = a+';jsx=1;timestamp='+(new Date).valueOf() 11190 script.type = 'text/javascript' 11191 script.id = myid 11192 if (document.getElementById(myid)) { 11193 document.getElementsByTagName('head')[0].replaceChild(script,document.getElementById(myid)); 11194 } else { 11195 document.getElementsByTagName('head')[0].appendChild(script); 11196 } 11197 return false; 11198 } 11199</script>
11199<!-- --> 11200
11201<script> 11202 admin_tag = "0"; 11203 no_notification_text = "No new notifications"; 11204 global_uid = ""; 11205 mem_level = ""; 11206 srch_highlight = ""; 11207 global_form_sex = ""; 11208 global_form_who = "r_T4Qf80A.CI7SqDTa_ZQ8V83EG.ZrCdK9w9_WODv90ak2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ5eqz7fHZv5A_iTFH7NDr8T"; 11209 is_mobile = ""; 11210 has_h264 = ""; 11211 email_notif_flag = ""; 11212 email_notif_id = "" 11213 email_notif_photoid = ""; 11214 email_notif_videoid = ""; 11215 email_notif_type = ""; 11216 global_handle = ""; 11217 global_gender = ""; 11218 notifications_title = "Notifications"; 11219 settings_title = "Settings"; 11220 activities_title = "Activities"; 11221 remove_all_title = "Remove All"; 11222 acb_upgrade_title = "UPGRADE"; 11223 acb_view_more = "View More"; 11224 no_notifications_text = "No notifications"; 11225 activity_text_days_ago = "days ago"; 11226 activity_text_day_ago = "day ago"; 11227 activity_text_hours_ago = "hours ago"; 11228 activity_text_hour_ago = "hour ago"; 11229 activity_text_minutes_ago = "minutes ago"; 11230 activity_text_minute_ago = "minute ago"; 11231 activity_text_seconds_ago = "seconds ago"; 11232 activity_text_second_ago = "second ago"; 11233 genderMale = "M"; 11234 genderFemale = "F"; 11235 genderTstv = "T"; 11236 genderGroup = "G"; 11237 test38566 = 0; 11238 admin_tool_tag = ""; 11239 var notif_url_version = 2; 11240 content_filter_pref_link = "/p/update.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=content_filter_preferences"; 11241 var is_abtest_38990 = 0</script>
vendor: 1 bytes, line 11241
11241
11242<script> 11243 newMC37767 = 0;</script>
11243 11244 11245 11246 11247<!-- no_erotic: --> 11248 11249<body id="bdsm" class="english etc_ADS filter_active Naughty "> 11250
11251<script> 11252 var abtest_37505AFFSocialNetwork = 0; 11253 11254var saved_search_params = saved_search_params || {}; 11255 11256var fruit = 0; 11257self.addToXml = function (b, a) { 11258 for (c in a) b.documentElement.setAttribute(c, a[c]) 11259}; 11260self.getAttributeList = function(a) 11261{ 11262 11263 var video_manager_url = '/p/video/manager.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=view_indexed_video&trlid=javascript_spinner-3'; 11264 var manage_photos_url = '/p/manage_photos.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&do=show_profile_photo_page&trlid=javascript_spinner-5'; 11265 var show_photos_url = '/p/manage_photos.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-6'; 11266 11267 var attrArray = {} 11268 attrArray = jQuery.extend(attrArray, { 11269 'fruit': fruit, 11270 'abtest_37505AFFSocialNetwork': abtest_37505AFFSocialNetwork, 11271 'member_handle': '', 11272 'member_uid': '', 11273 'member_level': "", 11274 'member_global_sex': "", 11275 'member_global_age': "", 11276 'order_link': "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-16", 11277 'order_wink_link': "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=wink&trlid=javascript_spinner-17", 11278 'order_member_link': "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=member&trlid=javascript_spinner-18", 11279 'order_invite_link': "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=invite&trlid=javascript_spinner-19", 11280 'order_likebox_pwsid': "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=likebox&trlid=javascript_spinner-20", 11281 'mlink': "/p/member.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-15&", 11282 'home_show_sex': "", 11283 'home_max_age': "", 11284 'home_min_age': "", 11285 'my_account_update_link': "/p/update.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=my_account_update_cupid_preferences&trlid=javascript_spinner-4", 11286 'video_manager_url': video_manager_url, 11287 //'medley_adv': medley_adv_url, 11288 'manage_photos_url': manage_photos_url, 11289 'show_photos_url': show_photos_url, 11290 'V_PDF_db_user_id':"", 11291 'P_PDF_db_user_id':"", 11292 'SITE':"bdsm", 11293 'V_PDF_no_erotic':"", 11294 'GRAPHICS_DOMAIN':"https://secureimage.securedataimages.com", 11295 'photo_count':"", 11296 'report_abuse_url':"/go/page/abuse.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=photo&trlid=javascript_spinner-6", 11297 'PURCHASED_VIEW':"", 11298 'purchase_profile_price':"$9.90" 11299 }); 11300
11301 if (typeof(h_onclick)!="undefined"){ 11302 attrArray = jQuery.extend(attrArray, { 11303 'display_img_prev_image':h_onclick.display_img_prev_image, 11304 'display_img_next_image':h_onclick.display_img_next_image 11305 }); 11306 } 11307 11308 addToXml(a, attrArray); 11309}; 11310 11311/*variable added to seperate fruit xslt from old xslt*/ 11312self.spinner = function (a) { 11313 /* basic ajax wrapper that makes it easy to add effects to things. */ 11314 /* add a bunch of error checking in case element doesn't exist and such.. */ 11315 var s = document.createElement('div'); 11316 var token; 11317 if(typeof CD.profile !== "undefined"){ 11318 if(typeof CD.profile.photoAjaxCounter!== "undefined"){ 11319 token = ++CD.profile.photoAjaxCounter; 11320 } 11321 } 11322 if (document.getElementById(a.target)) { 11323 11324 s.style.width = document.getElementById(a.target).clientWidth + 'px'; 11325 if (fruit === 1) { 11326 s.style.height = document.getElementById(a.target).clientHeight + 'px'; 11327 } else if(a.spinner_target_only && document.getElementById(a.spinner_target_only)){ 11328 s.style.height = (document.getElementById(a.spinner_target_only).clientHeight + 40) + 'px'; 11329 } else { 11330 s.style.height = (document.getElementById(a.target).clientHeight + 40) + 'px'; 11331 } 11332 } else { 11333 log(a.target + ' you are trying to point output into this div, but it doesn\'t exist.'); 11334 return false; 11335 } 11336 s.className = 'spinner_bg'; 11337 s.id = 'copy_of_' + a.target; 11338 document.getElementById(a.target).appendChild(s); 11339 var attrArray = {} 11340 11341 if (!a.mytype && a.myurl) { 11342 if (a.myurl.match('/memsearch.cgi') || a.myurl.match('/sex-search')) { 11343 // Yes this is ugly but the reason we are here is even worst 11344 a.mytype = 'all'; 11345 } 11346 } 11347 if (a.no_ajax && a.resp) { 11348 var xml = a.resp; 11349 global_obj.curr_resp = a.resp; 11350 if (a.mytype) { 11351 attrArray = { 11352 'mytype': a.mytype 11353 }; 11354 } else { 11355 attrArray = jQuery.extend(attrArray, { 11356 'mytype': '' 11357 }); 11358 } 11359 attrArray = jQuery.extend(attrArray, { 11360 'section': a.target, 11361 'showprev': a.show_p 11362 }); 11363 11364 addToXml(xml, attrArray); 11365 getAttributeList(xml); 11366 render_simple(xml, main_templates[a.cell]); 11367 11368 if (typeof (a.cb) != 'undefined') { 11369 eval(a.cb({ 11370 'resp': xml, 11371 'mytype': a.mytype 11372 })); 11373 } 11374 if(typeof(a.callback)!=='undefined'){ 11375 a.callback(); 11376 } 11377 11378 } else { 11379 ajax.send(a.myurl + '&ajax_xml=1', function (r) { 11380 if(typeof CD.profile !== "undefined"){ 11381 if(token !== CD.profile.photoAjaxCounter){ 11382 return; 11383 } 11384 } 11385 var xml = r.responseXML; 11386 11387 // Try to salvage when comments break the XML. 11388 if(!xml || !xml.documentElement){ 11389 11390 if (DOMParser && r.responseText) { 11391 var cs, ce, ncs, nce, parser = new DOMParser(); 11392 11393 ce = r.responseText.indexOf('<comments_disabled>'); 11394 cs = r.responseText.indexOf('<comment'); 11395 if (cs > -1 && ce > -1) { 11396 ncs = r.responseText.substring(0, cs); 11397 nce = r.responseText.substring(ce, r.responseText.length); 11398 xml = parser.parseFromString(ncs+nce, "application/xml"); 11399 } 11400 } 11401 11402 } 11403 11404 if(xml == null || xml == ''){ 11405 s.style.display == 'none'; 11406 document.getElementById(a.target).removeChild(s); 11407 11408 }else{ 11409 if (typeof global_obj != "undefined") { 11410 global_obj.curr_resp = r.responseXML; 11411 } 11412 if (self.sections) { 11413 xml.documentElement.appendChild(self.sections.documentElement.cloneNode(true)); 11414 } 11415 getAttributeList(xml); 11416 11417 11418 if (a.mytype) { 11419 attrArray = jQuery.extend(attrArray, { 11420 'mytype': a.mytype 11421 }); 11422 11423 switch (a.mytype.toLowerCase()) { 11424 case 'active blogs': 11425 attrArray = jQuery.extend(attrArray, { 11426 'home_blog_view_more': "/blog/list_all_popular_blogs.html?dcb=bdsm.com&trlid=javascript_spinner-3&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
114265sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" 11427 }); 11428 break; 11429 case 'my blogs': 11430 attrArray = jQuery.extend(attrArray, { 11431 'stuff_blog_view_more': "/blog//index.html?dcb=bdsm.com&trlid=javascript_spinner-4&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--", 11432 'stuff_my_blog': "/blog//index.html?dcb=bdsm.com&trlid=javascript_spinner-5&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--", 11433 'create_blog': "/blog/addform.html?dcb=bdsm.com&trlid=javascript_spinner-6&type=blog&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" 11434 }); 11435 break; 11436 case 'active groups': 11437 attrArray = jQuery.extend(attrArray, { 11438 'home_group_view_more': "/intgroups/aclist_active_groups.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-5" 11439 }); 11440 break; 11441 case 'my watched posts': 11442 attrArray = jQuery.extend(attrArray, { 11443 'my_watched_posts': "/blog/index.html?dcb=bdsm.com&trlid=javascript_spinner-7&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" 11444 }); 11445 break; 11446 case 'live member broadcast': 11447 attrArray = jQuery.extend(attrArray, { 11448 'home_lmb_view_more': "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-8" 11449 }); 11450 break; 11451 case 'hottest albums': 11452 attrArray = jQuery.extend(attrArray, { 11453 'home_album_view_more': "/go/page/social_networking.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&item=albums&type=hottest&trlid=javascript_spinner-7" 11454 }); 11455 break; 11456 case 'online matches': 11457 attrArray = jQuery.extend(attrArray, { 11458 'home_online_matches_view_more': "/p/quick_search.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&page_type=won&trlid=javascript_spinner-1&match_race=1&from_cover_page=1" 11459 }); 11460 break; 11461 case 'hottest photos': 11462 attrArray = jQuery.extend(attrArray, { 11463 'home_hottest_photos_view_more': "/go/page/social_networking.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&sort=top&action=hottest&item=photos&type=hottest&trlid=javascript_spinner-8" 11464 }); 11465 break; 11466 case 'hottest members': 11467 attrArray = jQuery.extend(attrArray, { 11468 'home_hottest_members_view_more': "/go/page/social_networking.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
114685sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&item=members&type=hottest&trlid=javascript_spinner-9" 11469 }); 11470 break; 11471 case 'chat rooms': 11472 attrArray = jQuery.extend(attrArray, { 11473 'home_chat_rooms_view_more': "/p/chat/makerooms.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-1", 11474 'home_make_chat_room': "/p/chat/makerooms.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-2&room=interest" 11475 }); 11476 break; 11477 case 'hottest videos': 11478 attrArray = jQuery.extend(attrArray, { 11479 'home_hottest_videos_view_more': "/p/video/manager.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&order_by=user_rating&date_range=7_day&item=videos&action=social_videos&type=hottest&trlid=javascript_spinner-4" 11480 }); 11481 break; 11482 case 'live model chat': 11483 attrArray = jQuery.extend(attrArray, { 11484 'home_live_model_chat_view_more': "/p/cams_videos/?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=whos_online_page&trlid=javascript_spinner-1" 11485 }); 11486 break; 11487 case 'friends': 11488 attrArray = jQuery.extend(attrArray, { 11489 'stuff_friends_view_more': "/p/network.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-2" 11490 }); 11491 break; 11492 case 'hot lists': 11493 attrArray = jQuery.extend(attrArray, { 11494 'stuff_hot_lists_view_more': "/p/hotlist.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-2" 11495 }); 11496 break; 11497 case 'favourite photos': 11498 attrArray = jQuery.extend(attrArray, { 11499 'stuff_favourite_photos_view_more': "/p/photo.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=favorites&trlid=javascript_spinner-1" 11500 }); 11501 break; 11502 case 'my groups': 11503 attrArray = jQuery.extend(attrArray, { 11504 'stuff_my_groups_view_more': "/intgroups/acview_member_main.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-6", 11505 'find_a_group': "/intgroups/aclist_all_recent_groups.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-7&qtype=text", 11506 'create_your_group': "/go/page/interest_group_create_new_group_instruction.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo
115065sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=javascript_spinner-10" 11507 }); 11508 break; 11509 case 'friends_albums': 11510 attrArray = jQuery.extend(attrArray, { 11511 'stuff_friends_albums_view_more': "/p/albums.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&action=list_all_friends&trlid=javascript_spinner-1&show_sex=&max_age=&min_age=" 11512 }); 11513 break; 11514 11515 default: 11516 break; 11517 } 11518 } else { 11519 attrArray = jQuery.extend(attrArray, { 11520 'mytype': '' 11521 }); 11522 } 11523 11524 attrArray = jQuery.extend(attrArray, { 11525 'section': a.target, 11526 'showprev': a.show_p 11527 }); 11528 11529 if (typeof (a.attrib) != 'undefined') { 11530 attrArray = jQuery.extend(attrArray, a.attrib); 11531 } 11532 11533 addToXml(xml, attrArray); 11534 render_simple(xml, main_templates[a.cell]); 11535 11536 /* check if actual function before doing call-back */ 11537 if (typeof (a.cb) != 'undefined') { 11538 eval(a.cb({ 11539 'resp': r.responseXML, 11540 'mytype': a.mytype 11541 })); 11542 } 11543 11544 11545 //if (get_savedsearch()) { 11546 var xmlOptions = xml.getElementsByTagName("o")[0]; 11547 if (xmlOptions) { 11548 for (i=0;i<xmlOptions.childNodes.length;i++){ 11549 if (xmlOptions) { 11550 if (xmlOptions.childNodes[i].nodeName != "#text") { 11551 var tagName = xmlOptions.childNodes[i].nodeName; 11552 var valueName = xmlOptions.childNodes[i].textContent; 11553 saved_search_params[tagName] = valueName; 11554 } 11555 } 11556 } 11557 if(typeof update_page_title_after_search !== "undefined"){ 11558 update_page_title_after_search(saved_search_params); 11559 } 11560 } 11561 //} 11562 if(typeof(a.callback)!=='undefined'){ 11563 a.callback(); 11564 } 11565 } 11566 11567 }) 11568 } 11569 return false; 11570} 11571</script>
11571 11572 11573<!-- --> 11574<div id="dcb"> 11575 <div id="viewport" class="guest"> 11576 11577 11578 11579 11580 11581 11582 11583 11584
11584<script type="text/javascript"> 11585 11586 // Videos 11587 var confirmWindow = null; 11588 var videoUrl = null; 11589 11590 function confirmViewErotic( link ) { 11591 confirmWindow = window.open('/go/page/video_erotic_warning.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&type=video&', 'tobeclosed', 'height=130,width=300,location=no,menubar=no,resizable=no'); 11592 videoUrl = link; 11593 } 11594 11595 function showEroticVideo( bool ) { 11596 if ( confirmWindow ) { 11597 confirmWindow.close(); 11598 } 11599 11600 if ( bool ) { 11601 window.location = videoUrl; 11602 } 11603 } 11604 11605 11606 // Webcams 11607 11608 function confirmEroticCam( a, b, c, d ) { 11609 var tmpConcat = '&var_a=' + a + '&var_b=' + b + '&var_c=' + c + '&var_d=' + d; 11610 var longlink = '/go/page/video_erotic_warning.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&askmeforaphoto=1&type=cam&vars='+tmpConcat; 11611 confirmWindow = window.open( longlink, 'tobeclosed', 'height=130,width=300,location=no,menubar=no,resizable=no'); 11612 } 11613 11614 function showEroticCam( bool, var_a, var_b, var_c, var_d ) { 11615 if ( confirmWindow ) { 11616 confirmWindow.close(); 11617 } 11618 11619 if ( bool ) { 11620 openpopup( var_a, var_b, var_c, var_d ); 11621 } 11622 } 11623 </script>
11623 11624 11625 11626
11627<script id="imc_messenger" type="text/x-handlebars-template"> 11628 <div id="imcw"> 11629 <div class="imcw_header"> 11630 <div class="col-md-9 title">Instant Messages</div> 11631 <label class="switch col-md-3"> 11632 <input data-switch="online-offline" data-click="toggleOnlineStatus" type="checkbox" checked> 11633 <div class="slider round"> 11634 <span rel="tooltip-above" data-tooltip="Don't want to receive IMs? Click to set to "Busy"" class="off">On IM</span> 11635 <span rel="tooltip-above" data-tooltip="To receive IMs, click to set to "On IM"." class="on">Busy</span> 11636 </div> 11637 </label> 11638 </div> 11639 <div class="imcw_body"> 11640 <div class="imcw_title">New Incoming Messages (<span data-num_messages>0</span>)</div> 11641 <div id="imcw_messages" data-role="view" data-view="IMCMessages" data-name="IMCMessages" data-collection="IMCMessagesCollection" data-tmpl="imc_messenger_content"></div> 11642 <div id="imcw_no_messages">You currently don't have any incoming messages.</div> 11643 </div> 11644 <div class="imcw_footer"> 11645 <div class="dismiss_all" data-click="dismissAllMsgs" >Dismiss All</div> 11646 </div> 11647 </div> 11648</script>
11648 11649
11650<script id="imc_messenger_content" type="text/x-handlebars-template" charset="utf-8"> 11651 {{#each messages}} 11652 <div class="col-lg-12 member_cell_container messenger_preview collapsed imcw_message" id="msg_{{this.id}}" data-msg_id="{{this.id}}" data-handle="{{this.passport.handle}}"> 11653 <a href="/p/member.cgi?mid={{this.passport.db_user_id}}"> 11654 <div class="member_cell_image"> 11655 <div class="filter_box"> 11656 <img src="{{this.passport.img}}" class="filter rating{{this.passport.from_rating}}"> 11657 </div> 11658 </div> 11659 </a> 11660 <ul class="member_cell_info"> 11661 <li class="handle"><a href="/p/member.cgi?mid={{this.passport.db_user_id}}">{{sender}}</a></li> 11662 <li class="gender">{{this.passport.age}}{{this.passport.std_gender}}{{this.passport.gender}}</li> 11663 <li class="badge_container"> 11664 {{#if this.passport.confirmid}} 11665 <span class="fruit-tooltip status-badge confirmed" rel="tooltip" data-tooltip-active="true" data-tooltip="Real ID Submitted & Confirmed"> 11666 <i class="" data-toggle="tooltip" data-placement="bottom" data-original-title="Real ID Submitted & Confirmed"> 11667 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" class="confirmid" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="72px" height="72px" viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve"><path class="st0" d="M36,0C16.1,0,0,16.1,0,36s16.1,36,36,36s36-16.1,36-36S55.9,0,36,0z M50.3,35.3c-0.4,1-1.4,1.8-2.5,1.9c-1.1,0.1-2.2-0.3-2.9-1.2L43,33.2l-7.5,20.1l-0.1,0.4c0,0.3-0.1,0.4-0.3,0.7c-0.6,1.1-1.7,1.7-2.8,1.7h-0.1c0,0-0.1,0-0.3,0c-0.7,0-1.2-0.4-1.8-0.8c-0.3-0.1-0.4-0.3-0.6-0.6L18.1,41.1l-1.4-1.5c-0.1,0-0.1-0.1-0.1-0.1l-0.1-0.1c-0.8-1.4-0.7-3.2,0.6-4.2c1.4-1.1,3.3-1,4.4,0.4l4.3,5.1l5.4,6.4l7.9-21.2c0.4-1,1.4-1.8,2.5-1.9c0.6-0.1,1.1,0,1.7,0.3c0.4,0.1,0.8,0.4,1.1,0.8l2.1,2.8l3.7-10.1c0.7-1.5,2.4-2.4,4-1.8c0.6,0.3,1.1,0.7,1.4,1.1c0.6,0.8,0.7,1.9,0.7,2.6L50.3,35.3z"/></svg> 11668 </i> 11669 </span> 11670 {{/if}} 11671 {{#if this.passport.vip_member}} 11672 <span class="fruit-tooltip status-badge vip" rel="tooltip" data-tooltip-active="true" data-tooltip=""> 11673 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" class="vip" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="72px" height="72px" viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve"><path class="st0" d="M36,0C16.1,0,0,16.1,0,36s16.1,36,36,36s36-16.1,36-36S55.9,0,36,0z M46.5,57.4h-21c-1.9,0-3.5-1.5-3.5-3.4s1.6-3.4,3.5-3.4h21c1.9,0,3.5,1.5,3.5,3.4C50,55.8,48.4,57.4,46.5,57.4z M57.2,28.8l-6.5,15c-0.1,0.2-0.1,0.3-0.2,0.5v0.2l0,0c-0.7,1.2-1.8,2-3,2H24.6c-1.2,0-2.3-0.8-3-2l0,0l-0.1-0.2c-0.1-0.3-0.3-0.6-0.4-0.9l-6.2-14.7c-2.2,0-4.1-1.8-4.1-3.8c0-2.1,2.1-3.8,4.5-3.8s4.5,1.8,4.5,3.8c0,0.6-0.2,1.1-1.1,2.3l6.4,6.2l2.7-11.1c-1.8-0.1-3.5-1.7-3.5-3.7c0-2.2,2.1-4.1,4.8-4.1c2.6,0,4.8,1.8,4.8,4.1c0,1.2-0.8,2.7-2.2,3.3l4.5,11h0.1l4.3-11c-1.2-0.8-1.9-2-1.9-3.3c0-2.2,2.1-4.1,4.8-4.1c2.6,0,4.8,1.8,4.8,4.1c0,1.9-1.3,3.2-3.3,3.7l2.2,11.1l6.2-6.2c-0.6-0.5-1-1.4-1-2.4c0-2,2-3.8,4.5-3.8c2.4,0,4.5,1.8,4.5,3.8C61.2,27,59.5,28.6,57.2,28.8z"/></svg> 11674 </i> 11675 </span> 11676 {{else}} 11677 {{#if this.passport.gold_member}} 11678 <span class="fruit-tooltip status-badge gold" rel="tooltip" data-tooltip-active="true" data-tooltip="Gold Member"> 11679 <i class="" data-toggle="tooltip" data-placement="bottom" data-original-title=""> 11680 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" class="gold" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="72px" height="72px" viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve"><path class="st0" d="M36,0C16.1,0,0,16.1,0,36s16.1,36,36,36s36-16.1,36-36S55.9,0,36,0z M46.5,57.4h-21c-1.9,0-3.5-1.5-3.5-3.4s1.6-3.4,3.5-3.4h21c1.9,0,3.5,1.5,3.5,3.4C50,55.8,48.4,57.4,46.5,57.4z M57.2,28.8l-6.5,15c-0.1,0.2-0.1,0.3-0.2,0.5v0.2l0,0c-0.7,1.2-1.8,2-3,2H24.6c-1.2,0-2.3-0.8-3-2l0,0l-0.1-0.2c-0.1-0.3-0.3-0.6-0.4-0.9l-6.2-14.7c-2.2,0-4.1-1.8-4.1-3.8c0-2.1,2.1-3.8,4.5-3.8s4.5,1.8,4.5,3.8c0,0.6-0.2,1.1-1.1,2.3l6.4,6.2l2.7-11.1c-1.8-0.
116801-3.5-1.7-3.5-3.7c0-2.2,2.1-4.1,4.8-4.1c2.6,0,4.8,1.8,4.8,4.1c0,1.2-0.8,2.7-2.2,3.3l4.5,11h0.1l4.3-11c-1.2-0.8-1.9-2-1.9-3.3c0-2.2,2.1-4.1,4.8-4.1c2.6,0,4.8,1.8,4.8,4.1c0,1.9-1.3,3.2-3.3,3.7l2.2,11.1l6.2-6.2c-0.6-0.5-1-1.4-1-2.4c0-2,2-3.8,4.5-3.8c2.4,0,4.5,1.8,4.5,3.8C61.2,27,59.5,28.6,57.2,28.8z"/></svg> 11681 </i> 11682 </span> 11683 {{/if}} 11684 {{/if}} 11685 {{#if this.passport.is_broadcasting}} 11686 <span class="fruit-tooltip status-badge broadcasting" rel="tooltip" data-tooltip-active="true" data-tooltip="Broadcasting Now"> 11687 <i class="" data-toggle="tooltip" data-placement="bottom" data-original-title="Broadcasting Now"> 11688 <a href="#" data-click="launchBroadcastViewer" data-handle="{{this.passport.handle}}" data-pwsid="{{this.passport.db_user_id}}" data-stream_id="{{this.passport.stream_id}}"> 11689 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" class="broadcasting" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="72px" height="72px" viewBox="0 0 72 72" style="enable-background:new 0 0 72 72;" xml:space="preserve"><path d="M36,0C16.1,0,0,16.1,0,36s16.1,36,36,36s36-16.1,36-36S55.9,0,36,0z M36,14.7c9.2,0,16.7,7.5,16.7,16.7S45.2,48.1,36,48.1s-16.7-7.5-16.7-16.7S26.8,14.7,36,14.7z M25.9,50.6h20.2c1.9,0,3.4,1.5,3.4,3.4s-1.5,3.4-3.4,3.4H25.9c-1.8,0-3.4-1.5-3.4-3.4S24,50.6,25.9,50.6z M36,23.8c-4.1,0-7.5,3.4-7.5,7.5s3.4,7.5,7.5,7.5s7.5-3.4,7.5-7.5S40.1,23.8,36,23.8z"/></svg> 11690 </a> 11691 </i> 11692 </span> 11693 {{/if}} 11694 </li> 11695 <li class="title_message">{{this.trunc_msg}}</li> 11696 </ul> 11697 <div class="col-xs-3 member_cell_btn expandable" style="width: 37.5%;"> 11698 <a href="#" class="open-btn closed"> 11699 <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg3337" class=" vmore" viewBox="0 0 72 72" height="72" width="72"> <defs id="defs3339" /><metadata id="metadata3342"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format> <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title> </cc:Work> </rdf:RDF></metadata><g transform="matrix(0,-0.98611111,0.98611111,0,508.41268,574.23493)" id="layer1"> <g id="layer1-3" transform="matrix(0.99980163,0,0,0.99980163,0.22395187,-0.06141021)"><path style="fill:#b3b3b3" d="m 523,-487 c -4.3,0 -7.9,3.5 -7.9,7.9 0,4.4 3.5,7.9 7.9,7.9 4.4,0 7.9,-3.5 7.9,-7.9 0,-4.4 -3.5,-7.9 -7.9,-7.9 z" id="path7" /><path style="fill:#b3b3b3" d="m 545.7,-487 c -4.3,0 -7.9,3.5 -7.9,7.9 0,4.4 3.5,7.9 7.9,7.9 4.4,0 7.9,-3.5 7.9,-7.9 0,-4.4 -3.5,-7.9 -7.9,-7.9 z" id="path9" /><path style="fill:#b3b3b3" d="m 568.4,-487 c -4.3,0 -7.9,3.5 -7.9,7.9 0,4.4 3.5,7.9 7.9,7.9 4.4,0 7.9,-3.5 7.9,-7.9 0,-4.4 -3.6,-7.9 -7.9,-7.9 z" id="path11" /></g></g></svg> 11700 </a> 11701 <div class="activity_container"> 11702 <a href="#" class="activity" style="left: 0%; width: 50%; background: #4A8ECC;" data-click="dismissMsg" data-msg_id="{{this.id}}"> 11703 <span> 11704 <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="enable-background:new 0 0 72 72;" viewBox="0 0 72 72" height="72px" width="72px" y="0px" x="0px" id="Layer_1" class="dismiss" version="1.1"><metadata id="metadata3407"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs3405" /><path id="path3401" d="M36,0C16.1,0,0,16.1,0,36c0,19.9,16.1,36,36,36c19.9,0,36-16.1,36-36C72,16.1,55.9,0,36,0z M52.7,46.3c1.7,1.7,1.7,4.7,0,6.4c-0.9,0.9-2,1.3-3.2,1.3c-1.2,0-2.3-0.4-3.2-1.3L36,42.4L25.7,52.7c-0.9,0.9-2,1.3-3.2,1.3s-2.3-0.4-3.2-1.3c-1.7-1.7-1.7-4.7,0-6.4L29.6,36L19.3,25.7c-1.7-1.7-1.7-4.7,0-6.4c1.7-1.7,4.7-1.7,6.4,0L36,29.6l10.3-10.3c1.7-1.7,4.7-1.7,6.4,0c1.7,1.7,1.7,4.7,0,6.4L42.4,36L52.7,46.3z" class="st0" /></svg> 11705 </span>
11706 <span class="btn_label">Dismiss</span> 11707 </a> 11708 <a href="javascript: CD.utils.launchConversation('{{this.sender}}', true);void(0);" class="activity" style="left: 50%; width: 50%; background: #00AF4C;" data-click="dismissMsg" data-msg_id="{{this.id}}"> 11709 <span> 11710 <svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="enable-background:new 0 0 72 72;" viewBox="0 0 72 72" height="72px" width="72px" y="0px" x="0px" id="Layer_1" class="reply" version="1.1"><metadata id="metadata3480"><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs id="defs3478" /><path id="path3474" d="M71.7,64.6l-5.6-15.3c1.8-4.1,2.7-8.7,2.7-13.4c0-19-15.4-34.4-34.4-34.4C15.4,1.6,0,17,0,36c0,19,15.4,34.4,34.4,34.4c8.1,0,15.7-2.8,21.5-7.6l12.6,5C71.2,68.8,72.7,67.4,71.7,64.6z M15.2,42.1c-3.6,0-6.5-2.9-6.5-6.5c0-3.6,2.9-6.5,6.5-6.5s6.5,2.9,6.5,6.5C21.8,39.2,18.8,42.1,15.2,42.1z M34.4,42.1c-3.6,0-6.5-2.9-6.5-6.5c0-3.6,2.9-6.5,6.5-6.5c3.6,0,6.5,2.9,6.5,6.5C40.9,39.2,38.1,42.1,34.4,42.1z M53.6,42.1c-3.6,0-6.5-2.9-6.5-6.5c0-3.6,2.9-6.5,6.5-6.5c3.6,0,6.5,2.9,6.5,6.5C60.1,39.2,57.2,42.1,53.6,42.1z" class="st0" /></svg> 11711 </span> 11712 <span class="btn_label">Reply</span> 11713 </a> 11714 </div> 11715 </div> 11716 </div> 11717 {{/each}} 11718</script>
11718 11719
11720<script id="popup_broadcast_invite" type="text/x-handlebars-template"> 11721 <div id="imcw_popup" class="panel panel-primary"> 11722 <div class="panel-heading"> 11723 <span class="panel-title">Broadcast Invitations</span> 11724 </div> 11725 <div class="panel-body"> 11726 <div class="messages"> 11727 {{#each invites}} 11728 <div class="message imcw_invite" data-msg_id="{{id}}" data-pwsid="{{pwsid}}" data-handle="{{sender}}"> 11729 <span>{{sender}} invited you to watch their broadcast.</span> 11730 <div class="buttons"> 11731 <div class="btn_bg ignore-btn"> 11732 <svg viewBox="0 0 32 32"> 11733 <path d="M18.42,23.27l3.42,2.94A13.16,13.16,0,0,1,16,27.73c-8.17,0-16-9.5-16-12.22,0-1.07,1.24-3.21,3.24-5.4l4.88,4.19A5.56,5.56,0,0,0,8,15.51a8,8,0,0,0,8,8.16,7,7,0,0,0,2.44-.4ZM29.78,25.5A1.74,1.74,0,0,1,30,28a1.83,1.83,0,0,1-2.66.18L2.26,6.55A1.88,1.88,0,0,1,2.09,4a1.93,1.93,0,0,1,2.66-.18L7.63,6.33A15.41,15.41,0,0,1,16,3.38c8.17,0,16,9.45,16,12.17,0,1.38-2.09,4.59-5.19,7.36l3,2.59ZM10.92,9.22l2.35,2.05.89.76A4.06,4.06,0,0,1,16,11.59a3.88,3.88,0,0,1,3.68,5.17l3.24,2.76a8.33,8.33,0,0,0,1.07-4,8.06,8.06,0,0,0-8-8.16,7.86,7.86,0,0,0-5.06,1.87Z"/> 11734 </svg> 11735 </div> 11736 <div class="btn_bg watch-btn"> 11737 <svg viewBox="0 0 72 72"> 11738 <path d="M36,8.7C17.6,8.7,0,29.9,0,36c0,6.1,17.6,27.3,36,27.3c18.4,0,36-21.2,36-27.3C72,29.9,54.4,8.7,36,8.7z M36,54.3c-10,0-18-8.1-18-18.3c0-10,8-18.3,18-18.3S54,25.9,54,36C54,46,46,54.3,36,54.3z M44.8,36c0,4.9-3.9,8.8-8.8,8.8 c-4.8,0-8.8-4-8.8-8.8c0-4.9,3.9-8.8,8.8-8.8C40.8,27.2,44.8,31.1,44.8,36z" /> 11739 </svg> 11740 </div> 11741 </div> 11742 </div> 11743 {{/each}} 11744 </div> 11745 <div class="lb_buttons"> 11746 <button type="submit" class="btn btn-primary ignore-all-btn">Ignore All</button> 11747 <button type="reset" class="btn btn-default close-btn">Close</button> 11748 </div> 11749 </div> 11750 </div> 11751</script>
11751 11752
11753<script id="imc_broadcast_alert_bar" type="text/x-handlebars-template"> 11754<div data-alert-message-top class="alert-message alert-broadcast-invite"> 11755 <div id="imcw_alert" class="page"> 11756 <div class="message_container message" data-msg_id="{{id}}" data-pwsid="{{pwsid}}" data-handle="{{sender}}"> 11757 {{#if count}} 11758 <span>{{sender}} and {{count}} others have started broadcasting, and have invited you to watch.</span> 11759 {{else}} 11760 <span>{{sender}} has started broadcasting, and has invited you to watch.</span> 11761 {{/if}} 11762 <div class="buttons"> 11763 {{#unless count}} 11764 <div class="btn_bg ignore-btn"> 11765 <svg viewBox="0 0 32 32"> 11766 <path d="M18.42,23.27l3.42,2.94A13.16,13.16,0,0,1,16,27.73c-8.17,0-16-9.5-16-12.22,0-1.07,1.24-3.21,3.24-5.4l4.88,4.19A5.56,5.56,0,0,0,8,15.51a8,8,0,0,0,8,8.16,7,7,0,0,0,2.44-.4ZM29.78,25.5A1.74,1.74,0,0,1,30,28a1.83,1.83,0,0,1-2.66.18L2.26,6.55A1.88,1.88,0,0,1,2.09,4a1.93,1.93,0,0,1,2.66-.18L7.63,6.33A15.41,15.41,0,0,1,16,3.38c8.17,0,16,9.45,16,12.17,0,1.38-2.09,4.59-5.19,7.36l3,2.59ZM10.92,9.22l2.35,2.05.89.76A4.06,4.06,0,0,1,16,11.59a3.88,3.88,0,0,1,3.68,5.17l3.24,2.76a8.33,8.33,0,0,0,1.07-4,8.06,8.06,0,0,0-8-8.16,7.86,7.86,0,0,0-5.06,1.87Z"/> 11767 </svg> 11768 </div> 11769 {{/unless}} 11770 {{#if count}} 11771 <div class="btn_bg watch-multi-btn"> 11772 <svg viewBox="0 0 72 72"> 11773 <path d="M36,8.7C17.6,8.7,0,29.9,0,36c0,6.1,17.6,27.3,36,27.3c18.4,0,36-21.2,36-27.3C72,29.9,54.4,8.7,36,8.7z M36,54.3c-10,0-18-8.1-18-18.3c0-10,8-18.3,18-18.3S54,25.9,54,36C54,46,46,54.3,36,54.3z M44.8,36c0,4.9-3.9,8.8-8.8,8.8 c-4.8,0-8.8-4-8.8-8.8c0-4.9,3.9-8.8,8.8-8.8C40.8,27.2,44.8,31.1,44.8,36z" /> 11774 </svg> 11775 </div> 11776 {{else}} 11777 <div class="btn_bg watch-btn"> 11778 <svg viewBox="0 0 72 72"> 11779 <path d="M36,8.7C17.6,8.7,0,29.9,0,36c0,6.1,17.6,27.3,36,27.3c18.4,0,36-21.2,36-27.3C72,29.9,54.4,8.7,36,8.7z M36,54.3c-10,0-18-8.1-18-18.3c0-10,8-18.3,18-18.3S54,25.9,54,36C54,46,46,54.3,36,54.3z M44.8,36c0,4.9-3.9,8.8-8.8,8.8 c-4.8,0-8.8-4-8.8-8.8c0-4.9,3.9-8.8,8.8-8.8C40.8,27.2,44.8,31.1,44.8,36z" /> 11780 </svg> 11781 </div> 11782 {{/if}} 11783 </div> 11784 </div> 11785 </div> 11786</div> 11787</script>
11787 11788
11789<script type="text/javascript"> 11790(function(){ 11791 function initVIce() { 11792 if ( window.VIce ) { 11793 VIce.setTemplate( 'imc_messenger', VIce.$('#imc_messenger').html() ); 11794 VIce.setTemplate( 'imc_messenger_content', VIce.$('#imc_messenger_content').html() ); 11795 VIce.setTemplate( 'popup_broadcast_invite', VIce.$('#popup_broadcast_invite').html() ); 11796 VIce.setTemplate( 'imc_broadcast_alert_bar', VIce.$('#imc_broadcast_alert_bar').html() ); 11797 11798 VIce.setCollection('IMCMessagesCollection', VIce.BaseCollection.extend({ 11799 url: '/coreapi/imc', 11800 useQueryString: true, 11801 request: { 11802 'action' : 'get_msgs', 11803 'msg_age_mins' : (VIce.globals && VIce.globals.sex === "2") ? 2 : 5, 11804 'refresh_online_status' : 1 11805 }, 11806 no_cache: true, 11807 callback: 'addList', 11808 addList: function(response) { 11809 response = response || {}; 11810 this.add(response.reply); 11811 this.triggerAddComplete(); 11812 }, 11813 refreshMsgs: function() { 11814 this.reset(); 11815 this.ajax(); 11816 } 11817 })); 11818 11819 VIce.setView('IMCMessages', VIce.BaseView.extend({ 11820 collection: VIce.collection('IMCMessagesCollection'), 11821 tmpl: 'imc_messenger_content', 11822 viceInit: function() { 11823 this.$ = VIce.$ || jQuery; 11824 this.collection.on('add_complete', this.render, this); 11825 }, 11826 render: function() { 11827 var page = VIce.currentPage(), 11828 broadcast_invites = [], 11829 chat_messages = []; 11830 11831 this.page = page; 11832 var data = this.collection.current_request.responseJSON || {}; 11833 11834 if (data.reply) { 11835 for (var i = 0; i < data.reply.length; i++) { 11836 if (data.reply[i].msg === '[webcam_invite]') { 11837 broadcast_invites.push(data.reply[i]); 11838 } else if (data.passport && data.passport.is_chatting) { 11839 chat_messages.push(data.reply[i]); 11840 } 11841 } 11842 } 11843 11844 this.$el.html( VIce.template(this.tmpl, { messages: chat_messages } )); 11845 11846 this.page.trigger('imc_broadcast_invite', { data: broadcast_invites, count: broadcast_invites.length }); 11847 if (data.passport) { 11848 this.page.trigger('imc_messages_render_complete', { data: chat_messages, count: chat_messages.length, isOnline: data.passport && data.passport.is_chatting }); 11849 } 11850 11851 return this; 11852 }, 11853 refresh: function() { 11854 this.collection.refreshMsgs(); 11855 }, 11856 deleteMessage: function(msg_id) { 11857 var req_data = { 11858 action: 'mark_msg_read', 11859 msg_id: msg_id 11860 }; 11861 VIce.$.ajax({ 11862 url: '/coreapi/imc', 11863 data: req_data, 11864 cache: false, 11865 contentType: false, 11866 type: 'GET' 11867 }); 11868 } 11869 })); 11870 11871 VIce.widget = VIce.widget || {}; 11872 VIce.widget.imc_messages = function() { 11873 var page = VIce.currentPage(), 11874 page_el, 11875 interval_id = ''; 11876 if (!page) { 11877 page_el = VIce.$('[data-role=page]'); 11878 if(!page_el.length ){ 11879 page_el = VIce.$('body'); 11880 } 11881 page = VIce.Page(page_el); 11882 VIce.currentPage = function() { 11883 return page; 11884 } 11885 } 11886 11887 function showInviteAlertBar(options) {
11888 var invite_alert_bar = VIce.$('#imcw_broadcast_invite'); 11889 var data = options.data[0]; 11890 11891 if (invite_alert_bar.length == 0) { 11892 return; 11893 } 11894 11895 if (options.data.length === 1) { 11896 invite_alert_bar.html(VIce.template('imc_broadcast_alert_bar', data)); 11897 invite_alert_bar.fadeIn(); 11898 } else if (options.data.length > 1) { 11899 data.count = options.data.length - 1; 11900 invite_alert_bar.html(VIce.template('imc_broadcast_alert_bar', data)); 11901 invite_alert_bar.fadeIn(); 11902 } else { 11903 invite_alert_bar.fadeOut(); 11904 } 11905 11906 11907 VIce.$('#imcw_broadcast_invite .ignore-btn').on('click',function(e) { 11908 var message = $(e.currentTarget).closest('.message'); 11909 ignoreBroadcast(message); 11910 invite_alert_bar.fadeOut(); 11911 }); 11912 11913 VIce.$('#imcw_broadcast_invite .watch-btn').on('click',function(e) { 11914 var message = $(e.currentTarget).closest('.message'); 11915 watchBroadcast(message); 11916 11917 var msg_id = $(message).data('msg_id'); 11918 if (msg_id) { 11919 page.getVar('IMCMessages').deleteMessage(msg_id); 11920 } 11921 11922 invite_alert_bar.fadeOut(); 11923 }); 11924 11925 VIce.$('#imcw_broadcast_invite .watch-multi-btn').on('click',function() { 11926 showInvitePopup({ invites: options.data }); 11927 invite_alert_bar.fadeOut(); 11928 }); 11929 } 11930 11931 function showInvitePopup(options) { 11932 VIce.showLightbox( VIce.template('popup_broadcast_invite', options), { name: 'popup_broadcast_invite' } ); 11933 11934 VIce.$('.ignore-btn').on('click',function(e) { 11935 var message = $(e.currentTarget).closest('.message'); 11936 ignoreBroadcast(message); 11937 message.remove(); 11938 11939 if (!VIce.$('.imcw_invite').length) { 11940 VIce.lightbox['popup_broadcast_invite'].hide(); 11941 } 11942 }); 11943 11944 VIce.$('.watch-btn').on('click',function(e) { 11945 var message = $(e.currentTarget).closest('.message'); 11946 message.remove(); 11947 watchBroadcast(message); 11948 11949 if (!VIce.$('.imcw_invite').length) { 11950 VIce.lightbox['popup_broadcast_invite'].hide(); 11951 } 11952 }); 11953 11954 VIce.$('.ignore-all-btn').on('click',function() { 11955 var messages = $('.message'); 11956 for (var i = 0; i < messages.length; i++) { 11957 var message = $(messages[i]); 11958 ignoreBroadcast(message); 11959 } 11960 VIce.lightbox['popup_broadcast_invite'].hide(); 11961 11962 }); 11963 VIce.$('.close-btn').on('click',function() { 11964 VIce.lightbox['popup_broadcast_invite'].hide(); 11965 }); 11966 } 11967 11968 function watchBroadcast(message) { 11969 var pwsid = message.data('pwsid'); 11970 VIce.$.ajax({ 11971 url: '/coreapi/imc', 11972 data: { 11973 action: 'get_broadcast_info', 11974 bcast_pwsid: pwsid 11975 }, 11976 cache: false, 11977 contentType: false, 11978 type: 'GET' 11979 }).done(function(res) { 11980 var streamid = res.reply.streamid, 11981 server = res.reply.server, 11982 handle = res.reply.handle || message.data('handle'); 11983 11984 // Popup video broadcaster 11985 if (VIce.globals && VIce.globals.no_erotic == "1") { 11986 confirmEroticCam(streamid, handle, pwsid, server); 11987 } else { 11988 openpopup(streamid, handle, pwsid, server); 11989 } 11990 }); 11991 } 11992 11993 function ignoreBroadcast(message) { 11994 var msg_id = message.data('msg_id'); 11995 if (msg_id) { 11996 page.getVar('IMCMessages').deleteMessage(msg_id); 11997 } 11998 } 11999 12000 function updateCount(count) { 12001 count = count || 0; 12002 12003 // Navbar count 12004 var count_bubble = VIce.$('[data-imc-messages-count]'); 12005 VIce.$('[data-num_messages]').html(count); 12006 count_bubble.html(count); 12007 if (count == 0) { 12008 count_bubble.hide();
12009 VIce.$('#imcw_no_messages').show(); 12010 VIce.$('.dismiss_all').hide(); 12011 } else { 12012 count_bubble.show(); 12013 VIce.$('#imcw_no_messages').hide(); 12014 VIce.$('.dismiss_all').show(); 12015 } 12016 } 12017 12018 function dismissMsg(msg_id) { 12019 page.getVar('IMCMessages').deleteMessage(msg_id); 12020 VIce.$('#msg_' + msg_id.replace(".", "\\.")).remove(); 12021 var msg_count = VIce.$('.imcw_message').length; 12022 updateCount(msg_count); 12023 } 12024 12025 function setRefresh() { 12026 if (!interval_id) { 12027 interval_id = setInterval(function() { 12028 if(page && page.getVar ){ 12029 var IMCMessages = page.getVar('IMCMessages'); 12030 if(IMCMessages && IMCMessages.refresh){ 12031 IMCMessages.refresh(); 12032 } 12033 } 12034 }, 30000); 12035 } 12036 } 12037 12038 function unsetRefresh() { 12039 if (interval_id) { 12040 clearInterval(interval_id); 12041 interval_id = ''; 12042 } 12043 } 12044 12045 page.on('imc_broadcast_invite', function (evt, options) { 12046 options = options || {}; 12047 if (options.data && options.data.length) { 12048 showInviteAlertBar(options); 12049 } else { 12050 var invite_alert_bar = VIce.$('#imcw_broadcast_invite'); 12051 if (invite_alert_bar.length) { 12052 invite_alert_bar.fadeOut(); 12053 } 12054 } 12055 }); 12056 12057 page.on('imc_messages_render_complete', function (evt, options) { 12058 options = options || {}; 12059 12060 // fruit-3 flyout 12061 VIce.$('.open-btn').mouseover(function() { 12062 var count = VIce.$(this).next('.activity_container').children().length, 12063 width = (100 / count); 12064 VIce.$(this).toggleClass('open').toggleClass('closed'); 12065 VIce.$(this).parent('.expandable').toggleClass('open').css('width',(count*12.5)+'%'); 12066 VIce.$(this).next('.activity_container').toggleClass('open').children().each(function(index) { 12067 var place = (width * index); 12068 VIce.$(this).css('left',place + '%').addClass('activity').css('width',width + '%'); 12069 }); 12070 if (VIce.$(this).next('.activity_container').children().hasClass('online')) { 12071 VIce.$('.activity_container > a.online').removeClass('activity').css('background', '').addClass('btn-new'); 12072 } 12073 }); 12074 VIce.$(".member_cell_container").mouseleave(function() { 12075 VIce.$(this).find('.open-btn.open').removeClass('open').addClass('closed'); 12076 VIce.$(this).find('.open').removeClass('open'); 12077 }); 12078 12079 updateCount(options.count); 12080 if (options.isOnline != 1) { 12081 VIce.$('[data-switch="online-offline"]').prop('checked', true); 12082 } 12083 12084 VIce.$('[data-click="dismissMsg"]').on('click',function() { 12085 var msg_id = this.getAttribute('data-msg_id'); 12086 dismissMsg(msg_id); 12087 }); 12088 12089 VIce.$('[data-click="dismissAllMsgs"]').unbind('click').on('click',function() { 12090 var messages = options.data, 12091 req_data = { 12092 action: 'mark_msg_read', 12093 msg_ids: [] 12094 }; 12095 for (var i = 0; i < messages.length; i++) { 12096 req_data.msg_ids.push(messages[i].id); 12097 VIce.$(('#msg_' + messages[i].id).replace(".", "\\.")).remove(); 12098 } 12099 req_data.msg_ids = req_data.msg_ids.join(','); 12100 12101 VIce.$.ajax({ 12102 url: '/coreapi/imc', 12103 data: req_data, 12104 cache: false, 12105 contentType: false, 12106 type: 'GET' 12107 }); 12108 updateCount(0); 12109 }); 12110 12111 VIce.$('[data-click="launchBroadcastViewer"]').on('click',function() { 12112 var query = { 12113 handle: this.getAttribute('data-handle'), 12114 pwsid: this.getAttribute('data-pwsid'), 12115 stream_id: this.getAttribute('data-stream_id'), 12116 }; 12117 VIce.globals.handleWebcamPopup(1, query); 12118 }); 12119 12120 VIce.$('.imcw_message').on('click',function(e) { 12121 if (VIce.$(e.target).hasClass('imcw_message')) { 12122 var handle = this.getAttribute('data-handle'); 12123 CD.utils.launchConversation(handle, true); 12124 var msg_id = this.getAttribute('data-msg_id');
12125 dismissMsg(msg_id); 12126 } 12127 }); 12128 12129 VIce.$('[data-click="toggleOnlineStatus"]').unbind('click').on('click',function() { 12130 var action = VIce.$("#imcw [data-switch='online-offline']").prop('checked') ? 'go_offline' : 'go_online', 12131 req_data = { action: action }; 12132 VIce.$.ajax({ 12133 url: '/coreapi/imc', 12134 data: req_data, 12135 cache: false, 12136 contentType: false, 12137 type: 'GET' 12138 }); 12139 if (action === 'go_online') { 12140 page.getVar('IMCMessages').refresh(); 12141 } 12142 }); 12143 }); 12144 VIce.$('#imc_messages').html(VIce.template('imc_messenger')); 12145 12146 page.parseRoles(VIce.$('#imc_messages'), true, page); 12147 12148 if (page.getVar('IMCMessages')) { 12149 page.getVar('IMCMessages').refresh(); 12150 } 12151 setRefresh(); 12152 }; 12153 } else { 12154 setTimeout( initVIce, 100 ); 12155 } 12156 } 12157 initVIce(); 12158})(); 12159</script>
12159 12160
12161<script> 12162if (window.jQuery) { 12163 jQuery(window).on("load", function() { 12164 VIce.widget.imc_messages(); 12165 jQuery('#imcw_toggle .dropdown-toggle').on('click',function() { 12166 if (jQuery('#imcw_toggle').hasClass('open')) { 12167 jQuery('#imcw_toggle').removeClass('open'); 12168 } else { 12169 jQuery('#imcw_toggle').addClass('open'); 12170 } 12171 }); 12172 jQuery(document).on('click',function(e) { 12173 if(jQuery(e.target).parents('#imcw_toggle').length === 0) { 12174 jQuery("#imcw_toggle").removeClass('open'); 12175 } 12176 }); 12177 jQuery('.nav_notification .dropdown-toggle').on('click',function() { 12178 jQuery('#imcw_toggle').removeClass('open'); 12179 }); 12180 }); 12181} 12182 12183</script>
12183 12184 12185 12186
12187<script id="broadcaster_improvements" type="text/x-handlebars-template"> 12188 <div id="broadcaster_improvements" class="improvements_lb"> 12189 <div class="modal_header"><h4>Improvements to Your Broadcaster!</h4></div> 12190 <div class="modal_body"> 12191 <div class="row step1"> 12192 <div class="col-md-6 text"> 12193 <div class="head">See your followers online.</div> 12194 <div class="body">See when the people who follow your webcam sessions are online, and let them know you are broadcasting!</div> 12195 </div> 12196 <div class="col-md-6"><img src="https://secureimage.securedataimages.com/images/ffadult/imc_improvements/see_followers.png"></img></div> 12197 </div> 12198 <div class="row step2"> 12199 <div class="col-md-7 text"> 12200 <div class="head">Invite your friends and followers to join.</div> 12201 <div class="body">Send invitations to let your fans open your broadcast directly, and see easily who has been invited. No need to manage multiple IM windows!</div> 12202 </div> 12203 <div class="col-md-5"><img src="https://secureimage.securedataimages.com/images/ffadult/imc_improvements/invite_friends.png"></img></div> 12204 </div> 12205 <div class="row step3"> 12206 <div class="col-md-6 text"> 12207 <div class="head">Want to send Instant Messages?</div> 12208 <div class="body">Search for members using Who's On IM to find new friends to chat with! You can message them from the search results page or their profile.</div> 12209 </div> 12210 <div class="col-md-6"><img src="https://secureimage.securedataimages.com/images/ffadult/imc_improvements/open_im.png"></img></div> 12211 </div> 12212 <div class="close_button"> 12213 <a class="btn btn-primary close-btn">Got It!</a> 12214 </div> 12215 </div> 12216 </div> 12217</script>
12217 12218
12219<script id="messenger_improvements" type="text/x-handlebars-template"> 12220 <div id="messenger_improvements" class="improvements_lb"> 12221 <div class="modal_header"><h4>We've updated our Instant Messenger!</h4></div> 12222 <div class="modal_body"> 12223 <div> 12224 <div class="head">All your chats in one place.</div> 12225 <div class="body"> 12226 <div class="row pb10"> 12227 <div class="col-md-1"><div class="number">1</div></div> 12228 <div class="col-md-11">No more jumping between windows - all your messages are kept together in one window, so you can easily find and move between your conversations.</div> 12229 </div> 12230 <div class="row pb10"> 12231 <div class="col-md-1"></div> 12232 <div class="col-md-11">See friends online and reply to incoming messages from the IM window. To find new people to chat with, use the IM search results window.</div> 12233 </div> 12234 </div> 12235 </div> 12236 <div class="row"> 12237 <div class="col-md-5"> 12238 <div> 12239 <div class="head">Easy cam-to-cam.</div> 12240 <div class="body"> 12241 <div class="row pb10"> 12242 <div class="col-md-1"><div class="number">2</div></div> 12243 <div class="col-md-11">Turn on your webam in the IM window, and decide whether to mute your sound.</div> 12244 </div> 12245 <div class="row pb10"> 12246 <div class="col-md-1"><div class="number">3</div></div> 12247 <div class="col-md-11">Then, in any conversation, you can share your video feed. You can start and stop sharing your feed with someone at any time. Webcam icon in your conversation list shows who you are sharing your feed with.</div> 12248 </div> 12249 <div class="row pb10"> 12250 <div class="col-md-1"></div> 12251 <div class="col-md-11">Finished camming for now? Turn off your camera to stop your video and end all sharing.</div> 12252 </div> 12253 <div class="row pb10"> 12254 <div class="col-md-1"><div class="number">4</div></div> 12255 <div class="col-md-11">To see someone elseâs video, accept a webcam invitation from them. You can mute their feed and refresh if the feed gets interrupted. Stop viewing the video when you are ready.</div> 12256 </div> 12257 </div> 12258 </div> 12259 <div> 12260 <div class="head">Want to broadcast publicly?</div> 12261 <div class="body"> 12262 <div class="row pb10"> 12263 <div class="col-md-1"></div> 12264 <div class="col-md-11">Turn off your IM webcam, and then start your group chat using our broadcaster.</div> 12265 </div> 12266 </div> 12267 </div> 12268 </div> 12269 <div class="col-md-7"> 12270 <img class="trainer_image" src="https://secureimage.securedataimages.com/images/ffadult/imc_improvements/new-trainer-img.png"></img> 12271 </div> 12272 </div> 12273 <div class="close_button"> 12274 <a class="btn btn-primary close-btn">Got It!</a> 12275 </div> 12276 </div> 12277 </div> 12278</script>
12278 12279
12280<script id="imc_messenger_trainer" type="text/x-handlebars-template"> 12281 <div id="imc_trainer" class="improvements"> 12282 <div class="modal_header"><h4>Welcome to Your New Instant Messenger!</h4></div> 12283 <div class="modal_body"> 12284 <div class="row step1"> 12285 <div class="col-md-5"><img src="https://secureimage.securedataimages.com/images/ffadult/imc_trainer/step1.png"></img></div> 12286 <div class="col-md-7 text"> 12287 <div class="head">IM members you want to chat with easily.</div> 12288 <div class="body">Initiate a conversation with anyone who has a green IM icon on their profile. Whether you're browsing Members Near Me, New Matches, or Hottest Members, strike up a conversation any time, from anywhere on the site.</div> 12289 </div> 12290 </div> 12291 <div class="row step2"> 12292 <div class="col-md-5"><img src="https://secureimage.securedataimages.com/images/ffadult/imc_trainer/step2.png"></img></div> 12293 <div class="col-md-7 text"> 12294 <div class="head">Never miss an IM.</div> 12295 <div class="body">See incoming IMs right from your homepage. A red bubble with the number of unread messages will appear at the top of your navigation bar. Click the icon to view and reply to your incoming IMs.</div> 12296 </div> 12297 </div> 12298 <div class="row step3"> 12299 <div class="col-md-5"><img src="https://secureimage.securedataimages.com/images/ffadult/imc_trainer/step3.png"></img></div> 12300 <div class="col-md-7 text"> 12301 <div class="head">Control your availability.</div> 12302 <div class="body">Set your IM status to "Away" and mute notifications for incoming messages when you're not in the mood to chat. Don't worry - you'll still be able to initiate IMs and receive replies.</div> 12303 </div> 12304 </div> 12305 <div class="close_button"> 12306 <a class="btn btn-primary close-btn">Got It!</a> 12307 </div> 12308 </div> 12309 </div> 12310</script>
12310 12311
12312<script> 12313if (window.jQuery) { 12314 jQuery(window).on("load", function() { 12315 var broadcaster_template = (VIce && VIce.globals && VIce.globals.ab_test_SOC_27701) ? 'broadcaster_improvements' : 'imc_messenger_trainer'; 12316 var broadcaster_cookie = (VIce && VIce.globals && VIce.globals.ab_test_SOC_27701) ? 'saw_broadcaster_improvements' : 'saw_im_trainer'; 12317 VIce.setTemplate( broadcaster_template, VIce.$('#' + broadcaster_template).html() ); 12318 var broadcaster_lb = VIce.$('.nav-start-broadcaster').on('click',function() { 12319 if (!readCookie(broadcaster_cookie)) { 12320 createCookie(broadcaster_cookie, 1, 365); 12321 VIce.showLightbox( VIce.template(broadcaster_template), { name: broadcaster_template, className : "imc_trainer_lb" } ); 12322 VIce.$('.close-btn').on('click',function() { 12323 VIce.lightbox[broadcaster_template].hide(); 12324 }); 12325 } 12326 }); 12327 12328 var messenger_template = (VIce && VIce.globals && VIce.globals.ab_test_SOC_27701) ? 'messenger_improvements' : 'imc_messenger_trainer'; 12329 var messenger_cookie = (VIce && VIce.globals && VIce.globals.ab_test_SOC_27701) ? 'saw_messenger_improvements' : 'saw_im_trainer'; 12330 VIce.setTemplate( messenger_template, VIce.$('#' + messenger_template).html() ); 12331 var messenger_lb = VIce.$('.nav-start-messenger').on('click',function() { 12332 if (!readCookie(messenger_cookie)) { 12333 createCookie(messenger_cookie, 1, 365); 12334 VIce.showLightbox( VIce.template(messenger_template), { name: messenger_template, className : "imc_trainer_lb" } ); 12335 VIce.$('.close-btn').on('click',function() { 12336 VIce.lightbox[messenger_template].hide(); 12337 }); 12338 } 12339 }); 12340 }); 12341} 12342</script>
12342 12343 12344 12345 12346
12347<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-broadcast_logger-1611023895.js"></script>
12347 12348 12349 12350 12351<div id="header"> 12352 <div class="page "> 12353 <div id="logo"> 12354 <a 12355 class="logo_with_href" 12356 href="/p/register.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=header_nav_41326-3 12357" 12358 > 12359 <img src="https://secureimage.securedataimages.com/images/bdsm/partners/11837_1257552004.gif" alt="" title="" /> 12360 </a> 12361 </div><!-- logo --> 12362 <div class="guest-links login">
vendor: 83 bytes, lines 12362-12364
12362 12363 12364<script src="https://www.google.com/recaptcha/enterprise.js?render=
123646Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp
vendor: 12 bytes, line 12364
12364"></script>
12365<script type="text/javascript" defer> 12366 12367document.addEventListener("DOMContentLoaded", function(event) { 12368 12369 if (!window.handleFormSubmitWithCaptcha) { 12370 window.handleFormSubmitWithCaptcha = function(loginForm, callback) { 12371 if (!loginForm.recaptcha_token) { 12372 event.preventDefault(); 12373 try { 12374 grecaptcha.enterprise.ready(function() { 12375 grecaptcha.enterprise.execute('6Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp', {action: 'LOGIN'}).then(function(token) { 12376 if (loginForm.querySelector('[name="g-recaptcha-response"]')) { 12377 loginForm.querySelector('[name="g-recaptcha-response"]').value=token; 12378 } else { 12379 var eleToken = document.createElement('input'); 12380 eleToken.setAttribute('type', 'hidden'); 12381 eleToken.setAttribute('id', 'g-recaptcha-response'); 12382 eleToken.setAttribute('name', 'g-recaptcha-response'); 12383 eleToken.setAttribute('value', token); 12384 loginForm.appendChild(eleToken); 12385 } 12386 if (typeof(callback) === 'function') { 12387 callback(); 12388 } 12389 }); 12390 }); 12391 } catch (error) { 12392 console.error("Captcha error: " + error); 12393 } 12394 } 12395 } 12396 12397 12398 // Old Handler for login form (delete this if no issues) 12399 //var passwordInputFields = document.querySelectorAll('.captcha_check [name="password"]'); 12400 //for (var i = 0; i < passwordInputFields.length; i++) { 12401 // passwordInputFields[i].addEventListener('focus', function() { 12402 // handleFormSubmitWithCaptcha(this.closest('.captcha_check')); 12403 // }); 12404 //} 12405 12406 var loginForms = document.querySelectorAll('.captcha_check'); 12407 var handleLogin = function(i) { 12408 var loginForm = loginForms[i]; 12409 loginForm.addEventListener('submit', function(event) { 12410 event.preventDefault(); 12411 handleFormSubmitWithCaptcha(loginForm, function() { 12412 loginForm.submit(); 12413 }); 12414 }); 12415 }; 12416 for (var i = 0; i < loginForms.length; i++) { 12417 handleLogin(i); 12418 } 12419 12420 // Handler for forgot password forms 12421 var forgotPassword = document.querySelector('#tmpl_forgot_login [name="login_handle"]'); 12422 if (forgotPassword) { 12423 forgotPassword.addEventListener('focus', function() { 12424 handleFormSubmitWithCaptcha(this); 12425 }); 12426 } 12427 12428 // Handle for login_form_username forgot password form 12429 var forgotPasswordLoginForm = document.querySelector('#forgotPW_form [name="login_handle"]'); 12430 if (forgotPasswordLoginForm) { 12431 forgotPasswordLoginForm.addEventListener('focus', function() { 12432 handleFormSubmitWithCaptcha(this); 12433 }); 12434 } 12435 } 12436}); 12437</script>
12437 12438 12439<form accept-charset=utf-8 method="post" action="https://secure.bdsm.com/p/login2.cgi" name="LOGIN" class="captcha_check"> 12440<div><input type="hidden" name="who" value="r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" /></div> 12441<input type="hidden" name="_templatename_" value="header_nav_41326"><input type="hidden" name="site" value="bdsm" /><input type="hidden" name="dcb" value="bdsm.com" /> 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 <input class="field" id="login_handle" name="handle" type="text" value="" tabindex="1" placeholder="Username" maxlength="25"/> 12452 <input class="field" id="login_password" name="password" type="password" value="" tabindex="2" placeholder="Password" maxlength="25"/> 12453 <button type="submit" value="Login" id="cover_login_button"><span>Login</span></button> 12454 <ul class="login_links"> 12455 <li class="first"><a href="/go/page/forgot_login.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=header_nav_41326-11">Forgot password?</a></li> 12456 </ul> 12457 </form> 12458 </div> 12459 12460 </div><!-- page --> 12461</div><!-- header --> 12462 12463
12464<script language="JavaScript" type="text/javascript"> 12465 self.main_templates = self.main_templates || {}; 12466 self.global_obj = self.global_obj || new Object(); 12467 $j(document).ready(function(){ 12468 $j("#bootstrap-side-content").remove(); var navigation = $j( '#navigation-bar .nav' ), 12469 nav_frames = navigation.find( 'iframe' ), 12470 nav_tabs = navigation.find( '.tab' ); 12471 CD.attr_list = {}, CD.header_upgrade_btn_width = {}, CD.beig_msg_count = {}, CD.nav_render_count = 0; 12472 if (!useRedirect) { 12473 if(!hasRightVersion) { 12474 CD.attr_list = $j.extend(CD.attr_list, {'href': "https://chat.alt.com/p/page.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&p=jabber_imc_main&trlid=header_nav_41326-12"}); 12475 CD.attr_list = $j.extend(CD.attr_list, {'name': "imcmenu", 'rel': "width=380,height=590,resizable=yes"}); 12476 }else{ 12477 CD.attr_list = {'href': "/p/imc/view_video.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&ok=1&app_type=web_imc&action=broadcast&trlid=header_nav_41326-9", 'name': "video_broadcast", 'rel': "scrollbars=no,resizable=yes,status=no,toolbar=no,menubar=no,location=no,directories=no,width=440,height=700"}; 12478 } 12479 } 12480 if( $j.browser && $j.browser.msie ){ 12481 nav_frames.on( 'hover', function() { 12482 nav_frames.closest( nav_tabs ).toggleClass("hover"); 12483 }); 12484 } 12485 }); 12486 12487 </script>
12487 12488 12489 12490 <div id="navigation-bar" class="navbar"> 12491 <div class="nav-container 12492 "> 12493 <ul class="nav"> 12494 <li class="nav_join"><a href="/p/register.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=header_nav_41326-4" class="guest-tab-label"><span>JOIN NOW!</span></a></li> 12495 <li class="nav_login"><a href="/go/page/standard_login.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=header_nav_41326-13" class="guest-tab-label"><span>Login</span></a></li> 12496 </ul> 12497 </div> 12498 </div> 12499
12499<script type="text/x-handlebars" id="tpl-ticker_happy_hour"> 12500 </script>
vendor: 1 bytes, line 12500
12500
12501<script type="text/x-handlebars" id="tpl-navbar_contest_ad_spot"> 12502 <div class="column"> 12503 <div class="ad-btn"> 12504 <a class="btn btn-blue" href="/p/contest/current">Enter Contest Now</a> 12505 </div> 12506 <a href="{{url}}"><img class="ad" src="https://secureimage.securedataimages.com/images/bdsm/contests/{{contest_id}}/{{image}}" height="250"></a> 12507 </div> 12508</script>
12508 12509
12510<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-contest_api-1559284387.js"></script>
vendor: 1 bytes, line 12510
12510
12511<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-contest_util-1559284390.js"></script>
vendor: 1 bytes, line 12511
12511
12512<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-notification_41326-1567546973.js"></script>
vendor: 1 bytes, line 12512
12512
12513<script type="text/javascript" src="https://secureimage.securedataimages.com/javascript/live_cd/secure/bdsm-fruit3-1559284418.js"></script>
vendor: 1 bytes, line 12513
12513
12514<script id="notify-pulse-tmpl" type="x-handlebars/template"> 12515 <div class="pulsing-notification"> 12516 <div class="radial-down"> 12517 <div class="radial-mask"> 12518 <div class="circle"></div> 12519 </div> 12520 </div> 12521 <div class="radial-up"> 12522 <div class="radial-mask"> 12523 <div class="circle"></div> 12524 </div> 12525 </div> 12526 <div class="bubble"></div> 12527 </div> 12528</script>
12528 12529 12530
12531<script type="text/javascript"> 12532 window.addEventListener('DOMContentLoaded', function(event){ 12533 var _backgroundColor = getComputedStyle(document.querySelector('#navigation-bar')).backgroundColor; 12534 var _colorArr = _backgroundColor.substr( _backgroundColor.indexOf('(') + 1, _backgroundColor.length-_backgroundColor.indexOf('(')-2 ).split(','); 12535 12536 var c_r = parseInt(_colorArr[0]); 12537 var c_g = parseInt(_colorArr[1]); 12538 var c_b = parseInt(_colorArr[2]); 12539 12540 var brightness = ((c_r * 299) + (c_g * 587) + (c_b * 114)) / 1000; 12541 if( brightness > 155 ){ 12542 document.querySelector('#navigation-bar').classList.add('navbar-light'); 12543 } 12544 12545 12546 12547 }); 12548</script>
12548 12549<!-- --> 12550 12551 <div id="login_lightbox">
vendor: 71 bytes, lines 12551-12553
12551 12552 12553<script src="https://www.google.com/recaptcha/enterprise.js?render=
125536Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp
vendor: 12 bytes, line 12553
12553"></script>
12554<script type="text/javascript" defer> 12555 12556document.addEventListener("DOMContentLoaded", function(event) { 12557 12558 if (!window.handleFormSubmitWithCaptcha) { 12559 window.handleFormSubmitWithCaptcha = function(loginForm, callback) { 12560 if (!loginForm.recaptcha_token) { 12561 event.preventDefault(); 12562 try { 12563 grecaptcha.enterprise.ready(function() { 12564 grecaptcha.enterprise.execute('6Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp', {action: 'LOGIN'}).then(function(token) { 12565 if (loginForm.querySelector('[name="g-recaptcha-response"]')) { 12566 loginForm.querySelector('[name="g-recaptcha-response"]').value=token; 12567 } else { 12568 var eleToken = document.createElement('input'); 12569 eleToken.setAttribute('type', 'hidden'); 12570 eleToken.setAttribute('id', 'g-recaptcha-response'); 12571 eleToken.setAttribute('name', 'g-recaptcha-response'); 12572 eleToken.setAttribute('value', token); 12573 loginForm.appendChild(eleToken); 12574 } 12575 if (typeof(callback) === 'function') { 12576 callback(); 12577 } 12578 }); 12579 }); 12580 } catch (error) { 12581 console.error("Captcha error: " + error); 12582 } 12583 } 12584 } 12585 12586 12587 // Old Handler for login form (delete this if no issues) 12588 //var passwordInputFields = document.querySelectorAll('.captcha_check [name="password"]'); 12589 //for (var i = 0; i < passwordInputFields.length; i++) { 12590 // passwordInputFields[i].addEventListener('focus', function() { 12591 // handleFormSubmitWithCaptcha(this.closest('.captcha_check')); 12592 // }); 12593 //} 12594 12595 var loginForms = document.querySelectorAll('.captcha_check'); 12596 var handleLogin = function(i) { 12597 var loginForm = loginForms[i]; 12598 loginForm.addEventListener('submit', function(event) { 12599 event.preventDefault(); 12600 handleFormSubmitWithCaptcha(loginForm, function() { 12601 loginForm.submit(); 12602 }); 12603 }); 12604 }; 12605 for (var i = 0; i < loginForms.length; i++) { 12606 handleLogin(i); 12607 } 12608 12609 // Handler for forgot password forms 12610 var forgotPassword = document.querySelector('#tmpl_forgot_login [name="login_handle"]'); 12611 if (forgotPassword) { 12612 forgotPassword.addEventListener('focus', function() { 12613 handleFormSubmitWithCaptcha(this); 12614 }); 12615 } 12616 12617 // Handle for login_form_username forgot password form 12618 var forgotPasswordLoginForm = document.querySelector('#forgotPW_form [name="login_handle"]'); 12619 if (forgotPasswordLoginForm) { 12620 forgotPasswordLoginForm.addEventListener('focus', function() { 12621 handleFormSubmitWithCaptcha(this); 12622 }); 12623 } 12624 } 12625}); 12626</script>
12626 12627 12628<form accept-charset=utf-8 method="post" action="https://secure.bdsm.com/p/login2.cgi" name="LOGIN" class="captcha_check"> 12629<div><input type="hidden" name="who" value="r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" /></div> 12630<input type="hidden" name="_templatename_" value="login_lightbox_form"><input type="hidden" name="site" value="bdsm" /><input type="hidden" name="dcb" value="bdsm.com" /> 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 <a href="javascript:void(0);" class="close">Close</a> 12641 <span class="intro">Please enter your Username and Password</span> 12642 <label class="field" for="login_handle">Username:</label> 12643 <input class="field" id="login_handle" name="handle" type="text" value="" tabindex="1" /> 12644 <label class="field" for="login_password">Password:</label> 12645 <input class="field" id="login_password" name="password" type="password" value="" tabindex="2" /> 12646 <button type="submit" value="Login" id="cover_login_button"><span>Login</span></button> 12647 <input class="remember" id="keep_login" name="keep_login" type="checkbox"> 12648 <label class="remember" for="keep_login">Remember me</label> 12649 <ul class="login_links"> 12650 <li class="first"><a href="/go/page/forgot_login.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=login_lightbox_form-14">Forgot Login Info?</a></li> 12651 <li class="last"><a href="/p/register.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=login_lightbox_form-5">Join for Free</a></li> 12652 </ul> 12653 </form> 12654</div><!-- --> 12655 12656 <div id="content"> 12657 12658 <div class="page clearfix"> 12659 <div id="self_notification_container"></div> 12660 12661 12662
12662<script id="tip_view" type="text/x-handlebars-template"> 12663 <div data-view="TipView" 12664 data-role="view" 12665 data-name="IMCTipView" 12666 data-template-vars="handle:value:{{handle}},pwsid:value:{{pwsid}},b_handle:value:{{b_handle}},b_pwsid:value:{{b_pwsid}},tip_type:value:{{tip_type}}" 12667 > 12668 12669 12670 <div data-role="bar" data-name="TipLoadingBar"> 12671 <div class="spinner-dots"> 12672 <div class="spinner-animate"> 12673 </div> 12674 </div> 12675 </div> 12676 12677 <div data-role="bar" data-name="TipActionBar" style="display:none"> 12678 <div class="title">{{#if from_type}}Tip <span class="handle">{{b_handle}}</span> and get noticed!{{else}}Tip <span class="handle">{{b_handle}}</span> to get on the top of the viewers list.{{/if}}</div> 12679 <div class="user_points"> 12680 You currently have 12681 <span class="points"> 12682 <span data-role="button" data-name="PointsCount"> 0 </span> 12683 <span> pts</span> 12684 </span> 12685 </div> 12686 <div class="tip-options"> 12687 <div class="dropdown-label"> 12688 <span>Select tip amount</span> 12689 </div> 12690 <div class="d-select"> 12691 <div class="custom-dropdown" data-role="view" data-view="CustomDropdown" data-name="TipSelector"> 12692 <div data-display class="dropdown-display" data-default-points="200"> 200 pts</div> 12693 <div data-select class="custom-options" style="display:none"> 12694 <div data-option="1" data-value="10">10 pts</div> 12695 <div data-option="2" data-value="20">20 pts</div> 12696 <div data-option="3" data-value="50">50 pts</div> 12697 <div data-option="4" data-value="100">100 pts</div> 12698 <div data-option="5" data-value="200" style="display:none">200 pts</div> 12699 <div data-option="6" data-value="500">500 pts</div> 12700 <div data-option="7" data-value="1000">1,000 pts</div> 12701 <div data-option="8" data-value="2000">2,000 pts</div> 12702 <div data-option="9" data-value="-1" class="dropdown-link">Buy More</div> 12703 </div> 12704 </div> 12705 </div> 12706 12707 </div> 12708 <div class="tip-info">{{#if from_type}}<span class="handle">{{b_handle}}</span> will be notified of your tip immediately.{{else}}Your tip will be sent immediately and <span class="handle">{{b_handle}}</span> will be notified.{{/if}}</div> 12709 12710 12711 <div class="action-btn"> 12712 <span class="btn btn-blue" 12713 data-role="button" 12714 data-name="TipBtn" 12715 style="display:none"> 12716 Tip 12717 </span> 12718 <span class="btn btn-blue" 12719 data-role="button" 12720 data-name="BuyPtsBtn"> 12721 Buy Points 12722 </span> 12723 </div> 12724 </div> 12725 12726 12727 12728</div> 12729 12730 </script>
12730 12731 12732 12733
12734<script> 12735 if (!window.VIce) {window.VIce = {}} 12736 VIce.widget = VIce.widget || {}; 12737 VIce.points_url = "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=tip&trlid=vice_send_tip-21&do_points=1"; 12738 VIce.points_url_origin_boost = "https://secure.bdsm.com/p/order.cgi?site=bdsm&dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&origin=message_boost&trlid=vice_send_tip-22&do_points=1"; 12739</script>
vendor: 1 bytes, line 12739
12739
12740<script> 12741 (function(){window.VIce=VIce||{};VIce.globals=VIce.globals||{};var online_type_reg=/^(chat|broadcast)/,$=VIce.$||$||jQuery,$tip_default=$("#tip_view_site");if($tip_default&&$tip_default.length){VIce.setTemplate("tip_view_site",$("#tip_view_site").html());} 12742function initTipping(){var $tip_view_tmpl=$("#tip_view"),not_set=true;function delayTemplate(){var sent_html=$('#notification_simple').html(),$notice=$('#self_notification_container'),sentHB=$notice.length&&sent_html&&window.Handlebars&&window.Handlebars.compile(sent_html),messages=window.CD&&window.CD.CONFIG&&window.CD.CONFIG('messages'),el=document.createElement('div');not_set=false;} 12743if($tip_view_tmpl&&$tip_view_tmpl.length){VIce.setTemplate("tip_view",$("#tip_view").html());} 12744if(_.isFunction(VIce.setView)){VIce.setView('CustomDropdown',VIce.BaseView.extend({curr_value:200,display_el:null,is_open:false,d_options:null,d_select:null,tip_placed:false,events:{'click':'toggleOptions'},isOpen:function(){return this.is_open;},disableOptions:function(points){var i,l,temp_val;points=points||0;if(points<this.curr_value){this.$el.addClass("_disabled");} 12745if(this.d_options&&this.d_options.length){l=this.d_options.length;for(i=0;i<l;i++){temp_val=this.d_options.eq(i).attr("data-value");if(temp_val&&isFinite(temp_val)&&parseInt(temp_val,10)>points){this.d_options.eq(i).addClass("_disabled");}}}},updateSelection:function(options){options=options||{};if(options.display_html!=void 0&&options.value!=void 0&&isFinite(options.value)){this.curr_value=parseInt(options.value,10)||0;if(this.display_el&&this.display_el.length){this.display_el.empty();this.display_el.html(options.display_html);} 12746this.trigger("value_changed",{value:this.curr_value});}},showOptions:function(){var self=this;if(self.d_select&&self.d_select.length){self.d_select.show();this.is_open=true;}},hideOptions:function(){var self=this;if(self.d_select&&self.d_select.length){self.d_select.hide();this.is_open=false;}},toggleOptions:function(){if(this.is_open){this.hideOptions();}else{this.showOptions();}},getValue:function(){return this.curr_value;},viceInit:function(){this.render();},render:function(){var self=this,curr_val,$el=self.$el;if(not_set){delayTemplate()} 12747function selectOption(){var cur_ele=VIce.$(this),data={};if(self.d_options&&self.d_options.length){self.d_options.show();} 12748if(cur_ele){data.display_html=cur_ele.html();data.value=cur_ele.attr("data-value");cur_ele.hide();} 12749self.updateSelection(data);} 12750if($el){self.display_el=$el.find("[data-display]");self.d_options=$el.find("[data-option]");self.d_select=$el.find("[data-select]");if(self.display_el&&self.display_el.length){curr_val=self.display_el.attr('data-default-points');if(curr_val){curr_val=parseInt(curr_val,10);if(curr_val&&curr_val>0){this.curr_value=curr_val;}}} 12751if(self.d_options&&self.d_options.length){self.d_options.on("click",selectOption);}} 12752$('#lb-box').trigger('click.lb-mask_to_close');return this;}}));VIce.setView('TipView',VIce.BaseView.extend({min_value:200,PointsCount:{},TipSelector:{},TipBtn:{},BuyPtsBtn:{},points:0,tip_value:0,temp_vars:{},PtsCol:null,page:{},viceInit:function(){this.render();},buyPoints:function(){var self=this,page=self.page,has_redirect=page.data&&page.data('events')&&page.data('events').redirect_to,can_qb=(VIce.logged_in_member&&VIce.logged_in_member.get('can_qb'))||0;if(can_qb){VIce.widget.quickBuy({callback:function(){self.PtsCol.ajax();self.$el.find('[data-option]').eq(0).click();}});return false;} 12753if(self.temp_vars&&self.temp_vars.origin){VIce.trigger('redirect_order_page',{origin:self.temp_vars.origin+"&do_points=1"});}else if(has_redirect){page.trigger("redirect_to",{url:VIce.points_url,broadcaster_handle:self.temp_vars.b_handle});}else{window.location=VIce.points_url||"/p/order.cgi?site=ffadult&origin=tip&do_points=1";} 12754if(VIce.lightbox&&VIce.lightbox['tip_selector']&&VIce.lightbox['tip_selector'].$el){VIce.lightbox['tip_selector'].$el.hide();VIce.lightbox['tip_selector'].$el.next('.modal-backdrop').hide();}},tipFailed:function(){var page=this.page,dsendTip;page.trigger("tip_failed",{tip:this.tip_value,broadcaster_handle:this.temp_vars.b_handle});this.tip_placed=false;if(VIce.lightbox&&VIce.lightbox['tip_selector']){VIce.lightbox['tip_selector'].hide();VIce.lightbox['tip_selector'].$el.next('.modal-backdrop').hide();}},tipSuccess:function(){var page=this.page;page.trigger("tip_placed",{tip:this.tip_value,broadcaster_handle:this.temp_vars.b_handle});this.tip_placed=false;if(VIce.lightbox&&VIce.lightbox['tip_selector']){VIce.lightbox['tip_selector'].hide();}},sendTip:function(){var self=this,value=0;if(VIce.lightbox&&VIce.lightbox['tip_selector']&&VIce.lightbox['tip_selector'].$el){VIce.lightbox['tip_selector'].$el.hide();} 12755if(self.TipSelector&&self.TipSelector.getValue){value=self.TipSelector.getValue();self.tip_value=value;} 12756if(self.PtsCol&&self.PtsCol.giveTip){if(value>0){if(!self.tip_placed){self.tip_placed=true;self.PtsCol.giveTip({to_pwsid:self.temp_vars.b_pwsid,points:value,tip_type:self.temp_vars.tip_type})}}else{self.buyPoints();}}},updatePoints:function(){var self=this,points,min_value=self.min_value,model;if(self.PtsCol&&self.PtsCol.length){model=self.PtsCol.pop();points=model.get("points")||0;if(points!=void 0&&isFinite(points)){points=parseInt(points,10);self.points=points;self.TipSelector.disableOptions(points);
12756points=points.toLocaleString();if(self.PointsCount&&self.PointsCount.$el){self.PointsCount.$el.empty();self.PointsCount.$el.html(points);} 12757if(self.TipSelector&&self.TipSelector.curr_value){min_value=self.TipSelector.curr_value;} 12758if(self.points>=min_value){this.BuyPtsBtn.hide();this.TipBtn.show();} 12759if(self.TipLoadingBar){self.TipLoadingBar.hide();} 12760if(self.TipActionBar){self.TipActionBar.show();}}}},tipChanged:function(options){if(options.value){if(options.value<0){this.buyPoints();} 12761else if(options.value>this.points){this.TipBtn.hide();this.BuyPtsBtn.show();this.TipSelector.$el.addClass("_disabled");}else{this.TipBtn.show();this.BuyPtsBtn.hide();this.TipSelector.$el.removeClass("_disabled");}}},render:function(options){options=options||{};var self=this,temp_vars,dsendTip,page=VIce.currentPage();self.PtsCol=VIce.collection('MemberPoints');page.parseRoles(self.$el,true,this);self.PointsCount=page.getVar("PointsCount");self.TipBtn=page.getVar("TipBtn");self.TipSelector=page.getVar("TipSelector");self.BuyPtsBtn=page.getVar("BuyPtsBtn");self.TipLoadingBar=page.getVar("TipLoadingBar");self.TipActionBar=page.getVar("TipActionBar");self.page=page;if(self.ele_options||self.ele_options['template-vars']){temp_vars=VIce.parseVarString(self.ele_options['template-vars'])||{};self.temp_vars=temp_vars;} 12762if(self.TipBtn){dsendTip=_.debounce(VIce.$.proxy(self.sendTip,self),300);self.TipBtn.$el.one("click",dsendTip);} 12763if(self.TipSelector){self.TipSelector.on("value_changed",VIce.$.proxy(self.tipChanged,self));} 12764if(self.BuyPtsBtn){self.BuyPtsBtn.$el.on("click",VIce.$.proxy(self.buyPoints,self));} 12765if(self.PtsCol){self.PtsCol.on('add_complete',self.updatePoints,self);self.PtsCol.on('no_member_points',self.updatePoints,self);self.PtsCol.once('tip_success',self.tipSuccess,self);self.PtsCol.on('tip_failed',self.tipFailed,self);self.PtsCol.ajax({'of_pwsid':VIce.globals.own_pwsid});} 12766return this;}}));} 12767VIce.widget=VIce.widget||{};VIce.widget.send_tip=function(options){var tmpl,from_type;options=options||{},page=VIce.currentPage();if(!page){page=VIce.Page($('body'));VIce.currentPage=function(){return page;}};tmpl=VIce.template(options.tmpl_view)?options.tmpl_view:'tip_view';from_type=options.tip_type&&!online_type_reg.test(options.tip_type) 12768VIce.showLightbox(VIce.template(tmpl,{handle:options.tipper_handle,pwsid:options.tipper_pwsid,b_handle:options.broadcaster_handle,b_pwsid:options.broadcaster_pwsid,tip_type:options.tip_type,from_type:from_type}),{name:'tip_selector',className:"tip-popup"});};} 12769if(VIce.globals.delay_tip_init){VIce.on('initTipping',initTipping);}else if(VIce&&VIce.setView&&VIce.setTemplate){initTipping();}else{VIce.on('initTipping',initTipping);}}()); 12770</script>
12770 12771<!-- --> 12772 12773
12773<script id="quickbuy" type="text/x-handlebars"><!-- vice_template_quickbuy_widget.handlebars @--> 12774 12775<div data-role="bar" data-name="PointsLoadingBar" class="loading" style="display:none"> 12776 <span class="ql_spinner"></span> 12777</div> 12778 12779<div data-role="bar" data-name="BuyPointsBar" class="qb-points"> 12780 <h2>Get More Points</h2> 12781 12782 <div class="d-select"> 12783 <div class="custom-dropdown" data-role="view" data-view="QBDropdown" data-name="PointsSelector"> 12784 <div data-display class="dropdown-display" data-default-points="{{prices.0.points_count}}"> 12785 <div {{#if prices.0.discount_price}} class="discounted"{{/if}}> 12786 {{prices.0.points}} Points for <span class="strike"><span class="price">{{prices.0.price}} {{#if vat}}<span class='plus_vat'> ({{tax_text}})</span>{{/if}}</span> <span class="discounted-price"> {{prices.0.discount_price}}</span> 12787 </div> 12788 </div> 12789 <div data-select class="custom-options{{#if vat}} vat_options{{/if}}" style="display:none"> 12790 {{#each prices}} 12791 <div data-option="{{option}}" data-value="{{points_count}}"> 12792 <div {{#if discount_price}} class="discounted"{{/if}}> 12793 {{points}} Points for <span class="strike"><span class="price">{{price}} {{#if @root.vat}}<span class='plus_vat'> ({{@root.tax_text}})</span>{{/if}}</span> <span class="discounted-price">{{discount_price}}</span> 12794 </div> 12795 </div> 12796 {{/each}} 12797 </div> 12798 </div> 12799 </div> 12800 12801 <div class="d-select autoload_row" data-role="bar" data-name="AutoLoadBar"> 12802 <input type="checkbox" name="autoreload" data-name="AutoReloadCheck" data-role="button" /> 12803 <div class="indent"> 12804 <p class="bold">Enable autoload so that I never run out of points!</p> 12805 <p>Purchase 1,000 points for {{{autoload_price}}} when my points balance drops to 0.</p> 12806 </div> 12807 </div> 12808 <div class="action-btn"> 12809 <span class="button button-blue btn-blue btn-large" 12810 data-role="button" 12811 data-name="WidgetBuyPtsBtn"> 12812 Order 12813 </span> 12814 </div> 12815 <div data-name="BuyError" data-role="bar" class="error" style="display:none"> 12816 We’ve encountered an error processing your request. Please try again, or try another payment method on our 12817 <span data-name="OrderPage" data-role="button" class="link">order page</span> 12818 <br> 12819 <span class="insufficient_funds">Declined Reason: Insufficient Funds</span> 12820 </div> 12821</div> 12822<div data-name="BuySuccess" data-role="bar" style="display:none"> 12823 <div data-name="PurchasedAmount" data-role="bar" class="success">\{{points}} points have been added</div> 12824 <div class="action-btn close"> 12825 <span class="button button-blue btn-blue btn-large" 12826 data-role="button" 12827 data-name="WidgetCloseBtn"> 12828 Got It! 12829 </span> 12830 </div> 12831</div><!-- --></script>
12831 12832
12832<script>var VIce = window.VIce || {}; 12833 12834VIce.widget = VIce.widget || {}; 12835VIce.widget.quickBuy = function (options) { 12836 var page = VIce.currentPage(), 12837 g = VIce.globals, 12838 WidgetBuyPtsBtn, 12839 WidgetCloseBtn, 12840 PointsSelector, 12841 PointsLoadingBar, 12842 OrderPage, 12843 BuyError, 12844 BuySuccess, 12845 PurchasedAmount, 12846 BuyPointsBar, 12847 AutoLoadBar, 12848 AutoReloadCheck, 12849 endpoint = "/p/order.cgi", 12850 points_product = [], 12851 /*points_product = [ 12852 "18526", 12853 "18514", 12854 "387" 12855 ],*/ 12856 12857 points_digest = [ 12858 "18526:90262b109fcac3131e37a5deef9b3fe1", 12859 "18514:40add813178db573fb12c419640ab55e", 12860 "387:6872c767642565a40cdca054cfab79d7" 12861 ], 12862 12863 factor = 10, 12864 digest = [], 12865 12866 price_list = [ 12867 {points_count:'20.0', points:200, option:1, price: decodeHtml('$3.00') }, 12868 {points_count:'50.0', points:500, option:2, price: decodeHtml('$6.00') }, 12869 {points_count:'100', points:1000, option:3, price: decodeHtml('$10.00') } 12870 ], 12871 data = { 12872 //points: points_product[0] || 6767,//17640, 12873 site: g.site, 12874 points_count: '20.0', 12875 action: 'process', 12876 normal_points: 1, 12877 //payment_id: "reuse_cc:42669460", 12878 origin: 'quickbuy' 12879 }, 12880 index = -1, 12881 default_points_product = 6767, 12882 default_points_digest = '', 12883 l,i; 12884 12885 options = options || {}; 12886 12887 if ( points_digest 12888 && _.isArray(points_digest) 12889 && points_digest.length){ 12890 l = points_digest.length; 12891 for (i = 0;i< l ;i++){ 12892 if (points_digest[i] && _.isString(points_digest[i])){ 12893 index = points_digest[i].indexOf(':'); 12894 if (index > 0){ 12895 points_product[i] = points_digest[i].substr(0,index); 12896 points_digest[i] = points_digest[i].substr(index+1,points_digest[i].length); 12897 } 12898 12899 } 12900 } 12901 default_points_digest = points_digest[0]; 12902 } 12903 if (points_product && _.isArray(points_product) && points_product[0]){ 12904 default_points_product = points_product[0]; 12905 } 12906 12907 _.extend(data,{points:default_points_product, digest: default_points_digest}, options.qb_params); 12908 12909 if (!page) { 12910 page=VIce.Page(jQuery('body')); 12911 VIce.currentPage=function(){ 12912 return page; 12913 } 12914 } 12915 12916 if ( !VIce.template('quickbuy') ) { 12917 VIce.setTemplate("quickbuy", jQuery("#quickbuy").html()); 12918 } 12919 12920 if ( !VIce.view('QBDropdown') ) { 12921 VIce.setView('QBDropdown', VIce.extend('view', 'CustomDropdown', { 12922 updateSelection: function(options) { 12923 this.curr_value = options.value || 0; 12924 if (this.display_el && this.display_el.length) { 12925 this.display_el.empty(); 12926 this.display_el.html(options.display_html); 12927 } 12928 this.trigger("value_changed", {value: this.curr_value}); 12929 } 12930 })); 12931 } 12932 12933 VIce.showLightbox(VIce.template('quickbuy', { 12934 prices: price_list 12935 }), { 12936 name: 'quickbuy_lb', 12937 className: "lightbox quickbuy-lb desktop" 12938 }); 12939 12940 function reqFinished() { 12941 PointsLoadingBar.hide(); 12942 } 12943 12944 function updatePoints(xml) { 12945 var pts_cont = PurchasedAmount.$el, 12946 pts_tmp = pts_cont.html(), 12947 amt = (parseInt(PointsSelector.curr_value,10) * factor) || 200, 12948 error = jQuery(xml).find('error_type').length, 12949 curr_pts; 12950 12951 if (error) { 12952 BuyError.show(); 12953 return; 12954 } 12955 12956 // Update the point totals in the calling 'points buyer' 12957 if (options.prop_model && options.pts_key) { 12958 curr_pts = parseInt(options.prop_model.get(options.pts_key), 10) || 0; 12959 options.prop_model.set(options.pts_key, curr_pts + amt) 12960 } 12961 12962 pts_cont.html(pts_tmp.replace('{{points}}',amt)); 12963 BuySuccess.show(); 12964 BuyPointsBar.hide(); 12965 12966 if (options.callback) { 12967 12968 // update 'options' value after user quick buy 12969 options.handle = ''; 12970 options.pwsid = ''; 12971 options.trigger_redirect = 'true'; 12972 options.standalone = 'true'; 12973 options.is_gold = _.returnValue( 'VIce.globals.level', 100 ) > 299; 12974 self.options = options; 12975 12976 options.callback(); 12977 } 12978 } 12979 12980 function reqFailed(xml) { 12981 BuyError.show(); 12982 } 12983 12984 function ptsOrder() { 12985 var site = (VIce.globals && VIce.globals.site) || 'ffadult'; 12986 window.location = "/p/order.cgi?origin=failed_qb&site=" + site
12986+ "&do_points=1&points_count=" + PointsSelector.curr_value + "#" + site + "?{}"; 12987 } 12988 12989 function closeLbox() { 12990 VIce.lightbox.quickbuy_lb.hide(); 12991 } 12992 12993 function buyPoints(e) { 12994 12995 data = e.data && e.data.ajax_params || {}; 12996 data.points_count = (e.data && e.data.el && e.data.el.curr_value || '20.0'); 12997 PointsLoadingBar.show(); 12998 BuyError.hide(); 12999 13000 if (points_product && _.isArray(points_product) && points_product.length 13001 && points_digest && _.isArray(points_digest) && points_digest.length){ 13002 switch (data.points_count){ 13003 case '50.0': 13004 data.points = points_product[1]; 13005 data.digest = points_digest[1]; 13006 data.price = cleanPrice(price_list[1].price); 13007 break; 13008 case '100': 13009 data.points = points_product[2]; 13010 data.digest = points_digest[2]; 13011 data.price = cleanPrice(price_list[2].price); 13012 break; 13013 default: 13014 data.points = points_product[0]; 13015 data.digest = points_digest[0]; 13016 data.price = cleanPrice(price_list[0].price); 13017 } 13018 } 13019 13020 if ( options.can_autoreload ) { 13021 data.auto_refill = AutoReloadCheck.$el && AutoReloadCheck.$el.prop("checked") ? 1 : 0; 13022 } 13023 13024 qbTdsAuth(VIce.globals.own_pwsid, data, function(auth, tdsuid) { 13025 if(!auth) { 13026 data.scaIndicator = -1; 13027 } else { 13028 data.cavv = (auth['cavv'] || auth['authenticationValue']) ? (auth['cavv'] || auth['authenticationValue']) : "" , 13029 data.eci = auth.eci ? auth.eci : "", 13030 data.status = auth.status ? auth.status : "", 13031 data.xid = (auth['xid'] || auth['dsTransId']) ? (auth['xid'] || auth['dsTransId']) : "", 13032 data['3dsuid'] = tdsuid, 13033 data.threeDSVersion = auth['protocolVersion'], 13034 data.scaIndicator = !auth.hasOwnProperty('scaIndicator') ? -1 : auth.scaIndicator ? 1 : 0 13035 } 13036 13037 $.ajax({ 13038 url: endpoint, 13039 data: data, 13040 dataType: "xml" 13041 }).always(reqFinished).done(updatePoints).fail(reqFailed); 13042 }); 13043 } 13044 13045 PointsSelector = page.getVar('PointsSelector'); 13046 WidgetBuyPtsBtn = page.getVar('WidgetBuyPtsBtn'); 13047 PointsLoadingBar = page.getVar('PointsLoadingBar'); 13048 BuyError = page.getVar('BuyError'); 13049 OrderPage = page.getVar('OrderPage'); 13050 WidgetCloseBtn = page.getVar('BuySuccess'); 13051 PurchasedAmount = page.getVar('PurchasedAmount'); 13052 BuyPointsBar = page.getVar('BuyPointsBar'); 13053 BuySuccess = page.getVar('BuySuccess'); 13054 AutoLoadBar = page.getVar('AutoLoadBar'); 13055 AutoReloadCheck = page.getVar('AutoReloadCheck'); 13056 13057 if ( options.can_autoreload ) { 13058 AutoLoadBar.show(); 13059 } 13060 13061 if ( options.show_buyerror ) { 13062 BuyError.show(); 13063 } 13064 13065 if ( options.can_autoreload && options.autorefill_setting == '-1' ) { 13066 AutoReloadCheck.$el.prop('checked', true); 13067 PointsSelector.updateSelection({ 13068 display_html: PointsSelector.$el.find('[data-value="100"]').html(), 13069 value:100 13070 }); 13071 } 13072 13073 PointsSelector.curr_value = price_list[0].points_count;
13074 WidgetBuyPtsBtn.$el.on('click', {el:PointsSelector, ajax_params:data}, buyPoints); 13075 OrderPage.$el.on('click', ptsOrder); 13076 WidgetCloseBtn.$el.on('click', closeLbox); 13077 13078} 13079 13080function decodeHtml(html) { 13081 var txt = document.createElement("textarea"); 13082 txt.innerHTML = html; 13083 return txt.value; 13084} 13085 13086function cleanPrice(price) { 13087 console.log(price); 13088 var decPrice = price.replace(',', '.'); 13089 var noSym = decPrice.replace(/[^0-9.]+/, ''); 13090 return noSym; 13091} 13092 13093function qbTdsAuth(pwsid, data, cb) { 13094 console.log(data); 13095 var url = '/coreapi/jsonfeed'; 13096 if(window.location.search.match(/sca_test=1/gi)) { 13097 url += '?is_sca_test=1'; 13098 } 13099 $.post(url, { 13100 action: 'paay', 13101 subaction: 'getid', 13102 pwsid: pwsid, 13103 use_default_payment: 1, 13104 products: data.points, 13105 amount: data.price, 13106 pid: "g1171407", 13107 gpid: "g1171407", 13108 origin: data.origin, 13109 s: "bdsm", 13110 is_llc: 0, 13111 profile_country: "", 13112 cobrand_id: "11837" 13113 }, function(jsonf) { 13114 console.log(jsonf); 13115 13116 if(jsonf && jsonf.tdsuid && jsonf.tokens && jsonf.tokens.at) { 13117 // got values, create temp form and run the auth 13118 var form = document.createElement('form'); 13119 var content = document.getElementById('content') || document.getElementById('body'); 13120 13121 form.id = "tdsqbauth"; 13122 form.style.display = 'none'; 13123 content.append(form); 13124 runTdsAuth.apply(form, [jsonf, data.points, (jsonf.amount || data.price), cb]); 13125 } else { 13126 cb(null); 13127 } 13128 }); 13129} 13130 13131function runTdsAuth(data, prod, total, cb) { 13132 var tds_amount = this.elements['tds_amount']; 13133 var tds_token = this.elements['token']; 13134 var tds_ccmonth = this.elements['tds_ccmonth']; 13135 var tds_ccyear = this.elements['tds_ccyear']; 13136 var tds_uid = this.elements['3dsuid']; 13137 var protocolversioninput = this.elements['protocolVersion']; 13138 var authenticationvalueinput = this.elements['authenticationValue']; 13139 var dstxidinput = this.elements['dsTransactionId']; 13140 var cctoken = this.elements['cctoken']; 13141 13142 window.tdsuid = data.tdsuid; 13143 13144 if(!tds_ccmonth) { 13145 tds_ccmonth = document.createElement('input'); 13146 tds_ccmonth.setAttribute('type', 'hidden'); 13147 tds_ccmonth.setAttribute('name', 'tds_ccmonth'); 13148 tds_ccmonth.setAttribute('data-threeds', 'month'); 13149 tds_ccmonth.value = data.expmon; 13150 this.append(tds_ccmonth); 13151 } else { 13152 tds_ccmonth.setAttribute('data-threeds', 'month'); 13153 tds_ccmonth.value = data.expmon; 13154 } 13155 13156 if(!tds_ccyear) { 13157 tds_ccyear = document.createElement('input'); 13158 tds_ccyear.setAttribute('type', 'hidden'); 13159 tds_ccyear.setAttribute('name', 'tds_ccyear'); 13160 tds_ccyear.setAttribute('data-threeds', 'year'); 13161 tds_ccyear.value = data.expyr; 13162 this.append(tds_ccyear); 13163 } else { 13164 tds_ccyear.setAttribute('data-threeds', 'year'); 13165 tds_ccyear.value = data.expyr; 13166 } 13167 13168 if(!tds_amount) { 13169 tds_amount = document.createElement('input'); 13170 tds_amount.setAttribute('type', 'hidden'); 13171 tds_amount.setAttribute('name', 'tds_amount'); 13172 tds_amount.setAttribute('data-threeds', 'amount'); 13173 tds_amount.value = total 13174 this.append(tds_amount); 13175 } else { 13176 tds_amount.value = total; 13177 } 13178 if(!tds_uid) { 13179 tds_uid = document.createElement('input'); 13180 tds_uid.setAttribute('type', 'hidden'); 13181 tds_uid.setAttribute('name', '3dsuid'); 13182 tds_uid.setAttribute('data-threeds', 'id'); 13183 tds_uid.value = data.tdsuid; 13184 this.append(tds_uid); 13185 } else { 13186 tds_uid.setAttribute('data-threeds', 'id'); 13187 tds_uid.value = data.tdsuid; 13188 } 13189 13190 if(!protocolversioninput) { 13191 protocolversioninput = document.createElement('input'); 13192 protocolversioninput.setAttribute('type', 'hidden'); 13193 protocolversioninput.setAttribute('name', 'protocolVersion'); 13194 protocolversioninput.id = 'protocolVersion'; 13195 this.append(protocolversioninput); 13196 } 13197 if(!authenticationvalueinput) { 13198 authenticationvalueinput = document.createElement('input'); 13199 authenticationvalueinput.setAttribute('type', 'hidden'); 13200 authenticationvalueinput.setAttribute('name', 'authenticationValue'); 13201 authenticationvalueinput.id = 'authenticationValue'; 13202 this.append(authenticationvalueinput); 13203 } 13204 if(!dstxidinput) { 13205 dstxidinput = document.createElement('input'); 13206 dstxidinput.setAttribute('type', 'hidden'); 13207 dstxidinput.setAttribute('name', 'dsTransactionId'); 13208 dstxidinput.id = 'dsTransactionId'; 13209 this.append(dstxidinput); 13210 } 13211 13212 // ffin token 13213 if(!cctoken) { 13214 cctoken = document.createElement('input'); 13215 cctoken.setAttribute('type', 'hidden'); 13216 cctoken.setAttribute('name', 'cctoken'); 13217 cctoken.setAttribute('data-threeds', 'cctoken'); 13218 cctoken.value = ('ffin:' + data.tokens.at); 13219 this.append(cctoken); 13220 } else { 13221 cctoken.setAttribute('data-threeds', 'cctoken'); 13222 cctoken.value = ('ffin:' + data.tokens.at); 13223 } 13224 window.restrictedCountry = (data.hasOwnProperty('is_restricted_country') && data.is_restricted_country); 13225 var tdsOptions = {
13226 verbose: true, 13227 resolve: threeDSSuccess, 13228 reject: threeDSError, 13229 endpoint:"https://api.3dsintegrator.com/v2.2", 13230 domain: window.location.origin, 13231 autoSubmit: false, 13232 eciInputId: 'eci', 13233 cavvInputId: 'cavv', 13234 xidInputId: 'xid', 13235 showIframe: false, 13236 showChallenge: false, 13237 prompt: handlePrompt, 13238 currency: "840" 13239 }; 13240 13241 tdsOptions.protocolVersion = data.protocolVersion; 13242 13243 if(data.sca_required) { 13244 window.SCAFlowEnabled = true; 13245 } 13246 var apikey = data.apiKey || "g0RKXeRmAUDuFKgJp4qCFp6Sy8k20mT6"; 13247 13248 logRequestStart(tdsuid, function(logresp) { 13249 // start paay auth 13250 var tds = new ThreeDS('tdsqbauth', apikey, null, tdsOptions); 13251 tds.verify(threeDSSuccess, threeDSError); 13252 }); 13253 13254 function logRequestStart(id, cb) { 13255 var getTime = Date.now 13256 $.post('/coreapi/jsonfeed', { 13257 action: 'paay', 13258 subaction: 'log', 13259 data: JSON.stringify({ 13260 id: id, 13261 request: 1, 13262 request_datetime: (getTime() / 1000) 13263 }) 13264 }, cb); 13265 } 13266 13267 function logAuth(tdsuid, resp, cb) { 13268 var getTime = Date.now; 13269 $.post('/coreapi/jsonfeed', { 13270 action: 'paay', 13271 subaction: 'log', 13272 data: JSON.stringify({ 13273 id: tdsuid, 13274 response: resp, 13275 token: resp.token, 13276 amount: total, 13277 products: prod, 13278 response_datetime: (getTime() / 1000), 13279 response_code: (resp.success ? 1 : 0) 13280 }) 13281 }, cb); 13282 } 13283 13284 function logError(tdsuid, resp, cb) { 13285 var getTime = Date.now; 13286 $.post('/coreapi/jsonfeed', { 13287 action: 'paay', 13288 subaction: 'log', 13289 data: JSON.stringify({ 13290 id: tdsuid, 13291 response: resp, 13292 amount: total, 13293 products: prod, 13294 response_datetime: (getTime() / 1000), 13295 response_code: 0 13296 }) 13297 }, cb); 13298 } 13299 13300 function threeDSSuccess(resp) { 13301 console.log("Tds Auth Complete:", resp); 13302 13303 logAuth(data.tdsuid, resp, function(res) { 13304 //got auth do something 13305 document.getElementById('tdsqbauth').remove(); 13306 authFinished = true; 13307 authInProgress = false; 13308 console.log("success log", res); 13309 cb(resp, data.tdsuid); 13310 }); 13311 } 13312 13313 function threeDSError(resp) { 13314 //check error type, if "Please subscribe again" then do not log 13315 var jsonErr = JSON.parse(resp); 13316 if(jsonErr && jsonErr.error && jsonErr.error.match(/Please subscribe again/g)) { 13317 console.log("tds result not ready yet"); 13318 return; 13319 } 13320 console.log("TDS Auth End - Error"); 13321 logError(tdsuid, resp, function(res) { 13322 //got error response, cleanup and unlock 13323 document.getElementById('tdsqbauth').remove(); 13324 authFinished = true; 13325 authInProgress = false; 13326 console.log("error log", res); 13327 }); 13328 } 13329 13330 function handlePrompt(status) { 13331 console.log('TDS PROMPT', status); 13332 if((status && status.scaIndicator && status.scaIndicator === true) || restrictedCountry) { 13333 hasPendChal = true; 13334 if(userHasSubmit) { 13335 $('[id^="__threeds"]').addClass('showchal'); 13336 } 13337 } 13338 } 13339 13340} 13341 13342 13343// On the few pages the logged_in_member model doesn't exist 13344if (!VIce.logged_in_member && VIce.model) { 13345 var model = VIce.model("Member"); 13346 VIce.logged_in_member = new model({ 13347 can_qb: 0}); 13348} 13349<!-- --></script>
13349 13350 13351 13352
13352<script> 13353 $ = $j; 13354 </script>
13354 13355 13356<section id="rest-1" class="fgtpwd-popup"> 13357 <div class="fgtpwd-box"> 13358 <div class="fgtpwd-title">Reset Password</div> 13359 <form class="fgtpwd-cotent"> 13360 <div class="fgtpwd-desc">If you've forgotten your password, you can enter your email address below. An email will then be sent with a link to set up a new password.</div> 13361 <div class="reset-box"> 13362 <label class="reset-input"><input type="text" name="v15-fg-handle" placeholder="Email"></label> 13363 <div class="errormsg"></div> 13364 <div class="fgtpwd-btns"> 13365 <div class="btn-no">Cancel</div><button class="btn-ys">Send</button> 13366 </div> 13367 </div> 13368 </form> 13369 </div> 13370</section> 13371<section id="rest-2" class="fgtpwd-popup"> 13372 <div class="fgtpwd-box"> 13373 <div class="fgtpwd-title">Reset Link Sent</div> 13374 <form class="fgtpwd-cotent"> 13375 <div class="confirm-box"> 13376 <div class="confirm-title"> 13377 <div class="confirm-title-txt">If the email is registered with our site, you will receive an email with instructions to reset your password. Password reset link sent to: <span></span></div> 13378 </div> 13379 <div class="confirm-code-desc">Check your email and enter the confirmation code:</div> 13380 <div class="confirm-code-box"> 13381 <input type="hidden" name="confirmation"> 13382 <input type="text" placeholder="Confirmation" name="confirmation_code"> 13383 <button class="btn-ys">Submit</button> 13384 </div> 13385 <div class="errormsg"></div> 13386 <div class="confirm-code-desc2">Don't see the email?</div> 13387 <ul class="confirm-fn"> 13388 <li id="btn-resend-confirm">Resend Confirmation Link</li> 13389 <li id="btn-bk-reset1">Start Over</li> 13390 </ul> 13391 <div class="fgtpwd-btns"><div class="btn-no">Close</div></div> 13392 </div> 13393 <div class="confirm-bottom">If you have any questions, please contact <a href="/p/help.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=forgot_login_v1.5-3">Customer Service</a></div> 13394 </form> 13395 </div> 13396</section> 13397
13398<script> 13399 let isPreFgt = false; 13400 let aErrorMsg =[ 13401 "The service is temporarily busy, please try again later.", 13402 "Invalid Username", 13403 "Invalid Email", 13404 "Invalid Email", 13405 "Invalid Account", 13406 "The service is temporarily busy, please try again later." 13407 ]; 13408 13409 function openNewForgotLogin(){ 13410 $("html, body, #rest-1").addClass("popup"); 13411 } 13412 13413 $('body').on("click", ".forgot_password", function(event){ 13414 event.preventDefault(); 13415 openNewForgotLogin(); 13416 }); 13417 13418 $('body').on("click", "#rest-1 .btn-no", function(event){ 13419 event.preventDefault(); 13420 if(isPreFgt) { 13421 isPreFgt = false; 13422 window.location.href = "/p/page.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=forgot_login_v1.5-15"; 13423 } else if (window.location.pathname === '/go/page/forgot_login.html') { 13424 window.location = "/"; 13425 } else { 13426 $("#rest-1 .fgtpwd-cotent")[0].reset(); 13427 $("#rest-1").removeClass("error"); 13428 $("html, body, #rest-1").removeClass("popup"); 13429 } 13430 }); 13431 13432 function callForgotpassword(_data) { 13433 jQuery.ajax({ 13434 method: "POST", 13435 contentType: "application/json; charset=utf-8", 13436 url: "/api2/v1/forgot/password", 13437 async: false, 13438 dataType: "json", 13439 data: JSON.stringify(_data), 13440 error: function(res){ 13441 console.log("[error]: api2/v1/forgot/password"); 13442 $("#rest-1").addClass("error"); 13443 $("#rest-1 .errormsg").html(aErrorMsg[0]); 13444 }, 13445 success: function(res) { 13446 if (res.status == 200 && res.payload["success"] == 1) 13447 { 13448 $("#rest-1").removeClass("error"); 13449 $("#rest-2 .confirm-title-txt span").html(res.payload["email"]); 13450 $('#rest-2 [name="confirmation"]').val(res.payload["confirmation"]); 13451 $("#rest-1").removeClass("popup"); 13452 $("#rest-2").addClass("popup"); 13453 } else { 13454 console.log("[api success but has error]: " + res.payload["message"]); 13455 $("#rest-1").addClass("error"); 13456 $("#rest-1 .errormsg").html(aErrorMsg[res.payload["message"]]); 13457 } 13458 } 13459 }); 13460 } 13461 13462 $('body').on("click", "#rest-1 .btn-ys,#btn-resend-confirm", function(event){ 13463 event.preventDefault(); 13464 13465 const sHandle = $('[name="v15-fg-handle"]').val().replace(/</g, "<").replace(/>/g, ">"); 13466 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; 13467 13468 if(sHandle && emailRegex.test(sHandle)) 13469 { 13470 try { 13471 grecaptcha.enterprise.ready(function() { 13472 grecaptcha.enterprise.execute('6Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp', {action: 'LOGIN'}).then(function(_token) { 13473 let kData = { 13474 handle: sHandle, 13475 token: _token 13476 }; 13477 callForgotpassword(kData); 13478 }); 13479 }); 13480 } catch (error) { 13481 console.error("Captcha error: " + error); 13482 } 13483 13484 } else { 13485 $("#rest-1").addClass("error"); 13486 $("#rest-1 .errormsg").html("Please enter a valid email address"); 13487 } 13488 }); 13489 13490 $('body').on("click", "#rest-2 .btn-no", function(event){ 13491 event.preventDefault(); 13492 if(isPreFgt) { 13493 isPreFgt = false; 13494 window.location.href = "/p/page.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=forgot_login_v1.5-16"; 13495 } else if (window.location.pathname === '/go/page/forgot_login.html') { 13496 window.location = "/"; 13497 } else { 13498 $("#rest-1,#rest-2").removeClass("error"); 13499 $(".fgtpwd-cotent")[0].reset(); 13500 $("html, body, #rest-2").removeClass("popup"); 13501 } 13502 }); 13503 13504 $('body').on("click", "#rest-2 .btn-ys", function(event){ 13505 event.preventDefault(); 13506 let sCode = $('[name="confirmation_code"]').val().replace(/</g, "<").replace(/>/g, ">"); 13507 let sConfirmation = $('[name="confirmation"]').val(); 13508 if(sCode) 13509 { 13510 let kData = { 13511 confirmation: sConfirmation, 13512 confirmation_code: sCode 13513 }; 13514 jQuery.ajax({ 13515 method: "POST", 13516 contentType: "application/json; charset=utf-8", 13517 url: "/api2/v1/validate/confirmation_code", 13518 async: false, 13519 dataType: "json", 13520 data: JSON.stringify(kData), 13521 error: function(res){ 13522 console.log("[error]: api2/v1/validate/confirmation_code"); 13523 }, 13524 success: function(res) { 13525 if (res.status == 200 && res.payload["success"] == 1) 13526 { 13527 window.location.href = res.payload["redirect_url"]; 13528 } else { 13529 $("#rest-2").addClass("error"); 13530 $("#rest-2 .errormsg").html("The confirmation code you entered is invali
13530d. Please enter the correct confirmation code."); 13531 } 13532 } 13533 }); 13534 } else { 13535 $("#rest-2").addClass("error"); 13536 $("#rest-2 .errormsg").html("The confirmation code you entered is invalid. Please enter the correct confirmation code."); 13537 } 13538 }); 13539 13540 $('body').on("click", "#btn-bk-reset1",function(event){ 13541 $(".fgtpwd-cotent")[0].reset(); 13542 $("#rest-1,#rest-2").removeClass("error"); 13543 $("#rest-2").removeClass("popup"); 13544 $("#rest-1").addClass("popup"); 13545 }); 13546</script>
vendor: 75 bytes, lines 13546-13552
13546 13547 13548 13549 13550 13551 13552<script src="https://www.google.com/recaptcha/enterprise.js?render=
135526Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp
vendor: 12 bytes, line 13552
13552"></script>
13553<script type="text/javascript" defer> 13554 13555document.addEventListener("DOMContentLoaded", function(event) { 13556 13557 if (!window.handleFormSubmitWithCaptcha) { 13558 window.handleFormSubmitWithCaptcha = function(loginForm, callback) { 13559 if (!loginForm.recaptcha_token) { 13560 event.preventDefault(); 13561 try { 13562 grecaptcha.enterprise.ready(function() { 13563 grecaptcha.enterprise.execute('6Le39tEaAAAAAMMkCDMgcFqH-bd48PekQZWZSphp', {action: 'LOGIN'}).then(function(token) { 13564 if (loginForm.querySelector('[name="g-recaptcha-response"]')) { 13565 loginForm.querySelector('[name="g-recaptcha-response"]').value=token; 13566 } else { 13567 var eleToken = document.createElement('input'); 13568 eleToken.setAttribute('type', 'hidden'); 13569 eleToken.setAttribute('id', 'g-recaptcha-response'); 13570 eleToken.setAttribute('name', 'g-recaptcha-response'); 13571 eleToken.setAttribute('value', token); 13572 loginForm.appendChild(eleToken); 13573 } 13574 if (typeof(callback) === 'function') { 13575 callback(); 13576 } 13577 }); 13578 }); 13579 } catch (error) { 13580 console.error("Captcha error: " + error); 13581 } 13582 } 13583 } 13584 13585 13586 // Old Handler for login form (delete this if no issues) 13587 //var passwordInputFields = document.querySelectorAll('.captcha_check [name="password"]'); 13588 //for (var i = 0; i < passwordInputFields.length; i++) { 13589 // passwordInputFields[i].addEventListener('focus', function() { 13590 // handleFormSubmitWithCaptcha(this.closest('.captcha_check')); 13591 // }); 13592 //} 13593 13594 var loginForms = document.querySelectorAll('.captcha_check'); 13595 var handleLogin = function(i) { 13596 var loginForm = loginForms[i]; 13597 loginForm.addEventListener('submit', function(event) { 13598 event.preventDefault(); 13599 handleFormSubmitWithCaptcha(loginForm, function() { 13600 loginForm.submit(); 13601 }); 13602 }); 13603 }; 13604 for (var i = 0; i < loginForms.length; i++) { 13605 handleLogin(i); 13606 } 13607 13608 // Handler for forgot password forms 13609 var forgotPassword = document.querySelector('#tmpl_forgot_login [name="login_handle"]'); 13610 if (forgotPassword) { 13611 forgotPassword.addEventListener('focus', function() { 13612 handleFormSubmitWithCaptcha(this); 13613 }); 13614 } 13615 13616 // Handle for login_form_username forgot password form 13617 var forgotPasswordLoginForm = document.querySelector('#forgotPW_form [name="login_handle"]'); 13618 if (forgotPasswordLoginForm) { 13619 forgotPasswordLoginForm.addEventListener('focus', function() { 13620 handleFormSubmitWithCaptcha(this); 13621 }); 13622 } 13623 } 13624}); 13625</script>
13625 13626 13627 13628
13628<script> 13629 function toggleMailImage() { 13630 if(document.getElementById('toggleMailImage') && document.getElementById('toggleMailImage_displayText')){ 13631 var ele = document.getElementById('toggleMailImage'); 13632 var text = document.getElementById('toggleMailImage_displayText'); 13633 if(ele.style.display == 'none') { 13634 ele.style.display = 'block'; 13635 text.innerHTML = document.getElementById('toggleMailImage_click_here').innerHTML; 13636 }else { 13637 ele.style.display = 'none'; 13638 text.innerHTML = document.getElementById('toggleMailImage_try_following').innerHTML; 13639 } 13640 } 13641 } 13642 function requestEmail() { 13643 var url = "/p/main.cgi?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=forgot_login-1&action=forgot&do=resend_password_email&hid="; 13644 ajax.send(url, function(r){ if (r.responseText == 'sent') { document.getElementById('email_sent_div').style.display = 'block'; document.getElementById('email_resent').style.display = 'none'; } } ); 13645 } 13646 </script>
13646 13647 <dl id="toggleMailImage_bank" style="display:none;"> 13648 <dd id="toggleMailImage_try_following"><img src="https://secureimage.securedataimages.com/images/bdsm/regpage/arrow.gif" width="9" height="10" alt="arrow" class="pr5" border="0"/><span class="tdu">Did not receive an email?</span></dd> 13649 <dd id="toggleMailImage_click_here"><img src="https://secureimage.securedataimages.com/images/bdsm/regpage/arrow_open.gif" width="9" height="10" alt="arrow" class="pr5" border="0"/><span class="tdu">Did not receive an email?</span></dd> 13650 </dl> 13651 <div id="tmpl_forgot_login"> 13652 <div class="w100 mt40" id="forgot_login"> 13653 <form accept-charset=utf-8 method="post" action="/p/main.cgi" id="submit_form"> 13654<div><input type="hidden" name="who" value="r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--" /></div> 13655<input type="hidden" name="_templatename_" value="forgot_login"><input type="hidden" name="site" value="bdsm" /><input type="hidden" name="dcb" value="bdsm.com" /> 13656 <input type="hidden" name="new" value="1" /> 13657 <input type="hidden" name="action" value="forgot" /> 13658
13658<script> 13659 openNewForgotLogin(); 13660 </script>
13660 13661 </form> 13662 </div> 13663 </div> 13664 13665 13666 <!-- footer --> 13667 13668 13669<!-- load react --> 13670 13671 13672 13673 </div> 13674 </div> 13675 <div id="footer"> 13676 <div class="footer_wrapper"> 13677 <div class="copy"> 13678 13679 <div>Persons appearing in photographs may not be actual members. Other data for illustrative purposes only.</div> 13680 13681 <div>Copyright © 2016-2026 Magnolia Blossom Inc. All rights reserved.<br> 13682 <br>Disclaimer: This website contains adult material, all members and persons appearing on this site have contractually represented to us that they are 18 years of age or older.</div> 13683 <div>BDSM.com does not conduct criminal background screening of its members.<br /> 13684<span>To learn about Internet Dating Safety, <a href="javascript:void(0);" class="" onclick="window.open('/go/page/internet_safety_law.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&popup=1&trlid=bdsm_guest_footer_2025-17', 'invite','resizable=yes,scrollbars=yes,height=300,width=600,false');" style="" >click here</a>.</span></div> 13685 </div> 13686 <div class="links"> 13687 <a href="/www/guest/#/privacy-policy" target="_top">Privacy Policy</a> | 13688 <a href="/www/guest/#/terms-of-use" target="_top">Terms of Use</a> | 13689 <a href="/www/guest/#/protect_kids" target="_top">Protect Kids</a> | 13690 <a href="/www/guest/#/contact" target="_top">Report Abuse or Sexually Explicit Ads</a> | 13691 <a href="/www/guest/#/2257_notice" target="_top">18 U.S.C. 2257 Record Keeping Requirements Compliance Statement</a> | 13692 <a href="javascript:void(0);" id="AHT_policy">Anti-Human & Sexual Trafficking Policy</a> | 13693 <a href="/www/guest/#/complaints-abuse-policy" target="_top">COMPLAINTS, ABUSE REPORTING & CONTENT REMOVAL POLICY</a> | 13694 <a href="/www/guest/#/consent-content-policy" target="_top">Consent & Content Policy</a><br> 13695 13696 <br>This website is operated in the US by Magnolia Blossom Inc. at 800 West El Camino Real, Suite 180, Mountain Vie
13696w, CA 94040; Contact us at 855-794-2242 (US toll free), 0800 098 8311(UK toll-free), 1800 954 607 (AU toll-free). </div> 13697 <div id="aht_overlay" style="display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.75); z-index: 99999; align-items: center; justify-content: center;"> 13698 <div class="aht_modal" style="position: relative; width: 80%; max-width: 900px; height: 80%; background: #fff; border-radius: 8px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.5);"> 13699 <span id="aht_close" style="position: absolute; top: 10px; right: 15px; font-size: 30px; font-weight: bold; color: #333; cursor: pointer; z-index: 100000; line-height: 1;">×</span> 13700 <iframe id="aht_iframe" src="" style="width: 100%; height: 100%; border: none;"></iframe> 13701 </div> 13702 </div> 13703 <div class="logos"> 13704 <div class="left veris_seal"> 13705 </div> 13706 <div class="left"> 13707 <div class="rta"> 13708 <a href="/go/page/protect_kids.html?dcb=bdsm.com&who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&trlid=bdsm_guest_footer_2025-18" target="_top"><img src="https://secureimage.securedataimages.com/images/bdsm.com/cover/images/88x31_RTA_c.gif" alt="RTA" style="border:0px;width:88px;height:31px;" /></a> 13709 </div> 13710 <ul class="languages" data-anon="1"> 13711 <li class="suspended"> 13712 <a lang="en" hreflang="en" class="selected english" onclick="this.parentNode.className = this.parentNode.className == 'suspended' ? 'expanded nobo' : 'suspended';"><span>English</span></a> 13713 <ul> 13714 <li><div lang="es" hreflang="es" href="" data-lang="spanish"><span>Español</span></div></li> <li><div lang="fr" hreflang="fr" data-lang="french"><span>Français</span></div></li> <li><div lang="de" hreflang="de" data-lang="german"><span>Deutsch</span></div></li> <li><div lang="ja" hreflang="ja" data-lang="japanese"><span>日本語</span></div></li> <li><div lang="pt" hreflang="pt" data-lang="portuguese"><span>Português</span></div></li> <li><div lang="it" hreflang="it" data-lang="italian"><span>Italiano</span></div></li> <li><div lang="nl" hreflang="nl" data-lang="dutch"><span>Nederlands</span></div></li> <li><div lang="sv" hreflang="sv" data-lang="swedish"><span>Svenska</span></div></li> <li><div lang="zh" hreflang="zh" data-lang="chinese"><span>繁體中文</span></div></li> </ul> 13715 </li> 13716 </ul> 13717 13718 <div class="cc_icon"> 13719 <img src="https://secureimage.securedataimages.com/images/visa_2020.jpg"> 13720 <img src="https://secureimage.securedataimages.com/images/mastercard_2024.jpg"> 13721 </div> 13722 <div class="clear"></div> 13723 </div> 13724 </div><!-- End logos --> 13725 </div><!-- End footer_wrapper --> 13726 </div><!-- End footer -->
13727<script type="text/javascript"> 13728$(document).ready(function() { 13729 $('#AHT_policy').on('click', function(e) { 13730 e.preventDefault(); 13731 var targetUrl = "/go/page/AHT_policy"; 13732 13733 $('#aht_iframe').attr('src', targetUrl); 13734 $('#aht_overlay').css('display', 'flex'); 13735 }); 13736 13737 $('#aht_close').on('click', function() { 13738 closeAhtOverlay(); 13739 }); 13740 13741 $('#aht_overlay').on('click', function(e) { 13742 if (e.target === this) { 13743 closeAhtOverlay(); 13744 } 13745 }); 13746 13747 function closeAhtOverlay() { 13748 $('#aht_overlay').css('display', 'none'); 13749 $('#aht_iframe').attr('src', ''); 13750 } 13751}); 13752</script>
13752 13753
13753<script> 13754 $(function(){ 13755 //Language Selection 13756 var FFN = FFN || {}; 13757 FFN.footer_lang = (function($) { 13758 var $obj = { 13759 lang_content: $('.suspended ul') 13760 }, 13761 setLang = function(e) { 13762 var lang = $(this).data('lang') || 'english', 13763 newloc = self.location.href.replace(/[\?&](m|show_lang|lang)=(\w+|\d+)/gi, ''); 13764 13765 if (!lang) { 13766 return false; 13767 } 13768 13769 if (newloc.indexOf('#') > 0) { 13770 newloc = newloc.replace('#', '&lang=' + lang + '&show_lang=' + lang + '#').replace(/[\?&]/, '?'); 13771 // for registration, changing language sends people back to page 1, to make certain their browser has all the info when they reach the final registration page 13772 if (newloc.indexOf('#/regpage') > 0) { 13773 newloc = newloc.replace(/\#\/regpage.*/, ''); 13774 } 13775 } else { 13776 newloc = (newloc + '&lang=' + lang + '&show_lang=' + lang).replace(/[\?&]/, '?'); 13777 } 13778 13779 self.location.href = newloc + ""; 13780 }, 13781 init = function() { 13782 $obj.lang_content.on('click', 'div', setLang); 13783 }; 13784 13785 return { 13786 init: init 13787 }; 13788 13789 })(jQuery); 13790 13791 FFN.footer_lang.init(); 13792 }); 13793 </script>
13793 13794<!-- Affiliate Google Analytics --> 13795 13796 13797 13798 13799 13800 13801 13802 13803<noscript><img src="https://secureimage.securedataimages.com/images/common/glean.gif?rand=4492&site=bdsm&session=A9N9g%3C8N%60%60Ta+1790699450+181.215.65.66+&pwsid=&pagename=%2Funknown&pagestate=&country=United+States&city=&lang=english&level=&gpid=g1171407&pid=g1171407" width=1 height=1 border=0></noscript>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.