PageSourceSearch

https://bdsm.com/go/page/forgot_login.html?dcb=bdsm.com&who=r_8xdL…lKmwfg6cPug06c5EEif0-&trlid=bdsm_cover_pg-1

html bdsm.com collected 2026-09-29 16:30:51 UTC 608,695 bytes, 13,803 lines download raw bytes

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&amp;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&amp;lang=swedish" />
12<link rel="alternate" hreflang="es" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;lang=spanish" />
13<link rel="alternate" hreflang="fr" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;lang=french" />
14<link rel="alternate" hreflang="zh" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;lang=chinese" />
15<link rel="alternate" hreflang="ja" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;lang=japanese" />
16<link rel="alternate" hreflang="pt" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;lang=portuguese" />
17<link rel="alternate" hreflang="nl" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;lang=dutch" />
18<link rel="alternate" hreflang="de" href="https://alt.com/go/page/forgot_login.html?trlid=bdsm_cover_pg-1&amp;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>&nbsp;{{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}}&nbsp;(<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}}&nbsp;(<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}}:&nbsp;</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>&nbsp;(<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}}&nbsp;
2419        (<span id="viewers_count" class="tab_count">0</span>)&nbsp;
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}}:&nbsp;</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">&nbsp;</div>
2889            <div class="lightbox-wrapper modal">
2890                <div class="icon close white modal-cross">  &times;  </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}}">&times;</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(/&#39;/g, "'").replace(/&quot;/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,"&lt;").replace(/>/g,"&gt;"));
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,"&lt;").replace(/>/g,"&gt;");
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(/&quot;/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(/&#39;/g, "'").replace(/&quot;/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:    ":&gt;",            pattern:    /(^|\s|>)(:&gt;)($|\s|<)/g          },
6277                {name:  "straight",         seq:    ":-|",              pattern:    /(^|\s|>)(:-\|)($|\s|<)/g           },
6278                {name:  "evil",             seq:    "/:&gt;",           pattern:    /(^|\s|>)(\/:&gt;)($|\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&gt;",    pattern:    /(^|\s|>)(:dblquote&gt;)($|\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:    "&gt;:)",           pattern:    /(^|\s|>)(&gt;:\))($|\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:    ":-&amp;",          pattern:    /(^|\s|>)(:-&amp;)($|\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:    ":-&quot;",         pattern:    /(^|\s|>)(:-&quot;)($|\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:    "&gt;&gt;!",        pattern:    /(^|\s|>)(&gt;&gt;!)($|\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:                      "&lt;handle&gt; 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">&times;</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,"&amp;")
9667                 .replace(/</g,"&lt;")
9668                 .replace(/>/g,"&gt;")
9669                 .replace(/\'/g,"&#039;")
9670                 .replace(/\"/g,"&quot;")
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(/&amp;#/g, '&#');
10904    document.getElementById(d.id).innerHTML = document.getElementById(d.id).innerHTML.replace(/&amp;/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 &#34;Busy&#34;" class="off">On IM</span>
11635                        <span rel="tooltip-above" data-tooltip="To receive IMs, click to set to &#34;On IM&#34;." 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&rsquo;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('&#36;3.00') },
12868          {points_count:'50.0', points:500, option:2, price: decodeHtml('&#36;6.00') },
12869          {points_count:'100', points:1000, option:3, price: decodeHtml('&#36;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, "&lt;").replace(/>/g, "&gt;");
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, "&lt;").replace(/>/g, "&gt;");
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 &copy; 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&amp;who=r_8R1JdKA.RhxhBN6hk7ZMbhVjrdNymgs1jRnuEUHdgIs2FDOsXFkOYfAHHzKwbo5sDMOJIzR0MlS_VkzheeA0eiP_d1mOsQxR9UhXJfYZmQ7VPvFrKhmWlzsymSKyvf7M9wJExDsrGkyVMG1z5VhLAA--&amp;popup=1&amp;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;">&times;</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&#241;ol</span></div></li>                          <li><div lang="fr" hreflang="fr"  data-lang="french"><span>Fran&#231;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>&#26085;&#26412;&#35486;</span></div></li>                                                    <li><div lang="pt" hreflang="pt"  data-lang="portuguese"><span>Portugu&ecirc;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>&#32321;&#39636;&#20013;&#25991;</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.