// Opera UserJS - Countdown script for forumwarz.com // This will place the countdown timer into the title // Author: TT // v1.4.1 //set these variables for the 'options' var useShort=true; //set to false if you prefer long string as title var useExShort=false; //only uses biggest value (e.g. only days). trumps useShort. var spacer=''; //default is a 'nothing' for the spacer. use ' ' for a space var useZeros=false; //show 0 days/hours/minutes as '0' instead of excluding them var trackIncit=true; var trackDomination=true; var trackAuctions=true; var trackVisits=true; //track time until visits reload (also deliveries) on /character/me var trackItemBuildr=true; var trackForumBuildr=true; var allowEnd=true; //stop the timer (don't loop past 0) and exit for FB,IB,Me. auctions always end. var debug=false; //use with javascript:dbg() in address bar to find problems var debugVerbose=false; //use with caution. can eat memory with lots of text // !!! DO NOT EDIT BELOW THIS UNLESS YOU KNOW WHAT YOU ARE DOING !!! var orgTitle = document.title; var URL = document.location.href; var isDom = URL.indexOf('forumwarz.com/domination') != -1; var isIncit = URL.indexOf('forumwarz.com/incit') != -1; var isAuc = URL.indexOf('forumwarz.com/auctions') != -1; var isCharMe = URL.indexOf('forumwarz.com/characters/me') != -1; var isIB = URL.indexOf('forumwarz.com/item_buildr') != -1; var isFB = URL.indexOf('forumwarz.com/forum_buildr') != -1; var fCD; var type = ['day','hour','minute','second']; if (debug) document.title = 'Script loaded...'; if (debug) var debugStr = 'Debug started.'; else var debugStr = 'Enable debugging, jackass'; if ( (isDom && trackDomination) || (isIncit && trackIncit) || (isAuc && trackAuctions) || (isCharMe && trackVisits) || (isIB && trackItemBuildr) || (isFB && trackForumBuildr) ){ debugAdd('Page trackable. Loading CD check.',false); checkForCountdown(); } function checkForCountdown(){ if (document.getElementById('countdown') != null){ debugAdd('Found CD element. Entering main',false); main(); //countdown element is not empty. enter main } else if (checkFinished()) { finished(); return; } else { debugAdd('Element not ready. Looping...',true); setTimeout('checkForCountdown()', 1000); //else loop } } //our main function that calls itself (loop) function main() { if (document.getElementById('countdown') == null){ if (isAuc){ //only auctions lose their element debugAdd('Auction closed. Exiting.',false); finished(); return; //just leave. don't loop } debugAdd('Element disappeared... Loop til found.',true); document.title=orgTitle; setTimeout('main()',1000); //keep retrying in a new thread return; //exit this thread } else if (document.getElementById('countdown').childNodes.length == 0) { debugAdd('No children. Having secks again...',true); setTimeout('main()',1000); //keep retrying in a new thread return; //exit this thread } debugAdd('Entered main successfully.',true); fCD = document.getElementById('countdown').firstChild.nodeValue; //full countdown debugAdd('Set fCD.',true); var newTitle = ''; //start out new title variable as empty if (isIncit){ //INCIT specific code for voting page notify! if (fCD.indexOf('ends') != -1) newTitle = 'VOTING!' + spacer; } var hasFinished = false; var t = getCdTextSplit(); if ( (t[0]==0&&t[1]==0&&t[2]==0&&t[3]==1) ) hasFinished = true; if ( (isAuc && hasFinished) || (isFB && hasFinished && allowEnd) || (isIB && hasFinished && allowEnd) || (isDom && hasFinished && allowEnd) || (isCharMe && hasFinished && allowEnd) ){ finished(); //post our ending title return; //leave without looping } if (useShort || useExShort || useZeros){ debugAdd('Running getCdTextSplit.',true); var cdTextSplit = getCdTextSplit(); for (i=0;i 0 || useZeros) && (cdTextSplit[i] > 0 || !useExShort) || (i==3 && cdTextSplit[3] == 0 && newTitle != '') ){ //add 0 seconds to non-empty title newTitle += cdTextSplit[i] + type[i].substr(0,1) + spacer; } if (cdTextSplit[i] > 0 && useExShort) break; //break loop after first non-zero } } else { debugAdd('Fallback. Failed to get times.',true); newTitle=fCD; //no match. use full countdown string } if (isIncit && trackIncit){ //INCIT specific code debugAdd('INCIT Shit...',true); var submissions = document.getElementById('submissions_received'); if (submissions!=undefined){ //for when it's not loaded yet submissions = submissions.innerHTML.split(' ',1); //first chars (number) if (submissions[0] > 0){ newTitle += submissions[0] + 'sub' + spacer; //append number + 'sub' to new title } debugAdd('Finished sub add code.',true); } var links = document.getElementsByTagName('a'); //grab all links var ass = '0'; //initialize 'ass' for(i=0;i<60;i++){ //should be the 47th link, but we will search this range if links change if (links[i].text.indexOf('Assholes Online') != -1){ //find 'Assholes Online' link text ass = links[i].text.split(' ',1); //grab first chars (number) newTitle += spacer + ass[0] + 'ass' + spacer; //append number + 'ass' to new title break; //exit loop. we only need one match. I got two for some reason... } } debugAdd('Finished ass add code.',true); } if (!newTitle) newTitle = '...'; //Opera defaults to URL if the title is empty... big nono there. document.title=newTitle; //finally, set the new title debugAdd('Title set. Looping...',true); setTimeout('main()', 1000); //loop main with delay } function getCdTextSplit(){ var offset; var cdTextSplit = new Array(4); for (i=0;i