OnlineTVRecorder Banner Helper

By marrr Last update Oct 2, 2009 — Installed 379 times. Daily Installs: 2, 4, 1, 2, 2, 0, 4, 3, 2, 3, 4, 2, 3, 1, 1, 2, 0, 1, 1, 2, 3, 0, 0, 1, 3, 5, 7, 2, 3, 0, 6
// ==UserScript==
// @name           OnlineTVRecorder Banner Helper
// @namespace      http://userscripts.org/users/42191
// @description    Automatically clicks banners on the OnlineTVRecorder BuyClicks Page for GWPs.
// @include        http://www.onlinetvrecorder.com/buyclicks/weasel.php*
// @include        http://www.onlinetvrecorder.com/buyclicks/bcbf.php*
// @version        01.09.2009
// ==/UserScript==

var overrideURL   = "http://localhost/";
var mainFrameName = "mainFrame";

var xpBannerLinks   = "//div[@id='content']/table[1]/tbody/tr[@onmouseout='hideAllDetails();']/td[1]/div[1]/@onclick";
var xpNoMoreBanners = "//div[@id='warning' and contains(text(),' 0 Banner')]";
var xpMainFrame     = "//frame[@id='" + mainFrameName + "']";

var reWeasel = /weasel\.php/;
var reBCBF   = /bcbf\.php/;

var currentBannerNumber = 0;
var bannerLinks;

function grep(xpath)
{
	return document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
}

function runScriptInPageContext(code)
{
	var script = document.createElement("script");
	script.type = "application/javascript";
	script.innerHTML = "(" + code + ")();";

	document.body.appendChild(script);
}

function isNoMoreBanners()
{
	var div = grep(xpNoMoreBanners);
	return div.snapshotLength > 0;
}

function openNextBanner()
{
	if(currentBannerNumber >= bannerLinks.snapshotLength) return;
	if(isNoMoreBanners()) return;

	var nextBannerLink = bannerLinks.snapshotItem(currentBannerNumber).value;
	currentBannerNumber++;

	GM_log("opening banner " + nextBannerLink);
	runScriptInPageContext(nextBannerLink);
}

function redirectMainFrame()
{
	// set it, not matter what. FF doesn't comprehend otherwise.
	var frame = grep(xpMainFrame).snapshotItem(0);
	frame.wrappedJSObject.src = overrideURL;
}

function installOpenBannerInterval()
{
	// open the next banner after some time
	window.wrappedJSObject.setInterval(openNextBanner, 3000 + Math.random() * 5000);
}

if(location.href.match(reWeasel)) {
	// grep the banners
	bannerLinks = grep(xpBannerLinks);

	installOpenBannerInterval();
}

if(location.href.match(reBCBF)) {
	// close the window on leaving the page
	window.addEventListener("unload", function(event) { window.close(); }, false);

	// override top layers page request (hacky, but who cares)
	window.wrappedJSObject.setInterval(redirectMainFrame, 1000);
}