Created
December 30, 2011 17:17
-
-
Save heathdutton/1540656 to your computer and use it in GitHub Desktop.
the offending script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function (window, document) { | |
var doc = document; | |
document._write = document.write; | |
var _tcproto = (window.location.protocol == "https:") ? "https" : "http"; | |
var _tchost = _tcproto + "://tc.convertro.com/tagroot"; | |
var _log_request = 0; | |
if (getQueryParam("tclogging") == 1) { | |
_log_request = 1 | |
} | |
var _args = {}; | |
var _tcid; | |
var _tcparams = ""; | |
var _tcdebug = 1; | |
window.set_tc_vars = function (key, param) { | |
_tcparams += "&" + escape(key) + "=" + escape(param) | |
}; | |
function clog(u) { | |
if (_tcdebug && typeof (console) != "undefined" && typeof (console.log) != "undefined") { | |
console.log(u) | |
} | |
} | |
var target = []; | |
function evalInner(script) { | |
if ((!target.length || target[target.length - 1] !== script) && script.docwriteTarget && script.docwriteTarget.inner && script.docwriteTarget.inner.length) { | |
var text = script.docwriteTarget.inner; | |
var i1 = text.indexOf("<script"); | |
if (-1 !== i1) { | |
var i2 = text.indexOf("<\/script>", i1) + 9; | |
if (-1 != i2) { | |
var textBefore = text.substring(0, i1); | |
var textScript = text.substring(i1, i2); | |
var textAfter = text.substring(i2 + 1); | |
script.docwriteTarget.inner = textBefore + textAfter; | |
docwriteScript(textScript, script) | |
} | |
} | |
} | |
} | |
function docwriteScript(textScript, before) { | |
var aMatches = textScript.match(/src='([^']*)/i) || textScript.match(/src="([^"]*)/i) || textScript.match(/src=([^ >]*)/i); | |
if (aMatches) { | |
var url = aMatches[1]; | |
cvo_head.js(url, undefined, function () { | |
newDocWrite("", 1) | |
}) | |
} else { | |
aMatches = textScript.match(/>(.*)</); | |
if (aMatches) { | |
eval(aMatches[1]) | |
} | |
} | |
} | |
var newDocWrite = function (text, force) { | |
if (document.readyState == "loading") { | |
return document._write(text) | |
} | |
var scripts = document.getElementsByTagName("script"); | |
var script = target.length ? target[target.length - 1] : scripts[scripts.length - 1]; | |
if (script.docwriteTarget && script.docwriteTarget.timer) { | |
clearTimeout(script.docwriteTarget.timer) | |
} | |
if (!script.docwriteTarget) { | |
script.docwriteTarget = document.createElement("div"); | |
script.docwriteTarget.inner = ""; | |
script.parentNode.insertBefore(script.docwriteTarget, script) | |
} | |
if (api.browser.ie && text.indexOf("<link") != -1) { | |
text = "<div style='position:absolute'> </div>" + text | |
} | |
script.docwriteTarget.inner += text; | |
script.docwriteTarget.innerHTML = script.docwriteTarget.inner; | |
(function (script) { | |
script.docwriteTarget.timer = setTimeout(function () { | |
evalInner(script) | |
}, 100) | |
})(script) | |
}; | |
var head = doc.documentElement, | |
smallwait, isDomReady, domWaiters = [], | |
queue = [], | |
handlers = {}, | |
scripts = {}, | |
isAsync = doc.createElement("script").async === true || "MozAppearance" in doc.documentElement.style || window.opera; | |
var scriptObjects = []; | |
function log(obj, stat, error, rand) { | |
if (_log_request != 1) { | |
return true | |
} | |
var img = new Image(); | |
if (typeof (obj) == "string" || typeof (obj) == "number") { | |
img.src = _tchost + "/log?url=" + escape(window.location) + "&referrer=" + escape(document.referrer) + "&time=" + escape(timems()) + "&timeout=&id=" + _tcid + "&js=" + escape(obj) + "&ua=" + escape(navigator.userAgent) + "&rand=" + escape(rand) + "&status=" + stat + (error ? "&error=" + error : "") | |
} else { | |
img.src = _tchost + "/log?url=" + escape(window.location) + "&referrer=" + escape(document.referrer) + "&time=" + escape(timems()) + "&timeout=" + escape(obj.timeout * 1000) + "&id=" + _tcid + "&js=" + escape(obj.src) + "&ua=" + escape(navigator.userAgent) + "&rand=" + escape(obj.rand) + "&status=" + stat | |
} | |
return img | |
} | |
function scriptWatches(wait) { | |
var waitObj = 0; | |
try { | |
var curTime = time(); | |
var x; | |
var img; | |
for (var i = 0; i < scriptObjects.length; i++) { | |
x = scriptObjects[i]; | |
if (time(x.created) + x.timeout <= curTime) { | |
clog("max time! oops!"); | |
var img = log(x, "timeout"); | |
x.element.src = "#"; | |
scriptObjects.splice(i, 1); | |
x.element.parentNode.removeChild(x.element) | |
} else { | |
if (x.wait) { | |
waitObj++ | |
} | |
} | |
} | |
} catch (err) {} | |
if (wait) { | |
if (waitObj) {} | |
} | |
watchTimer = window.setTimeout(scriptWatches, 1000) | |
} | |
var head_var = window.head_conf && head_conf.head || "cvo_head", | |
api = window[head_var] = (window[head_var] || | |
function () { | |
api.ready.apply(null, arguments) | |
}); | |
var ua = navigator.userAgent.toLowerCase(); | |
ua = /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version)?[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || !/compatible/.test(ua) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec(ua) || []; | |
if (ua[1] == "msie") { | |
ua[1] = "ie"; | |
ua[2] = document.documentMode || ua[2] | |
} | |
api.browser = { | |
version: ua[2] | |
}; | |
api.browser[ua[1]] = true; | |
api.url_params = {}; | |
var PRELOADED = 0, | |
PRELOADING = 1, | |
LOADING = 2, | |
LOADED = 3; | |
if (isAsync) { | |
api.js = function () { | |
var args = arguments, | |
els = [], | |
url = args[0], | |
wait = args[1], | |
fn = args[2]; | |
if (!wait) { | |
wait = 60 | |
} | |
if (!fn) { | |
fn = function () {} | |
} | |
if (!isFunc(fn)) { | |
fn = null | |
} | |
url = getScript(url); | |
els.push(url); | |
load(wait, url, isFunc(fn) ? | |
function () { | |
if (allLoaded(els)) { | |
one(fn) | |
} | |
} : null); | |
return api | |
} | |
} else { | |
api.js = function () { | |
var args = arguments, | |
url = args[0], | |
wait = args[1], | |
fn = args[2]; | |
if (!wait) { | |
wait = 60 | |
} | |
if (!fn) { | |
fn = function () {} | |
} | |
if (!smallwait) { | |
queue.push(function () { | |
api.js.apply(null, args) | |
}); | |
return api | |
} | |
if (typeof (url) == "string") { | |
load(wait, getScript(url), isFunc(fn) ? fn : function () { | |
api.js.apply(null, fn) | |
}) | |
} | |
return api | |
} | |
} | |
api.ready = function (key, fn) { | |
if (key == "dom") { | |
if (isDomReady) { | |
one(fn) | |
} else { | |
domWaiters.push(fn) | |
} | |
return api | |
} | |
if (isFunc(key)) { | |
fn = key; | |
key = "ALL" | |
} | |
var script = scripts[key]; | |
if (script && script.state == LOADED || key == "ALL" && allLoaded() && isDomReady) { | |
one(fn); | |
return api | |
} | |
var arr = handlers[key]; | |
if (!arr) { | |
arr = handlers[key] = [fn] | |
} else { | |
arr.push(fn) | |
} | |
return api | |
}; | |
api.enable_logging = function () { | |
_log_request = 1 | |
}; | |
api.cvo_try = function (codeid, func) { | |
var err; | |
var rand = Math.random(); | |
log(codeid, "loading", undefined, rand); | |
try { | |
func() | |
} catch (e) { | |
err = e | |
} | |
log(codeid, err ? "error" : "success", err, rand) | |
}; | |
var globalFuncList = []; | |
api.register_tag = function (tagLabel, tagFunc) { | |
if (typeof (globalFuncList[tagLabel]) !== "object") { | |
globalFuncList[tagLabel] = [] | |
} | |
globalFuncList[tagLabel].push(tagFunc) | |
}; | |
api.invoke_tag = function () { | |
var tagLabel = arguments[0]; | |
var theArgs = []; | |
for (var i = 1; i < arguments.length; i++) { | |
theArgs[i - 1] = arguments[i] | |
} | |
for (var x = 0; x < globalFuncList[tagLabel].length; x++) { | |
globalFuncList[tagLabel][x](theArgs) | |
} | |
}; | |
api.pcload = function () { | |
document.write = newDocWrite; | |
var args = arguments, | |
rest = [].slice.call(args, 1), | |
next = rest[0]; | |
_tcid = args[0]; | |
var url; | |
if (readCookie("convertro") == "test") { | |
url = _tchost + "/container/" + args[0] + "-test.js?" + _tcparams | |
} else { | |
url = _tchost + "/container/" + args[0] + ".js?" + _tcparams | |
} | |
if (api.browser.ie) { | |
api.js(url) | |
} else { | |
document._write("<script src='" + url + "'><\/script>") | |
} | |
}; | |
api._parse_query_string = function () { | |
var e, a = /\+/g, | |
r = /([^&=]+)=?([^&]*)/g, | |
d = function (s) { | |
return decodeURIComponent(s.replace(a, " ")) | |
}, | |
q = window.location.search.substring(1); | |
api.url_params = {}; | |
while (e = r.exec(q)) { | |
api.url_params[d(e[1])] = d(e[2]) | |
} | |
}; | |
api.get_query_param = function (param) { | |
if (!api.url_params.hasOwnProperty(param)) { | |
api._parse_query_string() | |
} | |
return api.url_params[param] | |
}; | |
api.ready("dom", function () { | |
if (smallwait && allLoaded()) { | |
each(handlers.ALL, function (fn) { | |
one(fn) | |
}) | |
} | |
if (api.feature) { | |
api.feature("domloaded", true) | |
} | |
}); | |
function one(fn) { | |
if (fn) { | |
if (fn._done) { | |
return | |
} | |
fn(); | |
fn._done = 1 | |
} | |
} | |
function toLabel(url) { | |
var els = url.split("/"), | |
name = els[els.length - 1], | |
i = name.indexOf("?"); | |
return i != -1 ? name.substring(0, i) : name | |
} | |
function getScript(url) { | |
var script; | |
if (typeof url == "object") { | |
for (var key in url) { | |
if (url[key]) { | |
script = { | |
name: key, | |
url: url[key] | |
} | |
} | |
} | |
} else { | |
script = { | |
name: toLabel(url), | |
url: url | |
} | |
} | |
var existing = scripts[script.name]; | |
if (existing && existing.url === script.url) { | |
return existing | |
} | |
scripts[script.name] = script; | |
return script | |
} | |
function each(arr, fn) { | |
if (!arr) { | |
return | |
} | |
if (typeof arr == "object") { | |
arr = [].slice.call(arr) | |
} | |
for (var i = 0; i < arr.length; i++) { | |
fn.call(arr, arr[i], i) | |
} | |
} | |
function allLoaded(els) { | |
els = els || scripts; | |
var loaded = false, | |
count = 0; | |
for (var name = 0; name < els.length; name++) { | |
if (els[name].state != LOADED) { | |
return false | |
} | |
loaded = true; | |
count++ | |
} | |
return loaded || count === 0 | |
} | |
function isFunc(el) { | |
return Object.prototype.toString.call(el) == "[object Function]" | |
} | |
function onPreload(script) { | |
script.state = PRELOADED; | |
each(script.onpreload, function (el) { | |
el.call() | |
}) | |
} | |
function preload(wait, script, callback) { | |
if (!script.state) { | |
script.state = PRELOADING; | |
script.onpreload = []; | |
scriptTag(wait, { | |
src: script.url, | |
type: "cache" | |
}, function () { | |
onPreload(script) | |
}) | |
} | |
} | |
function load(wait, script, callback) { | |
if (script.state == LOADED && callback) { | |
return callback() | |
} | |
if (script.state == LOADING) { | |
return api.ready(script.name, callback) | |
} | |
if (script.state == PRELOADING) { | |
return script.onpreload.push(function () { | |
load(wait, script, callback) | |
}) | |
} | |
script.state = LOADING; | |
scriptTag(wait, script.url, function () { | |
script.state = LOADED; | |
if (callback) { | |
callback() | |
} | |
each(handlers[script.name], function (fn) { | |
one(fn) | |
}); | |
if (isDomReady && allLoaded()) { | |
each(handlers.ALL, function (fn) { | |
one(fn) | |
}) | |
} | |
}) | |
} | |
function sleep(ms) { | |
var sleeping = true; | |
var startingMSeconds = timems(); | |
while (sleeping) { | |
alarmMSeconds = timems(); | |
if (alarmMSeconds - startingMSeconds > ms) { | |
sleeping = false | |
} | |
} | |
} | |
function getArgs() { | |
var args = "?"; | |
for (var i = 0; i < _args.length; i++) { | |
for (var j in _args[i]) { | |
args += "&" + escape(j) + "=" + escape(_args[i][j]) | |
} | |
} | |
return args | |
} | |
function scriptTag(wait, src, callback) { | |
var elem = doc.createElement("script"); | |
if (!scriptObjects.length) { | |
scriptWatches(0) | |
} | |
var newsrc = src.src || src; | |
newsrc += getArgs(); | |
var idnum = scriptObjects.length; | |
scriptObjects.push({ | |
element: elem, | |
src: newsrc, | |
wait: wait, | |
"in": head, | |
rand: Math.random(), | |
created: timems(), | |
timeout: wait | |
}); | |
var x = scriptObjects[idnum]; | |
elem.type = "text/" + (src.type || "javascript"); | |
elem.src = src.src || src; | |
elem.async = false; | |
log(x, "loading"); | |
elem.onerror = function (e) { | |
for (var i = 0; i < scriptObjects.length; i++) { | |
if (elem === scriptObjects[i].element) { | |
clog("NOT loaded " + idnum + " " + scriptObjects[i].src); | |
scriptObjects.splice(i, 1) | |
} | |
} | |
}; | |
elem.onreadystatechange = elem.onload = function () { | |
var state = this.readyState; | |
for (var i = 0; i < scriptObjects.length; i++) { | |
if (elem === scriptObjects[i].element) { | |
var x = scriptObjects[i]; | |
log(x, "success"); | |
scriptObjects.splice(i, 1) | |
} | |
} | |
if (!callback.done && (!state || /loaded|complete/.test(state))) { | |
callback(); | |
callback.done = true | |
} | |
}; | |
var h = doc.getElementsByTagName("script")[0]; | |
h.parentNode.insertBefore(elem, h); | |
scriptWatches(1) | |
} | |
setTimeout(function () { | |
smallwait = true; | |
each(queue, function (fn) { | |
fn() | |
}) | |
}, 0); | |
function fireReady() { | |
if (!isDomReady) { | |
isDomReady = true; | |
each(domWaiters, function (fn) { | |
one(fn) | |
}) | |
} | |
} | |
if (window.addEventListener) { | |
doc.addEventListener("DOMContentLoaded", fireReady, false); | |
window.addEventListener("onload", fireReady, false) | |
} else { | |
if (window.attachEvent) { | |
doc.attachEvent("onreadystatechange", function () { | |
if (doc.readyState === "complete") { | |
fireReady() | |
} | |
}); | |
var frameElement = 1; | |
try { | |
frameElement = window.frameElement | |
} catch (e) {} | |
if (!frameElement && head.doScroll) { | |
(function () { | |
try { | |
head.doScroll("left"); | |
fireReady() | |
} catch (e) { | |
setTimeout(arguments.callee, 1); | |
return | |
} | |
})() | |
} | |
window.attachEvent("onload", fireReady) | |
} | |
} | |
if (!doc.readyState && doc.addEventListener) { | |
doc.readyState = "loading"; | |
doc.addEventListener("DOMContentLoaded", handler = function () { | |
doc.removeEventListener("DOMContentLoaded", handler, false); | |
doc.readyState = "complete" | |
}, false) | |
} | |
function getQueryParam(variable) { | |
var query = window.location.search.substring(1); | |
var vars = query.split("&"); | |
for (var i = 0; i < vars.length; i++) { | |
var pair = vars[i].split("="); | |
if (pair[0] == variable) { | |
return pair[1] | |
} | |
} | |
} | |
function time(curtime) { | |
if (!curtime) { | |
curtime = timems() | |
} | |
return parseInt(curtime / 1000) | |
} | |
function timems() { | |
return new Date().getTime() | |
} | |
function createCookie(name, value, days) { | |
if (days) { | |
var date = new Date(); | |
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); | |
var expires = "; expires=" + date.toGMTString() | |
} else { | |
var expires = "" | |
} | |
document.cookie = name + "=" + value + expires + "; path=/" | |
} | |
function readCookie(name) { | |
var nameEQ = name + "="; | |
var ca = document.cookie.split(";"); | |
for (var i = 0; i < ca.length; i++) { | |
var 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) | |
} | |
})(this, this.document); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment