// ==UserScript==
// @name chaturbatefilter
// @version 1.0
// @namespace chaturbate_filter
// @description chaturbate-filter
// @include http://chaturbate.com/*
// @include http://*.chaturbate.com/*
// @grant GM_xmlhttpRequest
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js
// @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js
/*
@require https://raw.github.com/jaysalvat/buzz/master/dist/buzz.min.js
*/
// ==/UserScript==
version = 1.0;
var pageType = 0;
var startTime = +new Date();
var mySound = new buzz.sound( "http://soundjax.com/reddo/21862%5Ebeep1.mp3");
$(function() {
$( "#dialog" ).dialog({
autoOpen: false,
autoResize: true,
height: 'auto',
width: 580,
show: {
effect: "blind",
duration: 100
},
hide: {
duration: 1000
},
position: {
my: 'left',
at: 'center',
of: $('#header')
},
buttons: {
"Close": function() {
$( this ).dialog( "close" );
},
"Clear All": function() {
var targetNodes = $( "#ExhibitionistCams" ).find(".details");
if (targetNodes && targetNodes.length > 0) {
targetNodes.each ( function () {
removeFromAlert(getName($(this)));
} );
}
$( this ).dialog( "close" );
}
},
open: function (event, ui) {
$('#dialog').css('overflow', 'hidden');
}
});
$( "#opener" ).click(function() {
$( "#dialog" ).dialog( "open" );
});
$( "#followeddialog" ).dialog({
autoOpen: false,
autoResize: true,
height: 'auto',
width: 580,
show: {
effect: "blind",
duration: 100
},
hide: {
duration: 1000
},
position: {
my: 'left',
at: 'center',
of: $('#header')
},
buttons: {
"Close": function() {
$( this ).dialog( "close" );
}
},
open: function (event, ui) {
$('#followeddialog').css('overflow', 'hidden');
}
});
$( "#followeddialogopener" ).click(function() {
var targetNodes = $( "#FollowedCams" ).find(".details");
if (targetNodes && targetNodes.length > 0) {
targetNodes.each ( function () {
$( "#FollowedCams" ).find('#'+getName($(this))).remove();
} );
}
$.get( '/followed-cams/', function( data ) {
var dataObj = $('<div/>').html(data);
dataObj.find(".details").each( function() {
var thisCam = createNewUserCam($(this));
if(shouldShowCam(thisCam) && thisCam.type != 3) {
$("#FollowedCams").append(thisCam.cam.parent());
}
});
}).fail(function() {
alert( "error" );
});
$( "#followeddialog" ).dialog( "open" );
});
$( "#report_popupdialog" ).dialog({
autoOpen: false,
autoResize: true,
height: 'auto',
width: 400,
show: {
effect: "blind",
duration: 100
},
hide: {
duration: 1000
},
position: {
my: 'left',
at: 'center',
of: $('#header')
},
buttons: {
"Close": function() {
$( this ).dialog( "close" );
}
},
open: function (event, ui) {
$('#report_popupdialog').css('overflow', 'hidden');
}
});
$( "#report_popupopener" ).click(function() {
logit("report_popupopener clicked");
$("#report_popup form").attr("action", "/abuse/report/lionrauuuhl/");
$( "#report_popupdialog" ).dialog( "open" );
});
});
function addCheckboxes() {
var sort, user_informationID = $("#user_information"), logo_zone = $(".logo-zone");
sort =
[
' <div id="user_information" style="float:right; font-size: 4pt" align="right" >',
' <div class="top" align="middle">',
' <label class="username"><strong><font color="#e45900">Sort</font><strong></label>',
' </div>',
' <div class="bottom" style="height:40px; padding:0px 4px 4px 0px;">',
' <table>',
' <tr height="2px">',
' <td><label id="showFemaleLabel"><input type="checkbox" name="showFemale" id="showFemale" checked />Show Females</label></td>',
' <td><label id="showCouplesLabel"><input type="checkbox" name="showCouples" id="showCouples" />Show Couples</label></td>',
' <td><label id="showOnlyOnlineLabel"><input type="checkbox" name="showOnlyOnline" id="showOnlyOnline" />Show Only Online</label></td>',
' <td><label id="showOnlyNewLabel"><input type="checkbox" name="showOnlyNew" id="showOnlyNew" />Show Only New</label></td>',
' <td><label id="showOnly1825Label"><input type="checkbox" name="showOnly1825" id="showOnly1825" />Show 18-25</label></td>',
' <!--td><button id="followeddialogopener">Followed Cams</button></td-->',
' </tr>',
' <tr height="2px">',
' <td><label id="showMaleLabel"><input type="checkbox" name="showMale" id="showMale" />Show Males</label></td>',
' <td><label id="showTranssexualLabel"><input type="checkbox" name="showTranssexual" id="showTranssexual" />Show Transsexual</label></td>',
' <td></td>',
' <td><label id="showOnlyExhibitionistLabel"><input type="checkbox" name="showOnlyExhibitionist" id="showOnlyExhibitionist" />Show Only Exhibitionist</label></td>',
' <td><label id="showOnly2635Label"><input type="checkbox" name="showOnly2635" id="showOnly2635" />Show 26-35</label></td>',
' <!--td><button id="report_popupopener">Report</button></td-->',
' </tr>',
' </table>',
' </div>',
'</div>',
'<div id="dialog" title="New Exhibitionist Cams" >',
' <div id="ExhibitionistCams" class="list" style="width: 100%; min-width: 0;"></div>',
'</div>',
'<div id="followeddialog" title="Followed Cams" >',
' <div id="FollowedCams" class="list"></div>',
'</div>',
'<div style="display:none" id="report_popupdialog" title="Report Abuse">',
' <form method="post" action="">',
' <div class="report_formborder">',
' <p class="report_select">Choose a category:',
' <select name="category" id="id_abuse_category_select">',
' <option value="">---</option>',
' <option value="recording">Recorded video</option>',
' <option value="underage">Broadcaster underage</option>',
' <option value="advertising">Broadcaster is advertising</option>',
' <option value="gender">Broadcaster is wrong gender</option>',
' <option value="other">Other</option>',
' </select></p>',
' <p class="report_comments">Additional Comments:<br />',
' <textarea id="id_additional_comments" name="additional_comments" draggable="false"></textarea>',
' </p>',
' <div class="button_abuse_report" style="width: auto;">',
' <a href="#" class="abuse_report_button" id="abuse_report_button" style="color:#FFF;">REPORT</a>',
' </div>',
' <div class="button_abuse_cancel">',
' <a href="#" class="abuse_cancel_button" id="abuse_cancel_button" style="color:#FFF;">CANCEL</a>',
' </div>',
' </div>',
' </form>',
'</div>',
'<div id="OtherPages"><h2>Cams From Other Pages</h2><div id="OtherPagesInside" class="list"></div></div>',
'<div id="BannedCams"><h2>Banned Cams</h2><div id="BannedCamsInside" class="list"></div></div>',
].join('\n');
if (typeof user_informationID.html() === "undefined") {
logo_zone.before(sort);
} else {
user_informationID.before(sort);
}
$('#OtherPages').hide();
$('#BannedCams').hide();
$('#showFemale').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showMale').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showCouples').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showTranssexual').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showOnly1825').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showOnlyOnline').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showOnly2635').click(function() {
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showOnlyNew').click(function() {
if($('#showOnlyNew').attr('checked')) {
$('#showOnlyExhibitionist').attr('checked', false);
}
saveCheckboxSettings();
refreshThePeopleList();
});
$('#showOnlyExhibitionist').click(function() {
if($('#showOnlyExhibitionist').attr('checked')) {
$('#showOnlyNew').attr('checked', false);
}
saveCheckboxSettings();
refreshThePeopleList();
});
restoreCheckboxSettings();
}
function showHideCheckboxes() {
if (pageType==7) {
toggleCheckbox($('#showOnlyExhibitionist'),$('#showOnlyExhibitionistLabel'),false);
toggleCheckbox($('#showOnlyNew'),$('#showOnlyNewLabel'),false);
} else {
toggleCheckbox($('#showOnlyExhibitionist'),$('#showOnlyExhibitionistLabel'),true);
toggleCheckbox($('#showOnlyNew'),$('#showOnlyNewLabel'),true);
}
if (pageType==2 || pageType==3 || pageType==4 || pageType==5) {
toggleCheckbox($('#showFemale'),$('#showFemaleLabel'),false);
toggleCheckbox($('#showMale'),$('#showMaleLabel'),false);
toggleCheckbox($('#showCouples'),$('#showCouplesLabel'),false);
toggleCheckbox($('#showTranssexual'),$('#showTranssexualLabel'),false);
} else {
toggleCheckbox($('#showFemale'),$('#showFemaleLabel'),true);
toggleCheckbox($('#showMale'),$('#showMaleLabel'),true);
toggleCheckbox($('#showCouples'),$('#showCouplesLabel'),true);
toggleCheckbox($('#showTranssexual'),$('#showTranssexualLabel'),true);
}
if(pageType==6) {
toggleCheckbox($('#showOnlyOnlineLabel'),$('#showOnlyOnline'),true);
} else {
toggleCheckbox($('#showOnlyOnlineLabel'),$('#showOnlyOnline'),false);
}
}
function getPageType() {
// 1= Performer Page
// 2= Female Page
// 3= Male Page
// 4= Couple Page
// 5= Transsexual Page
// 6= Followed Page
// 7= Exhibitionist Page
// 0= other
var result = 0, activeTab = $(".active");
if(activeTab.html()!=null) {
if (activeTab.html().indexOf('s Cam') != -1) {
result = 1;
} else if (activeTab.html().indexOf('<a href="/female-cams/">FEMALE</a>') != -1) {
result = 2;
} else if (activeTab.html().indexOf('<a href="/male-cams/">MALE</a>') != -1) {
result = 3;
} else if (activeTab.html().indexOf('<a href="/couple-cams/">COUPLE</a>') != -1) {
result = 4;
} else if (activeTab.html().indexOf('<a href="/transsexual-cams/">TRANSSEXUAL</a>') != -1) {
result = 5;
} else if (activeTab.html().indexOf('<a href="/followed-cams/" class="followed">') != -1) {
result = 6;
} else {
$(".endless_page_template").each(function () {
if ($(this).find(":nth-child(1)").html().indexOf('<h2>Exhibitionist Cams</h2>') != -1) {
result = 7;
}
});
}
}
return result;
}
function isBetween18And25(age) {
var ageValues = ["18","19", "20", "21", "22", "23", "24", "25", "99" ];
return ageValues.indexOf(age) > -1;
}
function isBetween26And35(age) {
var ageValues = ["26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "99" ];
return ageValues.indexOf(age) > -1;
}
function saveCheckboxSettings() {
var checkboxSettings = $(':checkbox').map(function () {return this.checked;}).get().join();
createCookie('checkboxSettings',checkboxSettings);
}
function restoreCheckboxSettings() {
var checkboxSettings = readCookie('checkboxSettings');
if(checkboxSettings) {
$(checkboxSettings.split(',')).each(function (i) {
$(':checkbox:eq(' + i + ')').attr('checked', (this.toString() === 'true'));
});
}
}
function getAge(jNode) {
var age = "99";
if(jNode.find('.age')) {
age = jNode.find('.age').text();
}
return age;
}
function getName(jNode) {
var name = "";
if(jNode.find('.title')) {
name = jNode.find('.title').find('a').text();
}
return name;
}
function getGender(jNode) {
// 0=error
// 1=male
// 2=female
// 3=couple
// 4=Transsexual
var result = 0, span = jNode.find('.title span');
if (span && span.hasClass('genderm')) {
result = 1;
} else if (span && span.hasClass('genderf')) {
result = 2;
} else if (span && span.hasClass('genderc')) {
result = 3;
} else if (span && span.hasClass('genders')) {
result = 4;
}
return result;
}
function getType(jNode) {
// 0=other
// 1=new
// 2=EXHIBITIONIST
// 3=OFFLINE
// 4=
var result = 0;
if (jNode.parent().html().indexOf('<div class="thumbnail_label thumbnail_label_c_new">NEW</div>') != -1) {
result = 1;
} else if (jNode.parent().html().indexOf('<div class="thumbnail_label thumbnail_label_exhibitionist">EXHIBITIONIST</div>') != -1) {
result = 2;
} else if (jNode.parent().html().indexOf('<div class="thumbnail_label thumbnail_label_offline">OFFLINE</div>') != -1) {
result = 3;
}
return result;
}
function userCam(cam,name,gender,age,type,hidden) {
cam.parent().attr('id',name);
var that= this;
this.cam=cam;
this.name=name;
this.gender=gender;
this.age=age;
this.type=type;
this.hidden=hidden;
this.getGenderString=function() {
var result = "Unknown";
if (that.gender==1) {
result = "Male";
} else if (that.gender==2) {
result = "Female";
} else if (that.gender==3) {
result = "Couple";
} else if (that.gender==4) {
result = "Transsexual";
}
return result;
};
this.href=cam.find('.title a').attr('href');
this.hide=function() {
cam.parent().hide();
hidden=true;
};
this.show=function() {
cam.parent().show();
hidden=false;
};
this.getCamClone=function() {
return cam.parent().clone();
};
var report = '<li id="reportButton"><button id="report_popupopener">Report</button></li>';
//if(this.cam.find('.sub-info #reportButton').length==0)
//this.cam.find('.sub-info .cams').after(report);
}
function createNewUserCam(jNode) {
return new userCam(jNode,getName(jNode),getGender(jNode),getAge(jNode),getType(jNode),false);
}
function preProcessCam(jNode) {
return createNewUserCam(jNode);
}
function shouldShowCam(userCam) {
var result = true;
if (pageType!=2 && pageType!=3 && pageType!=4 && pageType!=5) {
if (userCam.gender==1) {
if(!isChecked($('#showMale'))) {
result = false;
}
} else if (userCam.gender==2) {
if(!isChecked($('#showFemale'))) {
result = false;
}
} else if (userCam.gender==3) {
if(!isChecked($('#showCouples'))) {
result = false;
}
} else if (userCam.gender==4) {
if(!isChecked($('#showTranssexual'))) {
result = false;
}
}
}
if((isChecked($('#showOnlyNew')) && pageType!=7 && userCam.type!=1) || (isChecked($('#showOnlyExhibitionist')) && pageType!=7 && userCam.type!=2)) {
result = false;
}
if (isChecked($('#showOnly1825')) && !isBetween18And25(userCam.age) && !(isChecked($('#showOnly2635')) && !isBetween26And35(userCam.age))) {
result = false;
}
if (isChecked($('#showOnly2635')) && !isBetween26And35(userCam.age) && !(isChecked($('#showOnly1825')) && !isBetween18And25(userCam.age))) {
result = false;
}
if (isChecked($('#showOnlyOnline')) && pageType==7 && userCam.type==3) {
result = false;
}
return result;
}
function processCam(userCam) {
if (pageType!=7) {
addTokensRemaining(userCam.cam);
}
if(shouldShowCam(userCam)) {
userCam.show();
} else {
userCam.hide();
}
}
function processCams(cams) {
$.each(cams, function (index,userCam) {
processCam(userCam);
});
}
var firstTimeThru=true;
function processExhibitionist(userCam, refreshThePeopleListIgnoreUserList) {
if (pageType==7) {
if(refreshThePeopleListIgnoreUserList!==null && !arrayContains(userCam.name, refreshThePeopleListIgnoreUserList.split(',')) && shouldShowCam(userCam)) {
refreshThePeopleListIgnoreUserList = addUserToIgnoreUserList(userCam.name, refreshThePeopleListIgnoreUserList);
var camOnMainPage = false;
$('.list').not("#OtherPagesInside, #BannedCamsInside, #ExhibitionistCams").children("div[id] :visible").each( function() {
//logit(userCam.name);
if($(this).attr('id') == userCam.name) {
camOnMainPage = true;
}
});
if (!firstTimeThru && !camOnMainPage && $("#ExhibitionistCams").find("#"+userCam.name).length == 0 && $("#FollowedCams").find("#"+userCam.name).length == 0) {
var cloneOfCamParent = userCam.getCamClone();
addAlertButtons(cloneOfCamParent, userCam.name);
$("#ExhibitionistCams" ).append(cloneOfCamParent);
var targetNodes = $( "#ExhibitionistCams" ).find(".details");
if (targetNodes && targetNodes.length > 9) {
$('#dialog').dialog('option','width',782);
} else {
$('#dialog').dialog('option','width',580);
}
$("#dialog" ).dialog( "open" );
mySound.play();
setImageRefresh(cloneOfCamParent, userCam.name);
}
}
}
}
var refreshThePeopleListRunning = false;
var newUserArray = [];
var currentUserArray = [];
var refreshThePeopleListIgnoreUserList;
function refreshThePeopleList() {
refreshThePeopleListRunning = true;
refreshThePeopleListIgnoreUserList = getUserToIgnoreUserList();
var targetNodes = $(".details");
//$('.list').not("#OtherPagesInside, #BannedCamsInside, #ExhibitionistCams").children(":visible").each( function() {
//});
if (targetNodes && targetNodes.length > 0) {
targetNodes.each ( function () {
var userCam = actionFunction($(this), refreshThePeopleListIgnoreUserList);
newUserArray.push(userCam.name);
});
}
currentUserArray.every(removeRefreshImages);
currentUserArray = newUserArray;
if(newUserArray.length > 0) {
firstTimeThru=false;
}
//might not want to do this
newUserArray = [];
refreshThePeopleListRunning = false;
}
function actionFunction(jNode, refreshThePeopleListIgnoreUserList) {
var userCam = preProcessCam(jNode);
processCam(userCam);
processExhibitionist(userCam, refreshThePeopleListIgnoreUserList);
return userCam;
}
var intervalMap = new Object();
function setImageRefresh(cloneOfCamParent, name) {
var image = cloneOfCamParent.find('img');
//logit("setImageRefresh for: "+ name);
var thisInterval = setInterval(function (name) {
//logit("Refreshing image for: "+ name);
image[0].src=image[0].src.replace(/\?.*/,function () {
return '?'+new Date();
});
}, 60000);
intervalMap[name] = thisInterval;
}
function removeFromAlert(name) {
$( "#ExhibitionistCams" ).find('#'+name).remove();
if ($( "#ExhibitionistCams" ).html() == '') {
$( "#dialog" ).dialog( "close" );
}
}
function addAlertButtons(jNode, name) {
jNode.find('.cams').after('<input type="button" id="clearButton_'+name+'" value="Clear" >');
jNode.find('#clearButton_'+name).button().click(function(){ removeFromAlert(name);});
jNode.find('#clearButton_'+name).after('<input type="button" id="removeButton_'+name+'" value="Hide Room Forever" >');
jNode.find('#removeButton_'+name).button().click(function(){ if(window.confirm("Are you sure you want to remove this room from showing on chaturbate forever?")) {alert("Removed");}});
}
var removeRefreshImages = function(x) {
var found = false;
for (var i = 0; i < newUserArray.length; i++) {
if(x==newUserArray[i]) {
found = true;
}
}
if(!found && x in intervalMap) {
clearInterval(intervalMap[x]);
delete intervalMap[x];
}
};
function getTokensRemaining(jNode) {
var tokensRemaining = "", subjectElementHTML = jNode.find('.subject').html(),startpos,length;
if(subjectElementHTML && subjectElementHTML.lastIndexOf("[") != -1 && subjectElementHTML.lastIndexOf(" tokens remaining]")!=-1) {
startpos = subjectElementHTML.lastIndexOf("[")+1;
length = subjectElementHTML.lastIndexOf(" tokens remaining]")-startpos;
tokensRemaining = subjectElementHTML.substr(startpos,length);
}
return tokensRemaining.trim();
}
function addTokensRemaining(jNode) {
var tokensRemaining = getTokensRemaining(jNode);
if(jNode.find('#tokensRemaining')) {
jNode.find('#tokensRemaining').remove();
}
if(tokensRemaining=="") {
tokensRemaining="--";
}
jNode.find('.cams').after('<li id="tokensRemaining">Tokens Remaining: ['+tokensRemaining+']</li>');
}
function addUserToIgnoreUserList(userName, ignoreUserList) {
if (!arrayContains(userName, ignoreUserList.split(','))) {
if (ignoreUserList && ignoreUserList.split(',').length > 0) {
ignoreUserList = ignoreUserList+',';
}
ignoreUserList = ignoreUserList + userName;
createCookie('ignoreUserList',ignoreUserList);
}
return ignoreUserList;
}
function getUserToIgnoreUserList() {
var ignoreUserList = readCookie('ignoreUserList');
if(!ignoreUserList) {
ignoreUserList = '';
}
return ignoreUserList;
}
function createCookie(name,value,days) {
var date = new Date(), expires="";
if (days) {
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
var c, i, nameEQ = name + "=", ca = document.cookie.split(';');
for(i=0;i < ca.length;i++) {
c = ca[i];
while (c.charAt(0)==' ') {
c = c.substring(1,c.length);
}
if (c.indexOf(nameEQ) == 0) {
return c.substring(nameEQ.length,c.length);
}
}
return null;
}
function eraseCookie(name) {
createCookie(name,"",-1);
}
function addGlobalStyle(css) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
function addStyle(style) {
var head = document.getElementsByTagName("HEAD")[0], ele = head.appendChild(window.document.createElement( 'style' ));
ele.innerHTML = style;
return ele;
}
function arrayContains(obj, a) {
var i;
for (i = 0; i < a.length; i++) {
if (a[i] === obj) {
return true;
}
}
return false;
}
function showCheckbox(checkbox, checkboxlabel) {
checkbox.show();
checkboxlabel.show();
}
function hideCheckbox(checkbox, checkboxlabel) {
checkbox.hide();
checkboxlabel.hide();
}
function checkCheckbox(checkbox,checked) {
if(checked != null) {
checkbox.attr('checked', checked);
}
}
function toggleCheckbox(checkbox, checkboxlabel, show, checked) {
if(show) {
showCheckbox(checkbox,checkboxlabel);
} else {
hideCheckbox(checkbox,checkboxlabel);
}
checkCheckbox(checkbox,checked);
}
function isChecked(checkbox) {
return checkbox.attr('checked');
}
function loadOtherPagesDiv() {
if (typeof $("#OtherPages2").html() === "undefined") {
var otherPages = $('#OtherPages').clone();
otherPages.attr('id','OtherPages2');
//logit("Showing OtherPages2");
otherPages.show();
var bannedCams = $('#BannedCams').clone();
bannedCams.attr('id','BannedCams2');
//logit("Showing BannedCams2");
bannedCams.show();
// Removes cams that are on this page from otherpagesinside
$.get( window.location.pathname, function( data ) {
$('.list').not("#OtherPagesInside, #BannedCamsInside, #ExhibitionistCams").children(":visible").each( function() {
var thisCamPage = $(this).find('.title a').attr('href');
var thisCamName = thisCamPage.substring(1, thisCamPage.length-1);
if($("#OtherPagesInside").find("#"+thisCamName).length > 0) {
$("#OtherPagesInside").find("#"+thisCamName).remove();
}
});
}).fail(function() {
logit("loadOtherPagesDiv error: " + nextPagelink);
});
$(".content").find('.list').after(otherPages);
$("#OtherPages2").after(bannedCams);
}
}
function loadPage(url){
$.get( url, function( data ) {
var dataObj = $('<div/>').html(data);
getCamsFromOtherPages(dataObj);
}).fail(function() {
alert( "error" );
});
}
var getCamsFromOtherPagesRunning = false;
function getCamsFromOtherPages() {
getCamsOnPage($("html"));
loadOtherPagesDiv();
}
function getCamsOnPage(data) {
getCamsFromOtherPagesRunning = true;
var nextPagelink = getNextPageLink(data);
if (nextPagelink != null) {
$.get( nextPagelink, function( data ) {
var dataObj = $('<div/>').html(data);
dataObj.find(".details").each( function() {
var thisCam = createNewUserCam($(this));
if(shouldShowCam(thisCam)) {
if ( $("#OtherPagesInside").find("#"+thisCam.name).length == 0) {
$("#OtherPagesInside").append(thisCam.cam.parent());
loadOtherPagesDiv();
} else if ( $("#OtherPagesInside").find("#"+thisCam.name).length == 1) {
var oldCam = $("#OtherPagesInside").find("#"+thisCam.name);
}
}
});
getCamsOnPage(dataObj);
}).fail(function() {
logit("getCamsOnPage error: " + nextPagelink);
});
}
getCamsFromOtherPagesRunning = false;
}
//http://chaturbate.com/followed-cams/
//<a href="/followed-cams/" class="followed">FOLLOWED(7/490)</a>
function getFavoritePage(data) {
if($('#followed')) {
getFavoritePage("/followed-cams/");
}
}
function getFavoritePage(nextPagelink) {
if (nextPagelink != null) {
$.get( nextPagelink, function( data ) {
var dataObj = $('<div/>').html(data);
dataObj.find(".details").each( function() {
$("#FavoritePagesInside").append($(this).parent());
});
getFavoritePage(dataObj);
}).fail(function() {
logit("getFavoritePage error: " + nextPagelink);
});
}
}
function checkedCam(cam, camPage, lastChecked, status) {
this.cam = cam;
this.camPage = camPage;
this.lastChecked = lastChecked;
this.status = status;
}
var checkedCams = {};
var pauseOtherCams = false;
function checkOtherCamsOnline() {
//logit("\n\n(checkOtherCamsOnline) start");
pauseOtherCams = true;
$("#OtherPagesInside").find('.details').each( function() {
var thisCamPage = $(this).find('.title a').attr('href');
var thisCamName = thisCamPage.substring(1, thisCamPage.length-1);
var thisCam = $("#OtherPagesInside " + "#"+thisCamName);//.find("#"+thisCamName);
//if($(this).find('.thumbnail_label').text() != 'BANNED') {
if(thisCam.find('.thumbnail_label').text() != 'BANNED') {
$.get( thisCamPage, function( data ) {
var status = "Online";
if (data.indexOf("offline_tipping") >= 0) {
status = "Offline";
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('OFFLINE!');
thisCam.remove();
//logit("(checkOtherCamsOnline) removing: "+thisCamName);
} else if(data.indexOf("This room has been banned.") >= 0) {
status = "Banned";
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('BANNED');
if ( $("#BannedCamsInside").find("#"+thisCamName).length == 0) {
logit("** Moving Other Page Cam "+thisCamName+"to Banned Cams\n");
thisCam.appendTo("#BannedCamsInside");
} else {
logit("Already in Banned Section, Removing Other Page Cam "+thisCamName + "\n");
thisCam.remove();
}
} else if(data.indexOf("Access Denied. This room is not available to your region or gender.") >= 0) {
status = "Blocked";
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('BLOCKED');
} else if(data.indexOf("This room requires a password.") >= 0) {
status = "Password";
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('PASSWORD');
}
if(!(thisCamName in checkedCams)) {
var thisCheckedCam = new checkedCam($(this), thisCamPage, new Date(), status);
checkedCams[thisCamName] = thisCheckedCam;
//logit("Other Pages Cam added: "+ thisCamName);
} else {
var newDate = new Date();
var seconds = (newDate - checkedCams[thisCamName].lastChecked) / 1000;
checkedCams[thisCamName].lastChecked = newDate;
//logit("Other Pages Cam found: "+ thisCamName+", last checked " + seconds +" ago");
}
});
} else {
if ( $("#BannedCamsInside").find("#"+thisCamName).length == 0) {
logit("** Moving Other Page Cam "+thisCamName+"to Banned Cams\n");
thisCam.appendTo("#BannedCamsInside");
} else {
logit("(checkOtherCamsOnline) Already in BannedCamsInside removing: "+thisCamName);
thisCam.remove();
}
}
});
$("#ExhibitionistCams").find('.details').each( function() {
var thisCamPage = $(this).find('.title a').attr('href');
var thisCamName = thisCamPage.substring(1, thisCamPage.length-1);
var thisCam = $("#ExhibitionistCams " + "#"+thisCamName);//.find("#"+thisCamName);
if(thisCam.find('.thumbnail_label').text() != 'BANNED') {
$.get( thisCamPage, function( data ) {
var status = "Online";
if (data.indexOf("offline_tipping") >= 0) {
//logit("(checkOtherCamsOnline) marking as offline in ExhibitionistCams: "+thisCamName);
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('OFFLINE!');
status = "Offline";
} else if(data.indexOf("This room has been banned.") >= 0) {
logit("(checkOtherCamsOnline) marking as banned in ExhibitionistCams: "+thisCamName);
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('BANNED');
status = "Banned";
} else if($("#OtherPagesInside").find("#"+thisCamName).length > 0) {
var otherPagesInsideClass = $("#OtherPagesInside").find("#"+thisCamName).find('.thumbnail_label').attr('class');
var otherPagesInsideThumbnail = $("#OtherPagesInside").find("#"+thisCamName).find('.thumbnail_label').text();
//logit("\nthisCamName - Class: "+otherPagesInsideClass+" Thumbnail: "+otherPagesInsideThumbnail+"\n");
thisCam.find('.thumbnail_label').attr('class', otherPagesInsideClass);
thisCam.find('.thumbnail_label').text(otherPagesInsideThumbnail);
} else if(data.indexOf("Access Denied. This room is not available to your region or gender.") >= 0) {
status = "Blocked";
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('BLOCKED');
} else if(data.indexOf("This room requires a password.") >= 0) {
status = "Password";
thisCam.find('.thumbnail_label').attr('class', 'thumbnail_label thumbnail_label_offline');
thisCam.find('.thumbnail_label').text('PASSWORD');
}
if(!(thisCamName in checkedCams)) {
var thisCheckedCam = new checkedCam($(this), thisCamPage, new Date(), status);
checkedCams[thisCamName] = thisCheckedCam;
//logit("Exhibitionist Cam added: "+ thisCamName);
} else {
var newDate = new Date();
var seconds = (newDate - checkedCams[thisCamName].lastChecked) / 1000;
checkedCams[thisCamName].lastChecked = newDate;
//logit("Exhibitionist Cam found: "+ thisCamName+", last checked " + seconds +" ago");
}
});
} else {
if ( $("#BannedCamsInside").find("#"+thisCamName).length == 0) {
logit("*** Copying Exhibitionist Cam "+thisCamName+" to Banned Cams\n");
var thisCamClone = thisCam.clone();
thisCamClone.find("#clearButton_"+thisCamName).remove();
thisCamClone.find("#removeButton_"+thisCamName).remove();
thisCamClone.appendTo("#BannedCamsInside");
} else {
logit("(checkOtherCamsOnline) Already in BannedCamsInside: "+thisCamName);
}
}
});
var ids = {};
$("#BannedCamsInside").children().each( function() {
logit($(this).attr('id'));
var id = $(this).attr('id');
clearInterval(id);
//was this id previously seen?
if ( ids.hasOwnProperty(id) ) {
$( "#"+id ).remove();
}
//a brand new id was discovered!
else {
ids[ id ] = true;
}
});
pauseOtherCams = false;
}
function logit(text) {
console.log(text);
}
function getNextPageLink(data) {
if(data == null) {
return null;
}
var paging = data.find('.paging'), nextLink = null;
paging.find('link').each(function() {
var rel = $(this).attr('rel');
if(rel=="next") {
nextLink = $(this).attr('href');
}
});
return nextLink;
}
$(document).ready(function () {
$(".advanced_search_button").live("click", function () {
$(".advanced_search_button").toggle();
$("a.hide_advanced_search_button").toggle();
$("div.advanced_search_options").slideDown();
return false;
});
$(".hide_advanced_search_button").live("click", function () {
$(".advanced_search_button").toggle();
$("a.hide_advanced_search_button").toggle();
$("div.advanced_search_options").slideUp();
return false;
});
$("#filter_location_form input[type='checkbox']").click(function () {
$(".searching-note").show();
$.ajax({
type: 'POST',
url: $("#filter_location_form").attr("action"),
data: $("#filter_location_form").serialize(),
success: function (data) {
$(".endless_page_template").load(window.location.href);
$(".searching-note").hide();
}
});
return true;
});
$("#filter_options_form").click(function () {
$(".searching-note").show();
$.ajax({
type: 'POST',
url: $("#filter_options_form").attr("action"),
data: $("#filter_options_form").serialize(),
success: function (data) {
$(".endless_page_template").load(window.location.href);
$(".searching-note").hide();
}
});
return true;
});
$("#filter_search_form input[type='submit']").click(function () {
var skey = $("#id_keywords").val();
var search_message = interpolate(gettext("Searching for %(skey)s ..."), {skey: skey}, true);
$(".searching-keyword h1").text(search_message);
$(".searching-keyword").show();
$(".endless_page_template").load($("#filter_search_form").attr("action") + '?' + $("#filter_search_form").serialize());
return false;
});
$('.list').parent().bind("DOMNodeInserted",function(){
if(!getCamsFromOtherPagesRunning && !refreshThePeopleListRunning && pageType==7) {
getCamsFromOtherPages();
refreshThePeopleList();
} else if(!refreshThePeopleListRunning){
refreshThePeopleList();
logit("refreshThePeopleListRunning not running");
}
});
//$('.list').parent().bind("DOMNodeRemoved",function(){
//console.log('DOMNodeRemoved');
//});
});
function do_script() {
pageType = getPageType();
if (pageType!=1) {
addGlobalStyle('.ui-widget-header-custom {background-color: #3D9700;color:White;font-weight:bold;}');
addStyle('@import "http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css";');
addGlobalStyle('.ui-dialog .ui-dialog-buttonpane { text-align: center; }');
addGlobalStyle('.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: none; }');
if (pageType == 7) {
createCookie('ignoreUserList','');
}
//eraseCookie('ignoreUserList');
addCheckboxes();
if (pageType==7) {
getCamsFromOtherPages();
}
refreshThePeopleList();
showHideCheckboxes();
setInterval(checkOtherCamsOnline, 30000);
}
if (pageType==7) {
reload_rooms.delay = 10000;
setTimeout(reload_rooms.on_timeout,15000);
} else {
reload_rooms.delay = 90000;
}
}
do_script();
//.user.js