Cinemateca Brasileira

Acompanhe a programação da
Cinemateca Brasileira

Veja a Programação até o início de novembro de 2011
Cinemateca BrasileiraSite: http://www.cinemateca.gov.br/
Largo Senador Raul Cardoso, 207 – Vila Clementino – 04021-070 – São Paulo
(11) 3512-6111 / contato@cinemateca.org.br

_uacct = “UA-644317-1”;
urchinTracker();

/////////// SEARCH ///////////
var g_aEng;
var g_loc;

// Initialize namespace, use existing context
var searchshield = searchshield || {};

searchshield.clockUrl;

// constants
searchshield.SCORE_SS_SAFE = 1;
searchshield.SCORE_SS_CAUTION = 2;
searchshield.SCORE_SS_WARNING = 3;
searchshield.SCORE_SS_BLOCK = 4;
searchshield.SCORE_SS_VERISIGN = 7;

searchshield.BLOCK_NONE = 0;
searchshield.BLOCK_NORMAL = 1;
searchshield.BLOCK_PHISH = 2;
searchshield.BLOCK_YAHOO = 3;

searchshield.XPLCHECK_RESULT_SEV_NONE = 0;
searchshield.XPLCHECK_RESULT_SEV_LOW = 1;
searchshield.XPLCHECK_RESULT_SEV_MED = 2;
searchshield.XPLCHECK_RESULT_SEV_BLOCK = 3;

searchshield.VERISIGN_SPLIT_NOTEST = 0;
searchshield.VERISIGN_SPLIT_TESTA = 1;
searchshield.VERISIGN_SPLIT_TESTB = 2;

searchshield.needLivePhishCheck = false;
searchshield.allowedSites = [];
searchshield.enabled = function (doc)
{
var result = searchshield.avgCallFunc(doc, ‘GetSearchEnabled’);
return (result == ‘1’ ? 1 : 0);
};
searchshield.init = function (doc)
{
if ((doc == null) || (doc.location == null) || (doc.location.href.search(/about:/) != -1))
return;

if (!searchshield.enabled(doc))
return;

if (!g_aEng)
g_aEng = searchshield.Search.prototype.detectEngine(doc.location.href);

if (!g_aEng)
return;

// init search object (not declared or is null)
if (typeof xplSearch === ‘undefined’)
{
// global
xplSearch = new searchshield.Search();

// reset the links added flag
xplSearch.new_links = false;

xplSearch.doc = doc;
xplSearch.href = xplSearch.doc.location.href;
xplSearch.uri = searchshield.parseLink(xplSearch.href);

xplSearch.engine = new searchshield[g_aEng+’SearchEngine’](xplSearch)
xplSearch.addEngine(xplSearch.engine);

searchshield.launch(doc);
}

if (doc.location.href != g_loc)
{
g_loc = doc.location.href;
if ((typeof xplSearch !== ‘undefined’) && (xplSearch != null))
searchshield.launch(doc);
}
};
searchshield.launch = function (doc)
{
// IE specific check
searchshield.quirksMode = (self.top.document.compatMode == ‘BackCompat’);
searchshield.docMode = parseInt(navigator.userAgent.split(‘MSIE’)[1]);

if ((self === top) && (self.document === doc))
{
if (!xplSearch.engine)
return;

// set verdict display config
xplSearch.engine.setRatingsConfig(doc);

// init the alert popup
searchshield.initPopupAlert(doc);

if (xplSearch.engine.type != ‘inline’)
{
// save function reference for memory clean up later
var fn = function(event){avglsflyover.hide(null)};

//hide flyover if these events occur
window.detachEvent(‘onscroll’, fn);
window.attachEvent(‘onscroll’, fn);

doc.detachEvent(‘onkeydown’, fn);
doc.attachEvent(‘onkeydown’, fn);
}

// only start monitor on top doc
searchshield.avgPageMonitor.start(doc);
}

return;
};

// search monitors and processors – doc is always top most document
searchshield.avgPageMonitor = {
previousUrl: null,
start: function(doc){
searchshield.avgPageMonitor.stop();
searchshield.avgPageMonitor.process(doc);
searchshield.avgPageMonitor.timeoutID = window.setTimeout(function(){searchshield.avgPageMonitor.start(doc)}, 1000);
},
process: function(doc){
var currentUrl = doc.location.href;
var refresh = 0;
if (this.previousUrl != currentUrl) {
this.previousUrl = currentUrl;
avgreport.scanResult(doc, currentUrl);
refresh = (xplSearch.engine.name == ‘google’) ? 1 : 0;
}
searchshield.avgProcessSearch(doc, refresh);
},
stop: function(){
if (searchshield.avgPageMonitor.timeoutID)
{
window.clearTimeout(searchshield.avgPageMonitor.timeoutID);
delete searchshield.avgPageMonitor.timeoutID;
}
}
};

searchshield.avgProcessSearch = function (doc, refresh)
{
// doc may be about:Tabs or about:Blank
if (!doc)
return;

if (!searchshield.enabled(doc))
return;

if (!searchshield.clockUrl)
searchshield.clockUrl = searchshield.avgCallFunc(doc, ‘GetIconUrl’, ‘0’);

xplSearch.clockUrl = searchshield.clockUrl

if (!xplSearch.engine)
return;

// get result links
xplSearch.links = [];
var links = searchshield.avgGetSearchLinks(doc, xplSearch.engine, refresh);

searchshield.needLivePhishCheck = false;
for (var i=0; i < links.length; i++) { var isPhishing = searchshield.avglsCheckandUpdate(links[i]); if (isPhishing) searchshield.needLivePhishCheck = true; } if (searchshield.needLivePhishCheck) { var prev = '1'; if ( xplSearch.engine.type == 'inline' ) prev = '0'; searchshield.avgCallFunc(doc, 'GetPhishingResults', prev); searchshield.needLivePhishCheck = false; } else if (links.length > 0 && xplSearch.engine.type != ‘inline’)
{
searchshield.avgCallFunc(doc, ‘FinalScanComplete’);
}

// attach click handlers for popup alerts
doc.body.detachEvent(“onclick”, searchshield.blockClick);
doc.body.attachEvent(“onclick”, searchshield.blockClick);

doc.body.detachEvent(“ondblclick”, searchshield.blockClick);
doc.body.attachEvent(“ondblclick”, searchshield.blockClick);
};
searchshield.avgGetSearchLinks = function (doc, engine, refresh)
{
if (!doc.body)
return;

var alltags = doc.body.getElementsByTagName(‘a’);
for (var i = 0; i < alltags.length; i++) { if ( !refresh ) { // no checked test if refreshing - google if (alltags[i].getAttribute('avglschecked')) continue; } // mark search result anchor so it isn't processed repeatedly alltags[i].setAttribute('avglschecked', '1'); // ignore linked resources if (alltags[i].tagName == 'LINK') continue; // ignore in-page bookmarks and javascript if ((!alltags[i].href) || (alltags[i].href.charAt(0) == '#') || // in-page bookmark (alltags[i].href.indexOf("javascript") == 0)) continue; // ignore verdicts if (/XPLSS_/.test(alltags[i].id)) continue; // ignore flyover anchors if (/avgthreatlabs/.test(alltags[i].host)) continue; var href = engine.includeLink(alltags[i]); if (!href) continue; var newNode = engine.search.addLink(alltags[i], href); engine.addImage(newNode, engine.search.clockUrl, false); } // recursivesly process all frames var docFrames = doc.frames; if (docFrames && engine.processFrames) { for (var j = 0; j < docFrames.length; j++) { var attr; var frameDoc; try { attr = docFrames[j].frameElement.className; frameDoc = docFrames[j].document; } catch(err){} //TODO: make frame processing an engine function or at least make exclusions an engine property // 'editable' frame it's probably a gmail reply if (attr && (attr.indexOf("editable") != -1)) continue; if (frameDoc) searchshield.avgGetSearchLinks(frameDoc, engine, 0); } } return engine.search.links; }; searchshield.avglsCheckandUpdate = function (linkNode) { if (!xplSearch) return; // element is the search result anchor var element = linkNode.element; var href = linkNode.href; var result = searchshield.avgCallFunc(xplSearch.doc, 'CheckSite', href, element.href); if (result == null) return; var resultParse = result.split('::'); var phishing = resultParse[0]; // if phishing then rest of array does not exist. if (phishing == 1) return true; if (resultParse.length < 8) return; var hash = resultParse[1]; var score = resultParse[2]; var new_image = resultParse[3]; var alt_image = resultParse[4]; var flyover = resultParse[5]; var click_thru= resultParse[6]; var altClick_thru = resultParse[7]; // iterate to get verdict anchor nextElem = element.nextSibling; while (nextElem) { if (nextElem.nodeType == 1 && nextElem.id && (nextElem.id.indexOf("XPLSS_") != -1)) break; nextElem = nextElem.nextSibling; } return xplSearch.engine.updateImage(hash, xplSearch.searchHash, score, new_image, alt_image, flyover, click_thru, altClick_thru); }; // click event handler - shows popup for links of caution and warning severity searchshield.blockClick = function(event) { if (!event) event = window.event; // no action needed if click is not the left mouse button if (event.button != 0) return; var anchor = searchshield.getAnchorNode(event.srcElement, function(node) {return ((node.tagName.charAt(0) == "H") || (node.tagName.charAt(0) == "D") || (node.tagName.charAt(0) == "T"))} ); if ((anchor == null) || (anchor.href == null)) return true; // ignore if anchor is on an xpl verdict if (!!anchor.id) { if (anchor.id.indexOf('LXPLSS_') == 0) return true; if (anchor.id.indexOf('XPLSS_INTR') == 0) { searchshield.allowedSites.push(searchshield.GetDomain(anchor.href)); return true; } } // VeriSign A/B Split reporting - only for VerSign domains var avglschecked = anchor.getAttribute("avglschecked"); if (avglschecked && avglschecked != 1) { var sPos = avglschecked.indexOf("S"); var hash = (sPos > -1) ? avglschecked.substring(0, sPos) : null;
var split = (sPos > -1) ? avglschecked.substring(sPos+1) : null;
if (hash && split && split != searchshield.VERISIGN_SPLIT_NOTEST)
{
// check updated verdict anchor for verisign domain
var d = event.srcElement.ownerDocument;
if (d.getElementById(“LXPLSS_” + hash + “U” + searchshield.SCORE_SS_VERISIGN))
{
searchshield.avgCallFunc(d, “RecordVSClick”, hash, d.location.href);
}
}
}

var link = anchor.href;
var verdict = searchshield.getAvgImage(anchor);
var score = -1;
var img_id = ”;
if (verdict != null)
{
score = verdict.score;
img_id = verdict.rawId;
}

// show popup alert (upper left)
if ((score >= searchshield.SCORE_SS_CAUTION) && (score = elementRect.bottom) &&
(nextImgRect.left -1)
return true;

return false;
};
searchshield.FilterUrl = function (url, filter)
{
if (!url || (url.length < 1)) return false; if (!filter || !(filter instanceof Array)) return false; var parts = url.split('/'); if ((parts == null) || (parts.length < 3)) return false; var domain = parts[2]; for (var i = 0; i < filter.length; i++) { if (domain.indexOf(filter[i]) != -1) return true; } return false; }; searchshield.GetDomain = function (url) { if (url != null) { // get url domain var parts = url.split('/'); if ((parts != null) && (parts.length >= 3))
{
return parts[2].toLowerCase();
}
}

return url;
};
searchshield.getUrlContents = function (url)
{
if (url == null)
return null;

// don’t query if local url
if (url.indexOf(“linkscanner://”) != -1)
return null;

try
{
req = new XMLHttpRequest();
req.open(“GET”, url, false);
req.send(null);
if (req.status == 200)
return req.responseText;
else
return null;
}
catch (err)
{
// nothing to do
return null;
}
};
searchshield.parseLink = function (href, simpleMode)
{
var uri = {};
var parameter = {
complex: {
pattern: /^(?:([a-z]+):(?:([a-z]*):)?//)?(?:([^:@]*)(?::([^:@]*))?@)?((?:[a-z0-9_-]+.)+[a-z]{2,})(?::(d+))?(?:([^:?#]+))?(?:?([^#]+))?(?:#([^s]+))?$/i,
element: [‘source’,’scheme’,’subscheme’,’user’,’pass’,’host’,’port’,’path’,’query’,’fragment’]
},
simple: {
pattern: /^(?:([a-z]+)://)?((?:[a-z0-9_-]+.)+[a-z]{2,})(?:/)([^:?]+)?(?:([?|#])([^?]+))?$/i,
element: [‘source’,’scheme’,’host’,’path’,’delimiter’,’query’]
}
};
var mode = simpleMode !== false ? ‘simple’ : ‘complex’;
var pattern = parameter[mode].pattern;
var element = parameter[mode].element;

if (!href)
return uri;

var matches = href.match(pattern);

if (matches)
{
// ——————–
// iterate over the matches array and populate uri properties
// using the respective element parameter as the name.
// NOTE: set raw property type as String to make inArray()
// work properly with instanceof.
// ——————–
for (var i=0; i < matches.length; i++) uri[element[i]] = new String(matches[i] || ""); // -------------------- // create an array, hostArray, from host, for example, // host="www.google.com" and hostArray=["www","google","com"] // -------------------- uri.hostArray = uri.host.split("."); // -------------------- // create an array, qsArray, from query, for example, // query='hl=en&q=javascript&btnG=Search&aq=f&aqi=g10&aql=&oq=&gs_rfai=' // qsArray=[{hl:'en'},{q:javascript}, ... ,(qs_rfai:''}] // // $0=entire match, $1=capture 1, $2=capture 2 // must include $0 even though it is unused so // the replace works properly // -------------------- uri.qsArray = searchshield.parseQuery(uri.query); } //non-standard urls require a fail-safe that relies on simply splitting the href function splitLink(href) { // split the href on '/' var linkParts = href.split("/"); // need domain and path if ((linkParts == null) || (linkParts.length < 2)) return false; var uri = { delimiter: (linkParts[3]).substring(0,1), host: linkParts[2], hostArray: (linkParts[2]).split('.'), path: (linkParts[3]).substring(1), qsArray: [], query: '', scheme: (linkParts[0]).substring(0, linkParts[0].length-1), source: href }; return uri; } if (!uri.host) uri = splitLink(href); return uri; }; searchshield.parseQuery = function (qs) { var qsArray = []; qs.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) { if ($1) qsArray[$1] = $2; } ); return qsArray; }; // general functions searchshield.arrayKeys = function (array) { var keys = new Array(); for(k in array) keys.push(k); return keys; }; searchshield.inArray = function (key, array, caseSensitive, exactMatch) { if (! array instanceof Array) return false; if (caseSensitive !== true) caseSensitive = false; if (exactMatch !== false) exactMatch = true; if (key instanceof String) { for (var i=0; i < array.length; i++) { var k = caseSensitive ? key.valueOf() : key.valueOf().toLowerCase(); var a = caseSensitive ? array[i] : array[i].toLowerCase(); if(exactMatch && k === a) return true; else if (!exactMatch && (-1 !== k.indexOf(a))) return true; } } else if (key instanceof Array) { for (var i=0; i < array.length; i++) for (var j=0; j < key.length; j++) { var k = caseSensitive ? key[j] : key[j].toLowerCase(); var a = caseSensitive ? array[i] : array[i].toLowerCase(); if (exactMatch && k === a) return true; else if (!exactMatch && (-1 !== k.indexOf(a))) return true; } } return false; }; searchshield.getClickHandlerParams = function(clickHandler) { var re = /((?:'[^']*')|[w]*)(?:,|))/ig; var chParams = []; clickHandler.replace(re, function($0, $1, $2){ if ($1) chParams.push($1); } ); return chParams; }; // general use functions - end // Search constructor searchshield.Search = function() { this.doc = null; this.engine = null; this.engines = null; this.links = null; this.uri = null; this.searchHash = null; this.checkUrl = null; this.useLocalImgs = null; this.clockUrl = null; // create engine list (actually key/value object will be used) this.engineList = {}; }; searchshield.Search.prototype.getSearchNames = function() { // order is important var names = [ 'Google', 'AVGGoogle', 'AltaVista', 'AVGYahoo', 'Yahoo', 'Bing', 'MSN', // MSN redirects to BING 'Baidu', 'Earthlink', 'AOL', 'Ask', 'Yandex', 'Seznam', 'Webhledani', 'eBay', ///temp 'Digg', 'Slashdot', 'Twitter', 'GMail', 'Facebook', 'MySpace' ]; return names; }; searchshield.Search.prototype.detectEngine = function(href) { if (!href) return; var aEng = searchshield.Search.prototype.getSearchNames(); var aEngLen = aEng.length; for (var i=0; i < aEngLen; i++) { if (searchshield[aEng[i] + 'SearchEngine'].prototype.validSearch(href)) return aEng[i]; } return; }; searchshield.Search.prototype.addEngine = function(engine) { if (!this.engines) this.engines = new Array(); this.engines.push(engine); }; searchshield.Search.prototype.addLink = function(inElement, inHref) { if (!this.links) this.links = new Array(); var hrefHash; try { hrefHash = searchshield.avgCallFunc(this.doc, 'GetHash', inHref); } catch (e){} var newNode = { element: inElement, href: inHref, hash: hrefHash, search: this.searchHash }; this.links.push(newNode); return newNode; } // process the search result page after all search engines have been added searchshield.Search.prototype.process = function(doc) { // only process when searchshield is enabled if (!searchshield.enabled(doc)) return; this.doc = doc; this.href = this.doc.location.href; this.uri = searchshield.parseLink(this.href); try { this.searchHash = searchshield.avgCallFunc(this.doc, 'GetHash', this.href); // get any previously active engine this.engine = this.engineList[this.searchHash.toString()]; } catch (e) {} /* Process Steps: 1. Add all supported search engines 2. Identify the active search engine 3. Get all document links and add AVG images */ // STEP 1 - Add all supported search engines if (!this.engines) { var aEng = xplSearch.getSearchNames(); var aEngLen = aEng.length; for (var i=0; i < aEngLen; i++) { xplSearch.addEngine(new searchshield[aEng[i]+'SearchEngine'](this)); } } // search the engines if we didn't find one if (!this.engine) { // STEP 2 - Identify the active search engine var engLen = this.engines.length; for (var i = 0; i < engLen; i++) { if (this.engines[i].validSearch()) { this.engine = this.engines[i]; break; } } // create a new engine instance to store this.engineList[this.searchHash.toString()] = this.engine; // init this search, if < 1 either an error or disabled //var sdkInit = 0; //try { // sdkInit = xpl_sdk.SXPL_InitSearch(this.href); //} //catch(e){} //if (sdkInit < 1) // return false; } // return immediately if there is not an active search engine if (!this.engine) return false; try { // base url to check for icons this.checkUrl = searchshield.avgCallFunc(this.doc, 'GetIconUrl', '1'); // check if using linked or local icons this.useLocalImgs = !searchshield.getUrlContents(this.checkUrl); // get the clock url this.clockUrl = searchshield.avgCallFunc(this.doc, 'GetIconUrl', '0'); } catch(e){} // STEP 3 - Get all document links and add AVG images var alltags = this.doc.getElementsByTagName("*"); // this method works for IE, FF and Chrome for (var i=0; i < alltags.length; i++) { // ignore verdicts if (alltags[i].id && (alltags[i].id.indexOf("LXPLSS_") != -1)) continue; //should the link be included? Make sure includeLink always returns an href else FALSE, var href = this.engine.includeLink(alltags[i]); if (!href) continue; var newNode = this.addLink(alltags[i], href); this.engine.addImage(newNode, this.clockUrl, false); } return (this.links ? this.links.length : false); }; //////////////// SEARCH //////////////// //////////////// SEARCH ENGINE //////////////// // Interface for a SearchEngine object searchshield.SearchEngine = function(search) { this.search = search; this.type = 'standard'; this.processFrames = false; this.new_links = true; this.onlyPrimaries = true; this.inline = { clockImage: "linkscanner://clock12.png", image: [ "linkscanner://safe12.png", "linkscanner://caution12.png", "linkscanner://warning12.png", "linkscanner://blocked12.png" ], color: { classname: ["green","yellow","orange","red"], border: ["#00A120", "#EAA500", "#F57301", "#D20003"], background: ["#C3E5CA", "#FEEFAE", "#FFD3B0", "#F5D4C1"] } }; this.filter_urls = [ "ad.doubleclick.net", "ads1.revenue.net", "aslads.ask.com", "bluestreak.com", "clickbacktrack.net", "clickbank.net", "clickboothlnk.com", "clickmanager.com", "clickserve.cc-dt.com", "dartsearch.net", "clicktraxmedia.com", "clk.atdmt.com", "dpi-digialphoto.com", "feedpoint.net", "hypertracker.com", "jdoqocy.com", "kqzyfj.com", "m1428.ic-live.com", "mediaplex.com", "mr.mdmngr.com", "n339.asp-cc.com", "offeredby.net", "offerweb.com", "pinktrax.com", "pinktrax.com", "pixel1523.everesttech.net", "qckjmp.com", "r.rd06.com", "revenuewire.net", "s0b.bluestreak.com", "s2.srtk.net", "servedby.advertising.com", "store.yahoo.com", "tf8.cpcmanager.com", "thetoptracker.com", "track.searchignite.com", "tracking.searchmarketing.com", "www.dpbolvw.net", "www.rkdms.com", "www.yellowbookleads.com" ]; this.shortened_urls = [ "3.ly", "bit.ly", "is.gd", "tr.im", "short.to", "tiny.cc", "tinyurl.com", "lnk.ms", "msplinks.com", "t.co", "qr.net" ]; this.showCleanVerdicts = true; this.showLowRiskVerdicts = true; this.showMedRiskVerdicts = true; this.VeriSignSplit = searchshield.VERISIGN_SPLIT_NOTEST; }; searchshield.SearchEngine.prototype.flyoverExists = function (doc) { return !!doc.getElementById("XPLSS_Flyover"); }; searchshield.SearchEngine.prototype.inlineExists = function (doc) { return !!doc.getElementById("XPLSS_InlineFlyover"); }; searchshield.SearchEngine.prototype.validSearch = function(href) { return false; }; searchshield.SearchEngine.prototype.includeLink = function(link) { return false; }; searchshield.SearchEngine.prototype.insertNodes = function(node, doc) { var element = node.element; var parentNode = node.element.parentNode; if (parentNode == null) { // try and find element again based on the hash element = doc.getElementById("xplid_" + node.hash); parentNode = !!element ? element.parentNode : null; } var insertNode = !!element ? element.nextSibling : null; while ((insertNode != null) && (insertNode.tagName != null) && (insertNode.tagName == "SPAN")) { insertNode = insertNode.nextSibling; } return [insertNode, parentNode]; }; searchshield.SearchEngine.prototype.addImage = function(node, image, hidden) { var element = node.element; var hash = node.hash; var score = node.score; // set verdict display configuration var doc = element.ownerDocument; if (this.type != 'inline' && !doc.getElementById('XPLSS_Flyover')) searchshield.initFlyover(doc, this); // get the proper insertion point for the image var insertNodes = this.insertNodes(node, doc); var insertNode = insertNodes[0]; var parentNode = insertNodes[1]; if (!parentNode) return; // see if we already have an image if ((insertNode != null) && (insertNode.id != null) && (insertNode.id.indexOf("XPLSS_") > -1))
{
return;
}

// mark search result anchor so it isn’t processed repeatedly
if (score == undefined)
element.setAttribute(“avglschecked”, hash + “S” + this.VeriSignSplit);

// create a new image
var img = doc.createElement(‘img’);
img.src = image;
img.id = “XPLSS_” + hash;
img.style.borderStyle = “none”;
img.style.margin = “0 3px”;

// for IE, specify these style attributes to prevent inadvertent inheritance from parent
if (img.width && img.height)
{
img.style.width = img.width + ‘px’;
img.style.height = img.height + ‘px’;
}

// apply custom element styles
this.updateElementStyle(img, this.addImageStyle);

// create the link element
var anchor = doc.createElement(“A”);
anchor.setAttribute(“id”, “LXPLSS_” + hash);

if ((hidden != null) && (hidden == true))
{ // hiding the parent will also hide its child nodes
anchor.style.display = “none”;
}

// Default anchor styles
//Over-ride possible border style with inline declaration
anchor.style.borderStyle = “none”;

// apply custom element styles
this.updateElementStyle(anchor, this.addAnchorStyle);

if (score == searchshield.SCORE_SS_VERISIGN)
{
anchor.style.textDecoration = “none”;
anchor.style.background = “none repeat scroll 0 0 transparent”;
}

// append the image to the link
anchor.appendChild(img);

// insert the node as either a sibling or a child
if (insertNode != null)
parentNode.insertBefore(anchor, insertNode);
else
parentNode.appendChild(anchor);

return anchor;
};
searchshield.SearchEngine.prototype.updateImage = function (hash, search, score, image, alt_image, flyover, click_thru, altClick_thru)
{
var updated = false;

var frameDoc = this.search.doc;
var docFrames = frameDoc.frames;
var frameElem;
if (docFrames && this.processFrames)
{
for (var i=0; i < docFrames.length; i++) { try { if (docFrames[i].document.getElementById(hash)) { frameElem = docFrames[i].frameElement; frameDoc = docFrames[i].document; break; } } catch(err){} } } while ((element = frameDoc.getElementById(hash)) != null) { // check configuration to determine if verdict display property var showVerdict = true; var nSeverity = Number(score - 1); switch (nSeverity) { case searchshield.XPLCHECK_RESULT_SEV_LOW: showVerdict = this.showLowRiskVerdicts; break; case searchshield.XPLCHECK_RESULT_SEV_MED: showVerdict = this.showMedRiskVerdicts; break; case searchshield.XPLCHECK_RESULT_SEV_NONE: showVerdict = this.showCleanVerdicts; break; default: if (score == searchshield.SCORE_SS_VERISIGN) showVerdict = this.showCleanVerdicts; break; } // remove image if no url specified if ((!showVerdict) || (image == null) || (image.length < 1)) { // hide the parent anchor node element.parentNode.style.display = "none"; // mark the id as being hidden (element is the image) element.id = element.id + "H"; updated = true; // if not a verisign score if (score != searchshield.SCORE_SS_VERISIGN) continue; } // cleanup flyover, replace any new lines or single quotes flyover = searchshield.CleanupHTML(flyover); // mark the id as having been updated element.id = element.id + "U" + score; element.src = image; element.attachEvent("onmouseover", function(e){avglsflyover.popup(e, hash, search, flyover)}); element.attachEvent("onmouseout", function(e){avglsflyover.hide(e)}); // check for attribute updates (elementAttribute is an associative array (i.e., object) if (this.elementAttribute) { for (a in this.elementAttribute) { if(this.elementAttribute[a]) element.setAttribute(a, this.elementAttribute[a]); } } // To dynamically reduce verdict image size if it causes its container to scroll // when not showing alt images determine if the element containing // the verdict image is scrolling and decrease the image size by // the scroll amount (min size is 80% or original) var reduceBy = 0.8; var scrl = 0; if (!alt_image || this.omitAltImage || this.VeriSignSplit == searchshield.VERISIGN_SPLIT_TESTB) { try{ var maxLoop = 5; var cN = element.parentNode.parentNode; //image->anchor->containerNodes…
while (cN && maxLoop–)
{
if (cN.tagName == “DIV” || cN.tagName == “SPAN”)
{
// get object height depending on ie document mode
var clientHeight = (cN.clientHeight == 0 ||
(this.search.doc.documentMode && this.search.doc.documentMode < 8)) ? cN.offsetHeight : cN.clientHeight; scrl = cN.scrollHeight - clientHeight; break; } cN = cN.parentNode; } if (0 < scrl) { var eH = (element.height - scrl)/element.height; if (reduceBy > eH)
eH = reduceBy;

var newDim = Math.ceil(eH*element.height);

element.height = newDim;
element.width = newDim;

element.style.height = newDim + “px”;
element.style.width = newDim + “px”;
}
}
catch(e){}
}

// set default style attributes
element.style.display = “”;

// if verisign icon showing move our icon up for better centering of the 2
// except for IE7 browser – it does not like this style
try {
var ieVersion = parseFloat(navigator.appVersion.split(“MSIE”)[1]);
if (alt_image && (alt_image.length > 0) && ieVersion != 7)
element.style.verticalAlign = “10%”;
}
catch(err){};

// apply custom element styles
this.updateElementStyle(element, this.updateImageStyle)

// update the click thru
var link = this.search.doc.getElementById(“L” + hash);
if (link)
{
link.href = click_thru;
link.id = link.id + “U” + score;
}

updated = true;

// add the alternate image if supplied BUT not on avg yahoo
if ((alt_image) &&
(alt_image.length > 0) &&
(!this.omitAltImage) &&
(this.VeriSignSplit != searchshield.VERISIGN_SPLIT_TESTB))
{

var vhash = hash.substring(hash.indexOf(“_”)+1);

// create a temporary link node
var tmp_node = {
element: element.parentNode,
href: altClick_thru,
hash: vhash + “VU” + score,
search: this.searchHash,
score: score
};

var altAnchor = this.addImage(tmp_node, alt_image, false);
if (altAnchor && altAnchor.firstChild)
{
altAnchor.firstChild.setAttribute(“onmouseover”, “”);
altAnchor.href = altClick_thru;
}
}
}

if (updated != false)
{
this.resizeFrame(frameElem);
return true;
}

return false;
};
searchshield.SearchEngine.prototype.updateElementStyle = function (element, elementStyle)
{
if (elementStyle)
{ // a NULL attribte value will unset it
for(attr in elementStyle)
{
try {
if (element.style.setAttribute)
element.style.setAttribute(attr, elementStyle[attr]);
else
element.style[attr] = elementStyle[attr];
} catch(err){}
}
}
};

searchshield.SearchEngine.prototype.resizeFrame = function (frameElem)
{ // resize frame to prevent unwanted scrolling after inserting verdicts

// ignore inline and non-frame engines
if ((this.type == ‘inline’) || (!this.processFrames))
return;

// ensure all required elements are available
if ((frameElem == null) || (frameElem.style == null) || (frameElem.contentWindow == null))
return;

// if frame is scrolling vertically then resize
var frameHeight = parseInt(frameElem.style.height, 10);
if (!isNaN(frameHeight) && (frameHeight < frameElem.contentWindow.document.body.scrollHeight)) frameElem.style.height = frameElem.contentWindow.document.body.scrollHeight + 'px'; return; }; searchshield.SearchEngine.prototype.getImgElement = function (element) { // return an xpl img element associated with a given element if (element == null) return null; // go up the parent tree looking for a header or div while ( (element.parentNode != null) && (element.tagName.charAt(0) != "H") && (element.tagName.charAt(0) != "D") && (element.tagName.charAt(0) != "T") ) { element = element.parentNode; } // if all the way to the top, nothing if ((element.tagName == "HTML") || (element == null)) return null; // get image tags, if none we are done var imgTags = element.getElementsByTagName("IMG"); if ((imgTags == null) || (imgTags.Length < 1)) return null; for (var i = 0; i < imgTags.length; i++) { if ((imgTags[i].id == null) || (imgTags[i].id.indexOf("XPLSS_") == -1)) continue; return imgTags[i]; } // else didn't find anything return null; }; searchshield.SearchEngine.prototype.setRatingsConfig = function (doc) { // get verdict configuration, need at least severity var results = searchshield.avgCallFunc(doc, 'GetRatingsConfig'); var parts = !!results ? results.split('::') : null; if (parts != null && parts.length >= 5)
{ //if set to default then get config value
if (this.showCleanVerdicts === true)
this.showCleanVerdicts = (parseInt(parts[0]) == 1) ? true : false;

if (this.showLowRiskVerdicts === true)
this.showLowRiskVerdicts = (parseInt(parts[1]) == 1) ? true : false;

if (this.showMedRiskVerdicts === true)
this.showMedRiskVerdicts = (parseInt(parts[2]) == 1) ? true : false;

this.VeriSignSplit = (parseInt(parts[4]));
}

return true;
};

searchshield.SearchEngine.prototype.init_inline_ratings = function (doc)
{
if ((doc == null) || (doc.getElementById(“XPLSS_InlineFlyover”)))
return;

if (!searchshield.quirksMode)
{
// create style for inline flyovers
var styleTag = doc.createElement(“style”);
styleTag.setAttribute(“id”,”avgILFOStyle”);

var headTag = doc.getElementsByTagName(“head”)[0];
headTag.appendChild(styleTag);

var inline_style = styleTag.styleSheet;
// stub in the base image name as the url
inline_style.addRule(“.avgILFO”, “background: url(linkscanner://default_inline_border_tl.png) no-repeat top left;”);
inline_style.addRule(“.avgILFO”, “width:0px; font-size:0px; z-index:9999; visibility:hidden; position:absolute; left:-5000px;”);

inline_style.addRule(“.avgILFO_content”, “background: url(linkscanner://default_inline_border_r.png) top right repeat-y;”);
inline_style.addRule(“.avgILFO_content”,”font-size:10px; color:black; padding:0px 10px; text-align:left; word-wrap:break-word; line-height:130%”);

inline_style.addRule(“.avgILFO_head”, “background: url(linkscanner://default_inline_border_tr.png) no-repeat top right;”);
inline_style.addRule(“.avgILFO_head”, “width:0px; height:5px;”);
inline_style.addRule(“.avgILFO_head div”,”height:5px;”);

inline_style.addRule(“.avgILFO_foot”, “background: url(linkscanner://default_inline_border_bl.png) no-repeat bottom left”);
inline_style.addRule(“.avgILFO_foot”, “height:5px;”);

inline_style.addRule(“.avgILFO_foot div”, “background: url(linkscanner://default_inline_border_br.png) no-repeat bottom right”);
inline_style.addRule(“.avgILFO_foot div”, “height:5px; width:0px;”);
}

try {
// create the popup box
var box = doc.createElement(“DIV”);
if (searchshield.quirksMode)
{
box.style.visibility = “hidden”;
box.style.position = “absolute”;
box.style.left = “-5000px”;
}

box.setAttribute(“id”, “XPLSS_InlineFlyover”);
box.setAttribute(“class”, “avgILFO”);

doc.body.appendChild(box);
box = null;
}
catch(boxErr){}
};

searchshield.SearchEngine.prototype.show_inline_ratings = function (doc, node, image)
{
var href = node.href;
var anchor = node.element;

if ((href == null) || (href.length < 1)) return; if (avglsinlineflyover.imageExists(anchor)) return; // mark search result anchor so it isn't processed repeatedly anchor.setAttribute("avglschecked", "1"); // get verdict this.display_inline(doc, anchor, href, node, false); }; searchshield.SearchEngine.prototype.display_inline = function (doc, anchor, href, node, update, min_severity) { // min_severity is the lowest severity to display, so setting it to // 1 would not display safe icons var results = searchshield.avgCallFunc(doc, 'MalsiteCheck', href); if (results == null) return; var parts = results.split('::'); // need at least severity if (parts == null) return; var nSeverity = parseInt(parts[0]); if (!update && nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE) { var shortUrl = searchshield.FilterUrl(href, this.shortened_urls); if (shortUrl) { // shortened url verdicts display later var engine = this; anchor.attachEvent("onmouseover", function(event){avglsinlineflyover.mouseOverHandler(event, doc, engine)}); return; } } // severity -1 signifies sb.dat load failure if ( nSeverity == -1 ) nSeverity = searchshield.XPLCHECK_RESULT_SEV_NONE; //blacklist url var blShortUrl = false; if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_BLOCK) { var shortUrl = searchshield.FilterUrl(href, this.shortened_urls); if (shortUrl) blShortUrl = true; } // need xlated cat tag and category if (parts.length < 3) return; // check the minimum to display if ((min_severity != null) && (nSeverity < min_severity)) return; if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_LOW && !this.showLowRiskVerdicts) { if (update) this.avg_ls_inline_hide_verdict(anchor); return; } if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_MED && !this.showMedRiskVerdicts) { if (update) this.avg_ls_inline_hide_verdict(anchor); return; } if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE && !this.showCleanVerdicts) { if (update) this.avg_ls_inline_hide_verdict(anchor); return; } if (update) this.update_inline_image(anchor, nSeverity, parts); else this.add_inline_image(doc, anchor, nSeverity, parts, blShortUrl); }; searchshield.SearchEngine.prototype.avg_ls_inline_hide_verdict = function (anchor) { var image = avglsinlineflyover.getImage(anchor); if (image) { image.style.display = "none"; if (image.parentNode && image.parentNode.id == "avg_ls_anch") image.parentNode.style.display = "none"; } }; searchshield.SearchEngine.prototype.update_inline_image = function (anchor, nSeverity, aRisk) { // update the image already in the page if (anchor && anchor.firstChild) { var html = ''; var image = ''; if (aRisk != null && nSeverity != null) { var riskCategory = aRisk[1]; var riskName = aRisk[2]; var bgColor = this.inline.color.background[nSeverity]; var borderColor = this.inline.color.border[nSeverity]; image = this.inline.image[nSeverity]; html = avglsinlineflyover.build(riskCategory, riskName, bgColor, borderColor); } var imageElem = anchor.firstChild; imageElem.src = image; if ( html && html.length > 0 )
{
imageElem.setAttribute(“title”, “”);
imageElem.attachEvent(“onmouseover”, function(e){avglsinlineflyover.popup(e, html, nSeverity)});
imageElem.attachEvent(“onmouseout”, function(e){avglsinlineflyover.hide(e)});
}
}
};

// add the image to the page
searchshield.SearchEngine.prototype.add_inline_image = function (doc, anchor, nSeverity, aRisk, blShortUrl)
{
if (anchor == null || anchor.parentNode == null)
return null;

// get the proper insertion point for the image
var insertNode = anchor.nextSibling;
while ((insertNode != null) &&
(insertNode.tagName != null) &&
(insertNode.tagName == “SPAN”))
{
insertNode= insertNode.nextSibling;
}

// see if we already have an image anchor
if ((insertNode != null) &&
(insertNode.id != null) &&
(insertNode.id == “avg_ls_anch”))
{
return null;
}

var html = ”;
var image = this.inline.clockImage;
if (aRisk != null && nSeverity != null)
{
var riskCategory = aRisk[1];
var riskName = aRisk[2];
var bgColor = this.inline.color.background[nSeverity];
var borderColor = this.inline.color.border[nSeverity];
image = this.inline.image[nSeverity];

var blUrl;
if (blShortUrl)
{
var aRiskName = riskName.split(‘:’);
var sUrl = searchshield.checkUrl(aRiskName[1]);

blUrl = {};
blUrl.riskNameLabel = aRiskName[0] + ‘: ‘;
blUrl.riskCategory = riskCategory;
blUrl.bgColor = bgColor;
blUrl.borderColor = borderColor;
blUrl.sUrl = sUrl;
}
else
{
html = avglsinlineflyover.build(riskCategory, riskName, bgColor, borderColor);
}
}

doc = anchor.ownerDocument;

var img = doc.createElement(“img”);
img.src = image;
img.setAttribute(“id”,”avg_ls_image”);
img.style.width = “12px”;
img.style.height = “12px”;
img.style.border = “none”;
img.style.padding = “0 3px”;
img.style.margin = “0”;

if ((html && html.length > 0) || (blUrl != undefined))
{
img.setAttribute(“title”, “”);
img.attachEvent(“onmouseover”, function(e){avglsinlineflyover.popup(e, html, nSeverity, blUrl)});
img.attachEvent(“onmouseout”, function(e){avglsinlineflyover.hide(e)});
}

// create the link element
var newAnchor = doc.createElement(“A”);
newAnchor.setAttribute(“id”, “avg_ls_anch”);
newAnchor.style.display = “inline-block”;
newAnchor.style.background = “none repeat scroll 0 0 transparent”;

newAnchor.appendChild(img);
img = null;

// insert the node as either a sibling or a child
if (insertNode != null)
anchor.parentNode.insertBefore(newAnchor, insertNode);
else
anchor.parentNode.appendChild(newAnchor);

return newAnchor;

};
//////////////// SEARCH ENGINE ////////////////

/////////////// GOOGLE SEARCH ENGINE ///////////////
searchshield.GoogleSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.onlyPrimaries = false;
};
searchshield.GoogleSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.GoogleSearchEngine.prototype.constructor = searchshield.GoogleSearchEngine;
searchshield.GoogleSearchEngine.prototype.name = “google”; // the name by which the search engine is known (always lowercase)
searchshield.GoogleSearchEngine.prototype.validSearch = function(href) {

var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var hostMatch = false;
var domain = uri.host;

// re stitch the uri path and query elements to
// use existing logic
var path = uri.path + uri.delimiter + uri.query;

// For Google the host must match:
// .google.com OR
// .google.com.XX OR
// .google.co.XX OR
// .google.XX where XX is a country code
// one special case is www.googe.off.ai (Anguilla)
// Where any subdomain can come before the top level domain
if ( /(.(?:google|mozilla).(?:com|(?:co|off).[a-z]{2}|[a-z]{2}))/i.test(domain) )
{
//check the path
if ((path.indexOf(“search?”) == 0) ||
(path.indexOf(“sponsoredlinks?”) == 0) ||
(path.indexOf(“webhp?”) == 0) ||
(path.indexOf(“webhp#”) == 0) ||
(path.indexOf(“#q=”) == 0) ||
(path.indexOf(“#hl=”) == 0) ||
(path.indexOf(“#sclient=”) == 0))
{
return true;
}
}

return false;
};
searchshield.GoogleSearchEngine.prototype.includeLink = function(tag)
{
var href = “”;
var outHref = false;
var findStr = “”;

// check for interstitials
if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
{
findStr = this.search.uri.host + “/interstitial?”;
if (tag.className == “l” && tag.href)
{
if (tag.href.indexOf(findStr) != -1)
{
findStr = “?url=”;
var pos = tag.href.indexOf(findStr);
if (pos !== -1)
{
pos += 5;
outHref = tag.href.substring(pos);
if (searchshield.FilterUrl(outHref, this.filter_urls))
return false;

return outHref;
}
}
}

if (tag.className == “sla”)
{
findStr = “/url?q=”;
urlPos = tag.href.indexOf(findStr);
if (urlPos != -1)
{
urlPos += 7;
outHref = tag.href.substring(urlPos);
return outHref;
}
}

// if an ad id
if ((tag.id.indexOf(“pa”) == 0) || (tag.id.indexOf(“an”) == 0) ||
(tag.className == “resultLink”))
{
var urlPos = -1;

// ads now need unescaping
href = unescape(tag.href);

findStr= “/url?sa=”;
if (href.indexOf(findStr) != -1)
{ // first kind, locate real url
findStr= “&q=http”;
urlPos = href.indexOf(findStr);
if (urlPos != -1)
urlPos += 3; // puts it on the http
}
if (urlPos == -1)
{
findStr = “/pagead/iclk?sa=”;
if (href.indexOf(findStr) != -1)
{ // second kind, locate real url
findStr = “&adurl=http”;
urlPos = href.indexOf(findStr);
if (urlPos != -1)
urlPos += 7; // puts it on the http
}
}
if (urlPos == -1)
{
if (href.indexOf(“/aclk?sa=”) != -1)
{ // third kind
urlPos = href.indexOf(“&q=http”);
if (urlPos != -1)
urlPos += 3; // puts it on the http
else
{
urlPos = href.indexOf(“&lp=http”);
if (urlPos != -1)
urlPos += 4;
else
{
findStr = “&adurl=http”;
urlPos = href.indexOf(findStr);
if (urlPos != -1)
urlPos += 7; // puts it on the http
}

}
}
}
if (urlPos == -1)
{
if (href.indexOf(“/url?cad=”) != -1)
{ // fourth kind
urlPos = href.indexOf(“&q=http”);
if (urlPos != -1)
urlPos += 3; // puts it on the http
}
}
if (urlPos != -1)
{
outHref = href.substring(urlPos);

// the destination url is in the href string of this redirector
if (outHref.indexOf(‘xg4ken.com’) > -1)
{
urlPos = (unescape(outHref)).indexOf(‘url[]=’) + 6;
var destUrl = (unescape(outHref)).substring(urlPos);
if (searchshield.FilterUrl(destUrl, this.filter_urls))
{
var destUrl = searchshield.getHrefFromCiteElement(tag);
if (destUrl)
return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));

return false;
}

return destUrl;
}

// filtered url but can get destination from href string
if (outHref.indexOf(‘altfarm.mediaplex.com’) > -1)
{
var tmpoh = unescape(outHref);
var destUrl = tmpoh.substring(tmpoh.indexOf(‘DURL=’)+5);
if (destUrl != null)
{
var destUrl = unescape(destUrl);
return destUrl;
}
}

// extract any fragment text, shouldn’t be unescaped
var pound = outHref.indexOf(“#”);
if (pound != -1)
{
var fragment = outHref.substring(pound);
outHref = outHref.substring(0, pound);
outHref = unescape(outHref);
outHref += fragment;
if (searchshield.FilterUrl(outHref, this.filter_urls))
return false;

return outHref;
}

outHref = unescape(outHref);
if (outHref.indexOf(“?”) == -1)
{
var ampPos = outHref.indexOf(“&”);
if (ampPos != -1)
outHref = outHref.substring(0, ampPos);
}

if (searchshield.FilterUrl(outHref, this.filter_urls))
{
var destUrl = searchshield.getHrefFromCiteElement(tag);
if (destUrl)
return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));

return false;
}

return outHref;
}
}

// recommended link – use following to see one
// http://www.google.cz/search?hl=cs&q=warey&btnG=Hledat&lr=lang_cs
// elem parent class = r
// href must contain – url? and q=http
var parentNode = tag.parentNode;
if (parentNode && (parentNode.className.toLowerCase() == “r”))
{
href = tag.href;
if (href && (href.indexOf(“/url?”) != -1))
{
// locate the real url
var urlPos = href.indexOf(“q=http”);
if (urlPos != -1)
{
urlPos += 2;
outHref = href.substring(urlPos);

// include entire param up to ‘&’
var ampPos = outHref.indexOf(“&”);
if (ampPos != -1)
outHref = outHref.substring(0, ampPos);

return outHref;
}
}
}
}
// no link to self
else if (tag.className && (tag.className.charAt(0) == “l” || tag.className == “sla”))
{
// check for any images on the link
if (0 === tag.getElementsByTagName(“IMG”).length)
return tag.href;
}
// special case for ie6 results
else if (searchshield.docMode == 6 || searchshield.docMode == 7)
{
var parentNodeClass = tag.parentNode ? tag.parentNode.className : ”;
if ((tag.className == ”) && (parentNodeClass == ‘r’))
{
return tag.href;
}
}

// else nothing
return false;
};
/////////////// GOOGLE ///////////////

/////////////// AVG GOOGLE SEARCH ENGINE ///////////////
searchshield.AVGGoogleSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.onlyPrimaries = false;
};
searchshield.AVGGoogleSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.AVGGoogleSearchEngine.prototype.constructor = searchshield.AVGGoogleSearchEngine;
searchshield.AVGGoogleSearchEngine.prototype.name = “avggoogle”; // the name by which the search engine is known (always lowercase)
searchshield.AVGGoogleSearchEngine.prototype.validSearch = function(href) {

var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain = uri.host;

// re stitch the uri path and query elements to
// use existing logic
var path = uri.path + uri.delimiter + uri.query;

if (domain.indexOf(“search.avg.com”) > -1)
{ // ads link back to google
return true;
}

return false;
};
searchshield.AVGGoogleSearchEngine.prototype.includeLink = function(tag)
{
var outHref = false;
var findStr = “”;

// check for interstitials
if (searchshield.DoesURLContain(tag.href, “google.com”))
{
// link back to self – DIV elem GrandParent class of res1 or res3 is Sponsored Link
var parentNode = tag.parentNode;
if (parentNode)
{
var grandParentNode = tag.parentNode.parentNode;
if (grandParentNode)
{
if ((grandParentNode.tagName == “DIV”) &&
((grandParentNode.className.toLowerCase() == “res1”) ||
(grandParentNode.className.toLowerCase() == “res3”)))
{
var urlPos = -1;

// ads now need unescaping
href = unescape(tag.href);

if (urlPos == -1)
{
if (href.indexOf(“/aclk?sa=”) != -1)
{
findStr = “&adurl=http”;
urlPos = href.indexOf(findStr);
if (urlPos != -1)
urlPos += 7; // puts it on the http

}
}
if (urlPos != -1)
{
outHref = href.substring(urlPos);

// the destination url is in the href string of this redirector
if (outHref.indexOf(‘xg4ken.com’) > -1)
{
urlPos = (unescape(outHref)).indexOf(‘url[]=’) + 6;
var destUrl = (unescape(outHref)).substring(urlPos);
if (searchshield.FilterUrl(destUrl, this.filter_urls))
{
var destUrl = searchshield.getHrefFromCiteElement(tag);
if (destUrl)
return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));

return false;
}

return destUrl;
}

// filtered url but can get destination from href string
if (outHref.indexOf(‘altfarm.mediaplex.com’) > -1)
{
var tmpoh = unescape(outHref);
var destUrl = tmpoh.substring(tmpoh.indexOf(‘DURL=’)+5);
if (destUrl != null)
{
var destUrl = unescape(destUrl);
return destUrl;
}
}

// extract any fragment text, shouldn’t be unescaped
var pound = outHref.indexOf(“#”);
if (pound != -1)
{
var fragment = outHref.substring(pound);
outHref = outHref.substring(0, pound);
outHref = unescape(outHref);
outHref += fragment;
if (searchshield.FilterUrl(outHref, this.filter_urls))
return false;

return outHref;
}

outHref = unescape(outHref);
if (outHref.indexOf(“?”) == -1)
{
var ampPos = outHref.indexOf(“&”);
if (ampPos != -1)
outHref = outHref.substring(0, ampPos);
}

if (searchshield.FilterUrl(outHref, this.filter_urls))
{
var destUrl = searchshield.getHrefFromCiteElement(tag);
if (destUrl)
return searchshield.checkUrl(searchshield.removeHtmlTags(destUrl));

return false;
}

return outHref;
}
}
}
}
}

// no link to self
else
{
var parentNode = tag.parentNode;
if (parentNode)
{
var grandParentNode = tag.parentNode.parentNode;
if (grandParentNode)
{
if ((grandParentNode.tagName == “DIV”) &&
(grandParentNode.className.toLowerCase() == “res2”))
{
// check for any images on the link
if (0 === tag.getElementsByTagName(“IMG”).length)
return tag.href;
}
}
}
}

// else nothing
return false;
}
/////////////// AVG GOOGLE ///////////////

/////////////// YAHOO SEARCH ENGINE ///////////////
searchshield.YahooSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.showCleanVerdicts = false;
};
searchshield.YahooSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.YahooSearchEngine.prototype.constructor = searchshield.YahooSearchEngine;
searchshield.YahooSearchEngine.prototype.name = “yahoo”;
searchshield.YahooSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain = uri.host;

// re stitch the uri path and query elements to
// use existing logic
var path = uri.path + uri.delimiter + uri.query;

// For Yahoo the host must match:
// search.yahoo.com OR
// xx.search.yahoo.com where xx is the country code OR
// search.yahoo.co.jp OR
// for Yahoo China: one.cn.yahoo.com, search.cn.yahoo.com or www.yahoo.cn
if ((domain.match(/search.yahoo.co(?:m|.jp)/i) ||
domain.match(/(?:search|one).cn.yahoo.com/i) ||
domain.match(/www.yahoo.cn/i)) &&
path.match(/^(?:search[;?]|s?)/i))
{
return true;
}

return false;
};
searchshield.YahooSearchEngine.prototype.includeLink = function(tag)
{
var href = “”;
var outHref = “”;
var findStr = “”;

// yahoo likes to encode the url
href = unescape(tag.href);

if ((tag.className.indexOf(“yschttl”) != -1) ||
(tag.className.indexOf(“spt”) != -1))
{
var da = href.indexOf(“**”);
var ad = href.indexOf(“*-“);
if (da != -1)
outHref = href.substring(da+2);
else if (ad != -1)
outHref = href.substring(ad+2);
else
outHref = href ;

if (outHref.toLowerCase().indexOf(“overture.”) !== -1)
return false;
}
else if ((tag.tagName) &&
(tag.tagName === “A”) &&
(!tag.className))
{
var tagParent = tag.parentNode;

// if anchor without className then search parentNodes
if ((tagParent) &&
(tagParent.tagName !== “EM”) &&
(searchshield.getParentNodeByClassName(“yst-web”, tag, 4)))
{
// China Yahoo support
outHref = href;
}

else if ((tagParent) &&
(tagParent.tagName === “H3”) &&
(!!searchshield.getParentNodeById(“WS2m”,tag, 5)))
{
// Japan Yahoo support
var da = href.indexOf(“**”);
if (da == -1)
outHref = href;
else
outHref = href.substring(da+2);
}

else if ((tagParent) &&
(tagParent.className !== “c”) &&
(tagParent.parentNode.id !== “fpn”) &&
(!!searchshield.getParentNodeByClassName(“ymc”, tag, 7)))
{
// Korea Yahoo support – when not caught by yschttl
var da = href.indexOf(“**”);
if (da !== -1)
outHref = href.substring(da+2);
}
}
else if (!this.onlyPrimaries)
{
findStr = “&yargs=”;
var yargs = href.indexOf(findStr);
if (yargs != -1)
{
outHref = href.substring(yargs+findStr.length);
// check for prefix
if (outHref.indexOf(“://”) == -1)
outHref = “http://” + outHref;

// if inside an , probably a paypal link, don’t include
if (tag.parentNode && (tag.parentNode.tagName == “I”))
return false;
}
}

// filter domains
// split the url based on ‘/’
var parts = !!outHref ? outHref.split(‘/’) : null;

// Filter out domains that match any of the search engine’s names
if (!parts || !parts[2])
return false;

var domain = parts[2];
if ((domain.indexOf(“rdrjp.yahoo.com”) != -1) ||
(domain.indexOf(“rdrkrs.yahoo.com”) != -1) ||
(domain.indexOf(“rdrtpe.yahoo.com”) != -1) ||
(domain.indexOf(“rdrird.yahoo.com”) != -1) ||
(domain.indexOf(“rdrhk2.yahoo.com”) != -1) ||
(domain.indexOf(“rdrsg1.yahoo.com”) != -1) ||
(domain.indexOf(“rdrin2.yahoo.com”) != -1) ||
(domain.indexOf(“rdre1.yahoo.com”) != -1) ||
(domain.indexOf(“rdrw1.yahoo.com”) != -1) )
{
return false;
}

// set for yahoo to get parent node for image insertion
var hash = searchshield.avgCallFunc(this.doc, ‘GetHash’, outHref);
tag.setAttribute(“id”, “xplid_” + hash);
return outHref;
};
/////////////// YAHOO SEARCH ENGINE ///////////////

/////////////// AVG YAHOO SEARCH ENGINE ///////////////
searchshield.AVGYahooSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.showCleanVerdicts = false;
this.omitAltImage = true;

this.updateImageStyle = {
verticalAlign: null
};
};
searchshield.AVGYahooSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.AVGYahooSearchEngine.prototype.constructor = searchshield.AVGYahooSearchEngine;
searchshield.AVGYahooSearchEngine.prototype.name = “avgyahoo”;
searchshield.AVGYahooSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;
//path may be ‘avg/search’ or ‘search’
var pathArray = uri.path.split(“/”);
var avg = pathArray[0];
// re stitch the uri path and query elements
// to use existing logic
var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1];
path += uri.delimiter + uri.query;

// For AVG Yahoo classic the host must match:
// yhs.search.yahoo.com OR
// .yhs.search.yahoo.com
if (domain.indexOf(“yhs.search.yahoo.co”) != -1)
{
if ((avg == “avg”) &&
((path.indexOf(“search?”) == 0) ||
(path.indexOf(“search;”) == 0)))
{
return true;
}
}

// also support new metro version which DOESN’T
// contain /avg so avg split part is path
// valid domains are:
// search.yahoo.com,
// xx.search.yahoo.com and
// search.yahoo.co.xx
if (domain.indexOf(“search.yahoo.co”) != -1)
{
// path (split avg) must start with search and
// contain the avg toolbar parameter
if (((path.indexOf(“search?”) == 0) ||
(path.indexOf(“search;”) == 0)) &&
(path.indexOf(“fr=yhs-avg”) != -1))
{
return true;
}
}

return false;
};
searchshield.AVGYahooSearchEngine.prototype.includeLink = function(tag)
{
var href = “”;
var outHref = “”;
var findStr = “”;

if (this.search.doc.body.className.toLowerCase() != “standard”)
{ // handle as std Yahoo results page
return searchshield.YahooSearchEngine.prototype.includeLink(tag);
}

// yahoo likes to encode the url
href = unescape(tag.href);

if (tag.target == “_top”)
{
var da = href.indexOf(“**”);
if (da != -1)
outHref = href.substring(da+2);
else
outHref = href ;

if (outHref.toLowerCase().indexOf(“overture.”) !== -1)
return false;
}
else if (!this.onlyPrimaries)
{
findStr = “&yargs=”;
var yargs = href.indexOf(findStr);
if (yargs != -1)
{
outHref = href.substring(yargs+findStr.length);
// check for prefix
if (outHref.indexOf(“://”) == -1)
outHref = “http://” + outHref;

// if inside an , probably a paypal link, don’t include
if (tag.parentNode && (tag.parentNode.tagName == “I”))
return false;
}
}

// filter domains
// split the url based on ‘/’
var parts = outHref.split(‘/’);

// Filter out domains that match any of the search engine’s names
if (!parts[2])
return false;

var domain = parts[2];
if ((domain.indexOf(“rdrjp.yahoo.com”) != -1) ||
(domain.indexOf(“rdrkrs.yahoo.com”) != -1) ||
(domain.indexOf(“rdrtpe.yahoo.com”) != -1) ||
(domain.indexOf(“rdrird.yahoo.com”) != -1) ||
(domain.indexOf(“rdrhk2.yahoo.com”) != -1) ||
(domain.indexOf(“rdrsg1.yahoo.com”) != -1) ||
(domain.indexOf(“rdrin2.yahoo.com”) != -1) ||
(domain.indexOf(“rdre1.yahoo.com”) != -1) ||
(domain.indexOf(“rdrw1.yahoo.com”) != -1) )
{
return false;
}

return outHref;
};
/////////////// AVG YAHOO SEARCH ENGINE ///////////////

/////////////// MSN SEARCH ENGINE ///////////////
searchshield.MSNSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.onlyPrimaries = false;
};
searchshield.MSNSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.MSNSearchEngine.prototype.constructor = searchshield.MSNSearchEngine;
searchshield.MSNSearchEngine.prototype.name = “msn”;
searchshield.MSNSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var hostMatch = false;
var domain = uri.host;

// re stitch the uri path and query elements to
// use existing logic
var path = uri.path + uri.delimiter + uri.query;

// For MSN the host must match:
// search.msn.com OR
// search.live.com
if (domain.indexOf(“search.msn.co”) > -1)
{
if (domain.charAt(13) == ‘m’)
hostMatch = true;
else if ((domain.charAt(13) == ‘.’) && (domain.length == 16))
hostMatch = true;
}
else if (domain.indexOf(“search.live.co”) > -1)
{
if (domain.charAt(14) == ‘m’)
hostMatch = true;
else if ((domain.charAt(14) == ‘.’) && (domain.length == 17))
hostMatch = true;
}

if (hostMatch)
{
if (path.indexOf(“results.aspx”) == 0)
return true;
}

return false;
};
searchshield.MSNSearchEngine.prototype.includeLink = function(tag)
{
var outHref = false;

// these don’t seem common from Firefox, but they are in IE
if (searchshield.DoesURLContain(tag.href, “g.msn.co”))
{
var qPos = tag.href.indexOf(“?”);
if (qPos != -1)
{
var postPart = tag.href.substring(qPos+1);
var dblAmp = postPart.indexOf(“&&”);
if (dblAmp != -1)
{
outHref = postPart.substring(0, dblAmp);
return outHref;
}
}
}
else if (searchshield.DoesURLContain(tag.href, “r.msn.co”))
{
var element = tag;
var parentNode = tag.parentNode;

// top links – check for a CITE
var spanElements = element.getElementsByTagName(“CITE”);
if ((spanElements != null) &&
(spanElements.length > 0))
{
outHref = spanElements[0].innerHTML;
// replace any nbsp’s
outHref = outHref.replace(” “, ” “);

// url is after the last space in the html, after the ‘-‘
var space_pos = outHref.lastIndexOf(” “);
if (space_pos != -1)
outHref = outHref.slice(space_pos + 1);

outHref = searchshield.checkUrl(outHref);
return outHref;
}

// side links
if (element.lastChild != null)
{
outHref = element.lastChild.innerHTML;
if ( outHref != null)
{
outHref = searchshield.checkUrl(outHref);
return outHref;
}
}
}
else if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||
searchshield.DoesURLContain(tag.href, “.live.com”) ||
searchshield.DoesURLContain(tag.href, “msn.”) ||
searchshield.DoesURLContain(tag.href, “msnscache.com”) ||
searchshield.DoesURLContain(tag.href, “advertising.microsoft.co”) ||
searchshield.DoesURLContain(tag.href, “javascript:”) ||
searchshield.DoesURLContain(tag.href, “go.microsoft.co”) ||
searchshield.DoesURLContain(tag.href, “hotmail.co”))
{
// not a link
return false;
}
else if (tag.id.toLowerCase() == “trademarks”)
{
// don’t link the trademark at the bottom of the page
return false;
}
else
{
// include it
return tag.href;
}
};
/////////////// MSN SEARCH ENGINE ///////////////

/////////////// BING SEARCH ENGINE ///////////////
searchshield.BingSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
};
searchshield.BingSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.BingSearchEngine.prototype.constructor = searchshield.BingSearchEngine;
searchshield.BingSearchEngine.prototype.name = “bing”;
searchshield.BingSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var hostMatch = false;
var domain = uri.host;

// re stitch the uri path and query elements to
// use existing logic
var path = uri.path + uri.delimiter + uri.query;

// For bing the host must match:
// www.bing.com or www.bing.net
// xx.bing.com or xx.bing.net where xx is a country code
// bing.com.xx where xx is a country code
// bing.search.xxxx.net where xxxx may be something like daum
if ((domain.indexOf(“www.bing.com”) !== -1) ||
(domain.indexOf(“www.bing.net”) !== -1) ||
(domain.indexOf(“bing.net”) !== -1))
{
hostMatch = true;
}
else if ((domain.indexOf(“bing.search.”) !== -1) &&
(domain.indexOf(“.net”) === (domain.length-4)))
{ //bing.search.xxxx.net
hostMatch = true;
}
else
{ // xx.bing.com or bing.com.xx
var domainLen = domain.length;
var tldPos = domain.indexOf(“.bing.com”);
if (tldPos > -1)
{
if ((domainLen – tldPos) == 9)
hostMatch = true;
}
}

if (hostMatch)
{
var displayStyle = (domain == ‘bing.search.daum.net’) ? ‘inline-block’ : ‘inline’;
this.addAnchorStyle = {
display: displayStyle
};

if (path.indexOf(“search?”) == 0)
return true;
}

return false;

};
searchshield.BingSearchEngine.prototype.includeLink = function(tag)
{
var outHref = false;

if (tag.tagName == ‘IMG’)
{ //no images
return false;
}

if (tag.href.charAt(0) == ‘/’)
{ //no relative links
return false;
}

if (/trademarks/i.test(tag.id))
{
// don’t link the trademark at the bottom of the page
return false;
}

if ((tag.parentNode) && (/sc_stc/i.test(tag.parentNode.id)))
{ // don’t verdict the social sites – our verdict doesn’t fit
return false;
}
else if (!!searchshield.getParentNodeByClassName(“sw_t”,tag,3))
{ // no links in page header
return false;
}
else if (searchshield.DoesURLContain(tag.href, “r.msn.co”) ||
searchshield.DoesURLContain(tag.href, “overture.com”))
{ // france has r.msn.co and italy has overture.com sponsored links
// with the link in CITE element

var spanElements = null;

// top links – check for a CITE
spanElements = tag.getElementsByTagName(“CITE”);
if ((spanElements == null) || (spanElements.length 0))
{
outHref = spanElements[0].innerHTML;
if (outHref != null)
{
// replace any nbsp’s
outHref = outHref.replace(” “, ” “);

// url is after the last space in the html, after the ‘-‘
var space_pos = outHref.lastIndexOf(” “);
if (space_pos != -1)
outHref = outHref.slice(space_pos + 1);

outHref = searchshield.checkUrl(outHref);

// save the link
return outHref;
}
}

// side links
if (tag.lastChild != null)
{
outHref = tag.lastChild.innerHTML;
if (outHref != null)
{
outHref = searchshield.checkUrl(outHref);
// save the link
return outHref;
}
}
}
// no sponsored links for now
else if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||
searchshield.DoesURLContain(tag.href, “.live.com”) ||
searchshield.DoesURLContain(tag.href, “.bing.com”) ||
searchshield.DoesURLContain(tag.href, “.bing.net”) ||
searchshield.DoesURLContain(tag.href, “.daum.net”) ||
searchshield.DoesURLContain(tag.href, “.gmarket.co”) ||
searchshield.DoesURLContain(tag.href, “.multimap.com”) ||
searchshield.DoesURLContain(tag.href, “msn.”) ||
searchshield.DoesURLContain(tag.href, “ms.ciao.”) ||
searchshield.DoesURLContain(tag.href, “ms.ciao-“) ||
searchshield.DoesURLContain(tag.href, “advertising.microsoft.co”) ||
searchshield.DoesURLContain(tag.href, “javascript:”) ||
searchshield.DoesURLContain(tag.href, “go.microsoft.co”) ||
searchshield.DoesURLContain(tag.href, “hotmail.co”) ||
searchshield.DoesURLContain(tag.href, “cc.bingj.com”) ||
searchshield.DoesURLContain(tag.href, “microsofttranslator.com”) ||
searchshield.DoesURLContain(tag.href, “.engkoo.com”) ||
searchshield.DoesURLContain(tag.href, “sealinfo.verisign.com”) ||
searchshield.DoesURLContain(tag.href, “explabs.com”) ||
searchshield.DoesURLContain(tag.href, “onlinehelp.microsoft.com”) ||
searchshield.DoesURLContain(tag.href, “.myoverture”))
{
// not a link
return false;
}
else
return tag.href;
};
searchshield.BingSearchEngine.prototype.addImage = function(node, image, hidden)
{
var element = node.element;
var parentNode = node.element.parentNode;
var grandParentNode = !!parentNode ? parentNode.parentNode : null;

// if there are redundant links in the same grandparent then skip them
if (!!grandParentNode)
{
gpChildren = grandParentNode.childNodes;
for (var i=0; i < gpChildren.length; i++) { if (!!element.href && gpChildren[i].tagName == "A" && gpChildren[i].href == element.href) return; } } var parent = searchshield.SearchEngine.prototype.addImage; return parent.call(this, node, image, hidden); }; /////////////// BING SEARCH ENGINE /////////////// /////////////// BAIDU SEARCH ENGINE /////////////// searchshield.BaiduSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.updateImageStyle = { verticalAlign: null }; }; searchshield.BaiduSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.BaiduSearchEngine.prototype.constructor = searchshield.BaiduSearchEngine; searchshield.BaiduSearchEngine.prototype.name = "baidu"; searchshield.BaiduSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var hostMatch = false; var domain = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; if (domain == "www.baidu.com" || path.indexOf("testBaidu") !== -1) hostMatch = true; if (hostMatch) { if (path.indexOf("s?") == 0) return true; } return false; }; searchshield.BaiduSearchEngine.prototype.includeLink = function(tag) { if (tag.className && tag.className == "m") return false; if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; else { // no link to self var traverseElement = tag.parentNode; while ( traverseElement && traverseElement.className != "tbody") { if (traverseElement.className == "f") return tag.href; traverseElement = traverseElement.parentNode; } return false; } }; /////////////// BAIDU SEARCH ENGINE /////////////// /////////////// EARTHLINK SEARCH ENGINE /////////////// searchshield.EarthlinkSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.onlyPrimaries = false; this.addAnchorStyle = { position: "static" }; }; searchshield.EarthlinkSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.EarthlinkSearchEngine.prototype.constructor = searchshield.EarthlinkSearchEngine; searchshield.EarthlinkSearchEngine.prototype.name = "earthlink"; searchshield.EarthlinkSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var hostMatch = false; var domain = uri.host; // re stitch the uri path and query elements to // use existing logic var path = uri.path + uri.delimiter + uri.query; // For EarthLink the host must match: // search.earthlink.net if (("search.earthlink.net" == domain) && (path.indexOf("search?") == 0)) { return true; } return false; }; searchshield.EarthlinkSearchEngine.prototype.includeLink = function(tag) { var outHref = ""; var findStr = ""; // check for an anchor if (tag.tagName == "A") { // check for sponsored if (tag.id.indexOf("a") == 0) { var q = tag.href.indexOf("&q="); var qlen = 3; if (q == -1) { q = tag.href.indexOf("&adurl="); qlen = 7; if (q == -1) return false; } // find end of url var end = tag.href.indexOf("&", q+qlen); if (end < 0) end = tag.href.length; // add the link outHref = tag.href.substring(q+qlen, end); if (searchshield.FilterUrl(outHref, this.filter_urls)) return false; return outHref; } // don't search url's to self if ((tag.href.indexOf("://") == -1) || searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; // if a normal web result add it if (tag.parentNode && (tag.parentNode.tagName == "H3") && tag.parentNode.parentNode && (tag.parentNode.parentNode.tagName == "LI") && tag.parentNode.parentNode.parentNode && (tag.parentNode.parentNode.parentNode.tagName == "UL")) { if (searchshield.FilterUrl(tag.href, this.filter_urls)) return false; return tag.href; } } return false; }; /////////////// EARTHLINK SEARCH ENGINE /////////////// /////////////// AOL SEARCH ENGINE /////////////// searchshield.AOLSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); this.addImageStyle = { display: "inline" }; this.addAnchorStyle = { display: null }; this.updateImageStyle = { verticalAlign: null, display: "inline" }; }; searchshield.AOLSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.AOLSearchEngine.prototype.constructor = searchshield.AOLSearchEngine; searchshield.AOLSearchEngine.prototype.name = "aol"; searchshield.AOLSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain = uri.host; //path may be 'aol/search' or 'search' var pathArray = uri.path.split("/"); var aol = pathArray[0]; // re stitch the uri path and query elements // to use existing logic var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1]; path += uri.delimiter + uri.query; if (/search.aol.com/.test(domain)) { if ((aol == "aol") && (path.indexOf("search?") == 0)) { return true; } } return false; }; searchshield.AOLSearchEngine.prototype.includeLink = function(tag) { if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; // sponsored links - google if ((tag.className) && (tag.className.indexOf("slLink topAnchor") != -1)) { //parse for embedded href if (tag.href.indexOf("/aclk?sa=") == -1) return false; var adurl = tag.href.indexOf("&adurl=http"); // if an adurl the destination href can be acquired from the onclick handler if (adurl != -1) { var destUrl; var clickHandler = tag.getAttribute('onclick'); if (clickHandler != null) { // the destination href is the 2nd parameter (zero-based array) destUrl = searchshield.getClickHandlerParams(clickHandler)[1]; if (destUrl != null) { destUrl = searchshield.removeHtmlTags(destUrl.replace(/'/g,'')); return searchshield.checkUrl(destUrl); } } } return false; } if (tag.className == "find") return tag.href; return false; }; searchshield.AOLSearchEngine.prototype.insertNodes = function(node, doc) { var element = node.element; var score = node.score; if (element && element.className && element.className.indexOf("slLink") != -1) { //sponsored links only // for alt image if (score == searchshield.SCORE_SS_VERISIGN) return [element.nextSibling, element.parentNode]; // for verdict image var cN = element.childNodes; var cnLen = cN.length; for (var i=0; i < cnLen; i++) { if ((cN[i].nodeType == 1) && (cN[i].nodeName == 'SPAN') && ((cN[i].className == 'title') || (cN[i].className == 'durl'))) return [cN[i].nextSibling, cN[i].parentNode]; } } var parent = searchshield.SearchEngine.prototype.insertNodes; return parent.call(this, node, doc); }; /////////////// AOL SEARCH ENGINE /////////////// /////////////// ASK SEARCH ENGINE /////////////// searchshield.AskSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); }; searchshield.AskSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.AskSearchEngine.prototype.constructor = searchshield.AskSearchEngine; searchshield.AskSearchEngine.prototype.name = "ask"; searchshield.AskSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; if ("www.ask.com" == domain) { if (path.indexOf("web?") == 0) return true; } return false; }; searchshield.AskSearchEngine.prototype.includeLink = function(tag) { var outHref = ""; var findStr = ""; if (searchshield.DoesURLContain(tag.href, this.search.uri.host)) return false; if ((tag.className) && (tag.className.indexOf("nu") != -1) && (tag.className.indexOf("info") == -1)) { // exclude green links if ((tag.firstChild) && (tag.firstChild.className) && (tag.firstChild.className.indexOf('attrib') == 0)) { return false; } // ads link to google with class nu findStr = "www.google.com"; if (tag.href.indexOf(findStr) != 0) { if (tag.href.indexOf(findStr + "/aclk?sa=") != -1) { findStr = "&adurl=http"; var pos = tag.href.indexOf(findStr); if (pos != -1) { pos += 7; outHref = tag.href.substring(pos); outHref = unescape(outHref); if (searchshield.FilterUrl(outHref, this.filter_urls)) return false; return outHref; } } } else { // ad not to google just use href outHref = tag.href; if (searchshield.FilterUrl(outHref, this.filter_urls)) return false; return outHref; } } // primary results have class containing title or L2 ( Wikipedia links ) else if ((tag.className) && ((tag.className.indexOf("title") != -1) || (tag.className.toLowerCase() == "l2"))) { outHref = tag.href; if (searchshield.FilterUrl(outHref, this.filter_urls)) return false; return outHref; } return false; }; /////////////// ASK SEARCH ENGINE /////////////// /////////////// ALTAVISTA SEARCH ENGINE /////////////// searchshield.AltaVistaSearchEngine = function(search) { searchshield.SearchEngine.call(this, search); }; searchshield.AltaVistaSearchEngine.prototype = new searchshield.SearchEngine(); searchshield.AltaVistaSearchEngine.prototype.constructor = searchshield.AltaVistaSearchEngine; searchshield.AltaVistaSearchEngine.prototype.name = "altavista"; searchshield.AltaVistaSearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // re stitch the uri path and query elements // to use existing logic var path = uri.path + uri.delimiter + uri.query; // www.atlavista.com ---> now http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista&fr=altavista&itag=ody&q=warez&kgs=1&kls=0
// xx.altavista.com where xx is a country code
var hostMatch = false;
if (“www.altavista.com” == domain)
{
hostMatch = true;
}
else
{
// xx.altavista.com
var pDest = domain.indexOf(“.altavista.com”);
if ((pDest != -1 ) && ((domain.length – pDest) == 14))
{
hostMatch = true;
}
else
{
// a reference to altavista must be present in yahoo search url
var pRef = (uri.qsArray.fr && uri.qsArray.fr == ‘altavista’);
pDest = domain.indexOf(“search.yahoo.com”);
if (pDest != -1 && pRef)
hostMatch = true;
}
}

if (hostMatch)
{
//path must start with web/results?
if ((path.indexOf(“yhs/search?”) == 0) ||
(path.indexOf(“search;”) == 0) ||
(path.indexOf(“yhs/search;”) == 0) ||
(path.indexOf(“web/results?”) == 0)||
(path.indexOf(“fr=altavista”) != -1))
{
return true;
}
}

return false;
};
searchshield.AltaVistaSearchEngine.prototype.includeLink = function(tag)
{
var outHref = “”;
var findStr = “”;

// initial checks
if ((!tag.href) ||
(tag.href.charAt(0) == ‘#’) ||
(tag.href.indexOf(“javascript:”) == 0))
{
return false;
}

if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
return false;

var spnsdLinks = searchshield.getParentNodeByTagName(“DIV”, tag, “className”);
if ((spnsdLinks) &&
(spnsdLinks.className.indexOf(‘ads’) > -1)) // sponsored links
{
if (!tag.parentNode)
return false;

// parse ads for em tag
var baseNode;
if (spnsdLinks.className.indexOf(‘ads horiz’) > -1) // horizontal ads sections
baseNode = tag.parentNode.parentNode;
else
baseNode = tag.parentNode;

if (!baseNode || !baseNode.lastChild || baseNode.lastChild.tagName != ‘EM’)
return false;

var outHref = searchshield.removeHtmlTags(baseNode.lastChild.innerHTML);
return outHref;
}

if ((tag.className == “spt”) ||
(tag.className == “res”) ||
(tag.className == “yschttl spt”))
{
findStr = “/**”;
var pos = tag.href.indexOf(findStr);
if (pos != -1)
{
pos += 3;
outHref = tag.href.substring(pos);
outHref = unescape(outHref);

// no results for overture.com & no yahoo domains
chkHref = outHref.toLowerCase();
if (chkHref.indexOf(“overture.”) != -1)
return false;

// split the url based on ‘/’
var parts = outHref.split(‘/’);

// only need a domain
if ((parts != null) && (parts[2] != null))
{
var domain = parts[2];
if ((domain.indexOf(“rdrjp.yahoo.com”) != -1) ||
(domain.indexOf(“rdrkrs.yahoo.com”) != -1) ||
(domain.indexOf(“rdrtpe.yahoo.com”) != -1) ||
(domain.indexOf(“rdrird.yahoo.com”) != -1) ||
(domain.indexOf(“rdrhk2.yahoo.com”) != -1) ||
(domain.indexOf(“rdrsg1.yahoo.com”) != -1) ||
(domain.indexOf(“rdrin2.yahoo.com”) != -1) ||
(domain.indexOf(“rdre1.yahoo.com”) != -1) ||
(domain.indexOf(“rdrw1.yahoo.com”) != -1) )
{
return false
}
}

return outHref;
}
else
{
return tag.href;
}
}

return false;
};
searchshield.AltaVistaSearchEngine.prototype.getImgElement = function (element)
{
while (element != null)
{
element = element.nextSibling;
if (element != null)
{
if ((element.id == null) || (element.id.indexOf(“LXPLSS_”) == -1))
{ // not our id but hit another anchor no verdict
if (element.tagName == “A”)
{
element = null;
break;
}
}
else if (element.tagName == “A”)
break;
}
}

var rtnElem = !!element ? element.firstChild : element;
return rtnElem;
};
/////////////// ALTAVISTA SEARCH ENGINE ///////////////

/////////////// YANDEX SEARCH ENGINE ///////////////
searchshield.YandexSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
};
searchshield.YandexSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.YandexSearchEngine.prototype.constructor = searchshield.YandexSearchEngine;
searchshield.YandexSearchEngine.prototype.name = “yandex”;
searchshield.YandexSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;
// re stitch the uri path and query elements
// to use existing logic
var path = uri.path + uri.delimiter + uri.query;

if ((domain.match(/yandex.com|by|kz|ru|ua/i)) &&
(path.indexOf(“yandsearch?”) == 0))
{
return true;
}

return false;
};
searchshield.YandexSearchEngine.prototype.includeLink = function(tag)
{
if (tag.href.indexOf(“/search”) != -1)
{
return false;
}

if (searchshield.DoesURLContain(tag.href, this.search.uri.host) ||
searchshield.DoesURLContain(tag.href, “.yandex.net”) ||
searchshield.DoesURLContain(tag.href, “.yandex.ru”) ||
searchshield.DoesURLContain(tag.href, “moikrug.ru”) ||
searchshield.DoesURLContain(tag.href, “ya.ru”) ||
searchshield.DoesURLContain(tag.href, “.yandex.com”) ||
searchshield.DoesURLContain(tag.href, “yandex.st”))
{
return false;
}

parentNode = tag.parentNode;
if ((tag.parentNode) &&
(tag.parentNode.parentNode) &&
(tag.parentNode.parentNode.className.toLowerCase() == “moreinfo”))
{
return false;
}

return tag.href;
};
searchshield.YandexSearchEngine.prototype.getImgElement = function (element)
{
while (element != null)
{
element = element.nextSibling;
if (element != null)
{
if ((element.id == null) || (element.id.indexOf(“LXPLSS_”) == -1))
{ // not our id but hit another anchor no verdict
if (element.tagName == “A”)
{
element = null;
break;
}
}
else if (element.tagName == “A”)
break;
}
}

var rtnElem = !!element ? element.firstChild : element;
return rtnElem;
};
/////////////// YANDEX SEARCH ENGINE ///////////////

/////////////// SEZNAM SEARCH ENGINE ///////////////
searchshield.SeznamSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);

this.elementAttribute = {
width: “18”,
height: “18”
};

this.updateImageStyle = {
width: “18px”,
height: “18px”
};
};
searchshield.SeznamSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.SeznamSearchEngine.prototype.constructor = searchshield.SeznamSearchEngine;
searchshield.SeznamSearchEngine.prototype.name = “seznam”;
searchshield.SeznamSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;
// re stitch the uri path and query elements
// to use existing logic
var path = uri.path + uri.delimiter + uri.query;

if ((domain.indexOf(“search.seznam.cz”) > -1) &&
((path.indexOf(“?”) == 0) || (path.indexOf(“svet”) == 0)))
{
return true;
}

return false;
};
searchshield.SeznamSearchEngine.prototype.includeLink = function(tag)
{
if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
return false;

var parentNode = tag.parentNode;
if (parentNode)
{
var grandParentNode = tag.parentNode.parentNode;
if ((parentNode.tagName == “SPAN”) &&
((parentNode.className.toLowerCase() == “sklik-url”) ||
(parentNode.className.toLowerCase() == “sklik-title”)))
{ // locate the real url and unencode it
var urlPos = tag.href.indexOf(“&url=http”);

if (urlPos != -1)
{
urlPos += 5;
outHref = tag.href.substring(urlPos);
outHref = unescape(outHref);

return outHref;
}
}
else if (grandParentNode)
{
var greatGrandParentNode = tag.parentNode.parentNode.parentNode;
if ((grandParentNode.tagName == “DIV”) &&
((grandParentNode.className.toLowerCase() == “text”) || (grandParentNode.className.toLowerCase() == “hlasky otz”)))
{ // standard link
return tag.href;
}
else if (greatGrandParentNode && greatGrandParentNode.tagName == “DIV” &&
(greatGrandParentNode.className.toLowerCase() == “hotlinks”))
{ // hint link
return tag.href;
}

}
}

return false;
};
/////////////// SEZNAM SEARCH ENGINE ///////////////

/////////////// WEBHLEDANI SEARCH ENGINE ///////////////
searchshield.WebhledaniSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
};
searchshield.WebhledaniSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.WebhledaniSearchEngine.prototype.constructor = searchshield.WebhledaniSearchEngine;
searchshield.WebhledaniSearchEngine.prototype.name = “webhledani”;
searchshield.WebhledaniSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;
// re stitch the uri path and query elements
// to use existing logic
var path = uri.path + uri.delimiter + uri.query;

if ((domain.indexOf(“webhledani.cz”) > -1) &&
(path.indexOf(“results.aspx?”) == 0))
{
return true;
}

return false;
};
searchshield.WebhledaniSearchEngine.prototype.includeLink = function(tag)
{
if (tag.href.indexOf(“/redir.aspx?”) != -1)
{
var ancestorNode;

// sponsored link
if ((ancestorNode = searchshield.getParentNodeByClassName(“results sponsored”, tag, 3)) != null)
{
if ((ancestorNode = searchshield.getParentNodeByClassName(“res1”, tag, 2)) != null)
{

var spanSibling = ancestorNode.nextSibling;
while (spanSibling.nodeName != ‘SPAN’)
{
spanSibling = spanSibling.nextSibling;
if (spanSibling.nodeName == ‘DIV’ || spanSibling.className == ‘res1’)
{
spanSibling = null;
break;
}
}

if (spanSibling)
outHref = spanSibling.innerHTML;
}

if (outHref)
return searchshield.checkUrl(searchshield.removeHtmlTags(outHref));
}

if ((ancestorNode = searchshield.getParentNodeByClassName(“right-sponsored”, tag, 3)) != null)
{
var outHref;

if ((ancestorNode = searchshield.getParentNodeByClassName(“res3”, tag, 2)) != null)
{

var spanSibling = ancestorNode.nextSibling;
while (spanSibling.nodeName != ‘SPAN’)
{
spanSibling = spanSibling.nextSibling;
if (spanSibling.nodeName == ‘DIV’ || spanSibling.className == ‘res3’)
{
spanSibling = null;
break;
}
}

if (spanSibling)
outHref = spanSibling.innerHTML;
}

if (outHref)
return searchshield.checkUrl(searchshield.removeHtmlTags(outHref));
}

// result link
if (searchshield.getParentNodeByClassName(“results”, tag, 3) != null)
{
if ((ancestorNode = searchshield.getParentNodeByClassName(“res2”, tag, 2)) != null)
{
if (tag.parentNode && (tag.parentNode.nodeName != ‘P’))
return getLinkHref(ancestorNode);
}
}
}

return false;

function getLinkHref(aNode)
{
var spanElems = aNode.getElementsByTagName(‘span’);
for (var i=0; i < spanElems.length; i++) { if (spanElems[i].className != 'site') continue; var outAnchor = spanElems[i].getElementsByTagName('a')[0]; if (outAnchor == null) outAnchor = spanElems[i]; return searchshield.checkUrl(searchshield.removeHtmlTags(outAnchor.innerHTML)); } return false; } }; /////////////// WEBHLEDANI SEARCH ENGINE /////////////// /////////////// EBAY SEARCH ENGINE /////////////// searchshield.eBaySearchEngine = function(search) { searchshield.SearchEngine.call(this, search); }; searchshield.eBaySearchEngine.prototype = new searchshield.SearchEngine(); searchshield.eBaySearchEngine.prototype.constructor = searchshield.eBaySearchEngine; searchshield.eBaySearchEngine.prototype.name = "ebay"; searchshield.eBaySearchEngine.prototype.validSearch = function(href) { var uri; if (typeof(this.search) === 'undefined' || null === this.search) uri = searchshield.parseLink(href); else uri = this.search.uri; if(!uri || !uri.host) return false; var domain= uri.host; // shop.ebay.xx // shop.xxxx.ebay.xx like shop.benl.ebay.be // search.auction.co.kr var path = uri.path + uri.delimiter + uri.query; if ((domain.indexOf("shop.ebay") > -1) ||
(domain.indexOf(“shop.benl.ebay”) > -1))
{
if ((path.indexOf(“?_from=”) == 0) ||
(path.indexOf(“i.html”) > -1))
{
return true;
}
}

// ebay.se
if ((domain.indexOf(“search.eim.ebay”) > -1) &&
((path.indexOf(“?kw=”) > -1) || (path.indexOf(“?ev=”) > -1)))
{
return true;
}

if ((domain.indexOf(“search.auction.co.kr”) > -1 ) &&
((path.indexOf(“?keyword=”) > -1)))
{
// would normally set these properties in the constructor or in an
// overriding function but they’re only required for this domain

// links are in iframes
this.processFrames = true;

// must downsize verdicts for proper display
this.elementAttribute = {
width: “16”,
height: “16”
};
this.updateImageStyle = {
width: “16px”,
height: “16px”
};

return true;
}

// latin america ebay
// listado.mercadolibre.com.xx or listado.mercadolibre.co.xx
// or listado.mercadolibre.xx or
// category.mercadolibre.com.xx or listado.mercadolibre.xx/category
// lista.mercadolivre.com.xx or lista.mercadolivre.com.xx/category
if ((domain.indexOf(“www.”) == -1) &&
((domain.indexOf(“.mercadolibre.”) > -1 ) ||
(domain.indexOf(“.mercadolivre.”) > -1 )))
{
return true;
}
return false;
};
searchshield.eBaySearchEngine.prototype.includeLink = function(tag)
{
var parentNode = null;
var outHref = false;

if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
return false;

if ( tag.href.indexOf(“.ebayrtm.com/clk?”) > -1 )
{
if ( tag.title == null || tag.title.length < 0 ) return false; outHref = searchshield.removeHtmlTags(tag.title); if (outHref.indexOf(" ") == -1) { // no spaces if (outHref.indexOf(".") > -1)
{ // at least one dot
if (outHref.indexOf(this.search.uri.host) == -1)
{ // no host
if (outHref.toLowerCase().indexOf(“ebay.com”) == -1)
{
return outHref;
}
}
}
}
}
// ebay.se – Google ads
parentNode = tag.parentNode;
if (parentNode && (parentNode.className.toLowerCase() == “google-ad-link”))
{
if (tag.href.indexOf(“/aclk?sa=”) != -1)
{
findStr = “&adurl=http”;
var urlPos = tag.href.indexOf(findStr);
if (urlPos != -1)
{
urlPos += 7; // puts it on the http
outHref = tag.href.substring(urlPos);

// extract any fragment text, shouldn’t be unescaped
var pound = outHref.indexOf(“#”);
if (pound != -1)
{
var fragment = outHref.substring(pound);
outHref = outHref.substring(0, pound);
outHref = unescape(outHref);
outHref += fragment;
if (searchshield.FilterUrl(outHref, this.filter_urls))
return false;

return outHref;
}

outHref = unescape(outHref);
if (outHref.indexOf(“?”) == -1)
{
var ampPos = outHref.indexOf(“&”);
if (ampPos != -1)
outHref = outHref.substring(0, ampPos);
}

if (searchshield.FilterUrl(outHref, this.filter_urls))
return false;
return outHref;
}
}
}

// auction.co.kr
parentNode = tag.parentNode;
if (parentNode && (parentNode.className.toLowerCase() == “link”))
{
if (tag.href.indexOf(“adcr.naver.com”) > -1)
{
outHref = tag.innerText;
if ((outHref == null) || (outHref.length < 0)) return false; return outHref; } } // latin america ebay if ( tag.href.toLowerCase().indexOf("clickcounter?") > -1 )
{
var spanElements = tag.getElementsByTagName(“span”);
if ((spanElements != null) &&
(spanElements.length > 0))
{
if ( spanElements[0].className.toLowerCase() == “mclics-url” )
{
outHref = spanElements[0].innerHTML;
if ( outHref == null || outHref.length < 0 ) return false; outHref = searchshield.removeHtmlTags(outHref); if (outHref.indexOf(" ") == -1) { // no spaces if (outHref.indexOf(".") > -1)
{ // at least one dot
if ((outHref.toLowerCase().indexOf(“mercadolibre”) == -1) &&
(outHref.toLowerCase().indexOf(“mercadolivre”) == -1))
{
return outHref;
}
}
}
}
}
}

return false;
};
/////////////// EBAY SEARCH ENGINE ///////////////

/////////////// DIGG SEARCH ENGINE ///////////////
searchshield.DiggSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.new_links = false;
};
searchshield.DiggSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.DiggSearchEngine.prototype.constructor = searchshield.DiggSearchEngine;
searchshield.DiggSearchEngine.prototype.name = “digg”;
searchshield.DiggSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;
// re stitch the uri path and query elements
// to use existing logic
var path = uri.path + uri.delimiter + uri.query;

if ((domain.indexOf(“digg.com”) > -1) &&
(path.indexOf(“/ad”) == -1))
{
return true;
}

return false;
};
searchshield.DiggSearchEngine.prototype.includeLink = function(tag)
{
var outHref = false;
var findStr = “”;

if ((tag.parentNode) &&
(tag.parentNode.className.toLowerCase() == “digg-count”))
{
return false;
}

if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
{
if (tag.className && tag.className.indexOf(‘source’) != -1)
{
findStr = “/search?q=site:”;
var urlPos = tag.href.indexOf(findStr);
if (urlPos != -1)
{
urlPos += 15;
outHref = tag.href.substring(urlPos);
return outHref;
}
}
}

return false;
};
searchshield.DiggSearchEngine.prototype.addImage = function(node, image, hidden)
{
// remove style that is set when alt image is applied
this.addAnchorStyle = {
background: “none”
};

var parent = searchshield.SearchEngine.prototype.addImage;
return parent.call(this, node, image, hidden);
};
/////////////// DIGG SEARCH ENGINE ///////////////

/////////////// SLASHDOT SEARCH ENGINE ///////////////
searchshield.SlashdotSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.showCleanVerdicts = false;
this.new_links = false;
this.type = ‘inline’;
};
searchshield.SlashdotSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.SlashdotSearchEngine.prototype.constructor = searchshield.SlashdotSearchEngine;
searchshield.SlashdotSearchEngine.prototype.name = “slashdot”;
searchshield.SlashdotSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;
// re stitch the uri path and query elements
// to use existing logic
var path = uri.path + uri.delimiter + uri.query;

if (domain.indexOf(“slashdot.org”) != -1)
{
return true;
}

return false;
};
searchshield.SlashdotSearchEngine.prototype.includeLink = function(tag)
{
if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
return false;

if ( tag.href.indexOf(“mailto:”) != -1 )
return false;

if ( tag.href.indexOf(“slashdot.org”) != -1 )
return false;

if (tag.parentNode && (tag.parentNode.tagName == “DIV”))
{
if (tag.parentNode.id.indexOf(“text-“) != -1)
{
return tag.href;
}
}
else if ( tag.parentNode && tag.parentNode.parentNode && tag.parentNode.parentNode.tagName == “DIV” )
{
if ( tag.parentNode.parentNode.id.indexOf(“text-“) != -1 )
{
return tag.href;
}
}

return false;
};
searchshield.SlashdotSearchEngine.prototype.addImage = function(node, image, hidden)
{
var doc = this.search.doc;

this.init_inline_ratings(doc);
this.show_inline_ratings(doc, node, image);
};
/////////////// SLASHDOT SEARCH ENGINE ///////////////

/////////////// TWITTER SEARCH ENGINE ///////////////
searchshield.TwitterSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.showCleanVerdicts = false;
this.new_links = false;
this.type = ‘inline’;
};
searchshield.TwitterSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.TwitterSearchEngine.prototype.constructor = searchshield.TwitterSearchEngine;
searchshield.TwitterSearchEngine.prototype.name = “twitter”;
searchshield.TwitterSearchEngine.prototype.twitter_filter_urls = [“twitpic.com”, “twitterfeed.com”, “twitter.peoplebrowsr.com”];
searchshield.TwitterSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain= uri.host;

if (domain.indexOf(“twitter.com”) != -1)
{
return true;
}

return false;
};
searchshield.TwitterSearchEngine.prototype.includeLink = function(tag)
{
if (tag.className == ‘twitter-timeline-link’)
{
// can’t pass the tag’s href if domain is t.co cause then new posts
// will not get an immediate verdict even if it has a dangerous link
if (tag.href.indexOf(‘/t.co/’) != -1)
{
// the tag’s inner text may be truncated and end in the
// unicode suspension character (i.e., …) and it cannot
// be used.
if (tag.innerText.charCodeAt(tag.innerText.length-1) == 8230)
{
// older posts may not always have data-expanded-url
var destUrl = tag.getAttribute(‘data-expanded-url’);
if (!!destUrl)
return destUrl;

var finalUrl = searchshield.avgCallFunc(document, ‘GetFinalUrl’, tag.href);
return finalUrl;
}

return searchshield.checkUrl(tag.innerText);
}

return tag.href;
}

return false;
};
searchshield.TwitterSearchEngine.prototype.addImage = function(node, image, hidden)
{
var doc = this.search.doc;

this.init_inline_ratings(doc);
this.show_inline_ratings(doc, node, image);
};
/////////////// TWITTER SEARCH ENGINE ///////////////

/////////////// GMAIL SEARCH ENGINE ///////////////
searchshield.GMailSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.processFrames = true;
this.showCleanVerdicts = false;
this.type = ‘inline’;
};
searchshield.GMailSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.GMailSearchEngine.prototype.constructor = searchshield.GMailSearchEngine;
searchshield.GMailSearchEngine.prototype.name = “gmail”; // the name by which the search engine is known (always lowercase)
searchshield.GMailSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

var domain = uri.host;

// re stitch the uri path and query elements to
// use existing logic
var path = uri.path + uri.delimiter + uri.query;

if ((domain.indexOf(“mail.google.”) != -1) ||
(domain.indexOf(“gmail.”) != -1))
{
return true;
}

return false;
};
searchshield.GMailSearchEngine.prototype.includeLink = function(tag)
{
if (searchshield.DoesURLContain(tag.href, this.search.uri.host))
return false;

// don’t mark anything but http://
if (tag.href.indexOf(“mailto”) == 0)
return false;

var parentDiv = searchshield.getParentNodeByTagName(“DIV”, tag, “className”);
if ((parentDiv) &&
((parentDiv.className == “ii gt”) || // mail message body
(parentDiv.className == “mv”) || // top sponsored links
(parentDiv.className == “vb”) || // right sponsored links
(parentDiv.className == “im”) || // inside quotes
(parentDiv.className == “gmail_quote”) || // quote
(parentDiv.className == “msg”) // basic html mode
)) // right ads
{
// parse for any ads
var newHref = this.parseAdUrl(tag.href);
return newHref;
}

return false;
};
searchshield.GMailSearchEngine.prototype.addImage = function(node, image, hidden)
{
var doc = this.search.doc;

this.init_inline_ratings(doc);
this.show_inline_ratings(doc, node, image);
};
searchshield.GMailSearchEngine.prototype.parseAdUrl = function(href)
{
if (!href)
return href;

// check for google ad
var regex = “^http(s)?://([a-zA-Z0-9]+).googlesyndication.com.+&adurl=(.+)”;
var re = new RegExp(regex);
var matches = href.match(re);
if (matches && (matches.length >= 4))
{
// else we want the fourth value
var match = matches[3];
if (match && (match.length > 0))
return match
}

return href;
};
/////////////// GMAIL SEARCH ENGINE ///////////////

/////////////// FACEBOOK SEARCH ENGINE ///////////////
searchshield.FacebookSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.showCleanVerdicts = false;
this.type = ‘inline’;
};
searchshield.FacebookSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.FacebookSearchEngine.prototype.constructor = searchshield.FacebookSearchEngine;
searchshield.FacebookSearchEngine.prototype.name = “facebook”; // the name by which the search engine is known (always lowercase)
searchshield.FacebookSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

if (uri.host.indexOf(“www.facebook.com”) != -1)
return true;

return false;
};
searchshield.FacebookSearchEngine.prototype.includeLink = function(tag)
{
if (!tag.href || (tag.href.indexOf(‘facebook.com’) > -1) || (tag.href.indexOf(‘ak.fbcdn.net’) > -1))
return false;

return tag.href
};
searchshield.FacebookSearchEngine.prototype.addImage = function(node, image, hidden)
{
var doc = this.search.doc;

this.init_inline_ratings(doc);
this.show_inline_ratings(doc, node, image);
};
/////////////// FACEBOOK SEARCH ENGINE ///////////////

/////////////// MYSPACE SEARCH ENGINE ///////////////
searchshield.MySpaceSearchEngine = function(search)
{
searchshield.SearchEngine.call(this, search);
this.showCleanVerdicts = false;
this.type = ‘inline’;
};
searchshield.MySpaceSearchEngine.prototype = new searchshield.SearchEngine();
searchshield.MySpaceSearchEngine.prototype.constructor = searchshield.MySpaceSearchEngine;
searchshield.MySpaceSearchEngine.prototype.name = “myspace”; // the name by which the search engine is known (always lowercase)
searchshield.MySpaceSearchEngine.prototype.validSearch = function(href)
{
var uri;
if (typeof(this.search) === ‘undefined’ || null === this.search)
uri = searchshield.parseLink(href);
else
uri = this.search.uri;

if(!uri || !uri.host)
return false;

if (uri.host.indexOf(“www.myspace.com”) != -1)
return true;

return false;
};
searchshield.MySpaceSearchEngine.prototype.includeLink = function(tag)
{
// related domains do not get verdicts
if (/myspace/.test(tag.hostname) || /myspace/.test(tag.href))
return false;

if (/msplinks.com/i.test(tag.href))
return searchshield.checkUrl(tag.innerText);

return tag.href;
};
searchshield.MySpaceSearchEngine.prototype.addImage = function(node, image, hidden)
{
var doc = this.search.doc;

this.init_inline_ratings(doc);
this.show_inline_ratings(doc, node, image);
};
/////////////// MYSPACE SEARCH ENGINE ///////////////

/////////////// AVG TOOLBAR REPORTING ///////////////
var avgreport = {
BLOCK_SEVERITY: 3,
scanResult: function (doc, url, foundUrl, ip) {
// report scan end only if surf enabled
if (‘1’ != searchshield.avgCallFunc(doc, ‘GetSurfEnabled’))
return;

// for now native is handling the interstitial
var results = searchshield.avgCallFunc(doc, ‘MalsiteCheck’, url);
if ( results == null )
return;

var parts = results.split(‘::’);

// need at least severity
if (parts == null)
return;

if (!ip)
ip = “”;

// use a block severity if foundUrl is given
var severity = !!foundUrl ? avgreport.BLOCK_SEVERITY : parseInt(parts[0], 10);
var category = “”;
var threat = “”;

// fill in the category and threat if something was found
if (severity > 0)
{
category = parts[2];
threat = parts[4];
}
// else
// return;

var scan_result = searchshield.avgCallFunc(doc, ‘ReportScanResult’, url, url, threat, category, ip, severity);
var scan_end = avgreport.scanEnd(doc, url);

return (scan_result && scan_end);
},
scanEnd: function (doc, url) {
return searchshield.avgCallFunc(doc, ‘ReportScanEnd’, url);
},
GetInterstitialIP: function (interstitial) {
// simple regex to pull the IP address
var regex = /(([1-9][0-9]{0,2})|0).(([1-9][0-9]{0,2})|0).(([1-9][0-9]{0,2})|0).(([1-9][0-9]{0,2})|0)/;
var match = regex.exec(interstitial);
if (!match)
return ”;

return match[0];
}
}
/////////////// AVG TOOLBAR REPORTING ///////////////

/////////////// FLYOVERS ///////////////
var avglsflyover = {
count: 0,
poppedUp: false,
poppedElement: null,
reset: function () {
avglsflyover.count = 0;
avglsflyover.poppedUp = false;
avglsflyover.poppedElement = null;
},
popup: function (event, hash, search, flyover) {
if (!event)
event = window.event;

var div = document.getElementById(“XPLSS_Flyover”);
if (div == null)
return;

// establish target element and get its containing document object
// in case verdict is inside a frame
var eventTarget = event.srcElement;
var frameDoc = eventTarget.ownerDocument;

// if the element is the clock, don’t pop over it
if ((eventTarget.src != null) && (eventTarget.src.indexOf(“clock.gif”) != -1))
return;

// save the element we popped over
avglsflyover.poppedElement = eventTarget;

// if no flyover get it
if ((flyover == null) || (flyover == “”))
{
flyover = searchshield.avgCallFunc(frameDoc, ‘BuildFlyover’, hash);

if (!flyover)
return;

// cleanup flyover, replace any new lines
flyover = flyover.replace(/r/g, “”);
flyover = flyover.replace(/n/g, “”);
// escape any single quotes
flyover = flyover.replace(/’/g, “'”);
}

// set the html in the layer
div.innerHTML = flyover;

// needed to prevent the flyover from hiding inadvertantly in IE7
if (searchshield.docMode == 7) {
div.style.backgroundColor = “#fff”;
}

// there is an unwanted text node that causes vertical misalignment of flyover
if (div.firstChild.nodeType == 3)
div.removeChild(div.firstChild);

avglsflyover.poppedUp = true;

// reset display count
avglsflyover.count = 0;

avglsflyover.position();
},
hide: function (event) {
var frameDoc = document || top.document;
var div = frameDoc.getElementById(“XPLSS_Flyover”);
if ((div == null) || (div.style == null) || (div.style.visibility == “hidden”))
return;

var trans_div = frameDoc.getElementById(“XPLSS_Trans”);
if ((trans_div == null) || (trans_div.style == null) || (trans_div.style.visibility == “hidden”))
return;

// scroll and keydown events will pass a null event by design
// toElement will be null when mousing out of frameelement containing a verdict
if (event == null || event.toElement == null)
{
return;
}

if (trans_div.contains(event.toElement) || div.contains(event.toElement))
return;

// if the toElement is a cooresponding alt image then don’t hide
// use try/catch because toElement will be null when mousing out of frame
try {
if (!!event.toElement.id && !!event.srcElement.id)
{
if (event.toElement.id.indexOf(event.srcElement.id.substring(0,event.srcElement.id.length-2)) == 0)
return;

if (event.srcElement.id == ‘XPLSS_Trans’ && /XPLSS_d+VUd/.test(event.toElement.id))
return;
}
}
catch(err){}

// hide and move somewhere off screen (negative offsets)
div.style.visibility = “hidden”;
div.style.left = “-2100px”;
div.style.top = “-2100px”;
trans_div.style.visibility = “hidden”;
trans_div.style.left = “-2100px”;
trans_div.style.top = “-2100px”;

return true;
},
position: function () {
if (!avglsflyover.poppedUp || (avglsflyover.poppedElement == null))
return;

var flyover = document.getElementById(“XPLSS_Flyover”);
if (flyover == null)
return;

// relative position of flyover in relation to icon
var locateX = 0; // 0=left, 1=right
var locateY = 0; // 0=above, 1=below, 2=beside icon

// get window sizes
var winSize = searchshield.viewPortSize();
var windowX = winSize[0];
var windowY = winSize[1];

// get the exact size of the flyover
var flyoverSize = searchshield.elementSize(flyover);
var flyoverX = flyoverSize[0];
var flyoverY = flyoverSize[1];

var verdictWidth = 0;
if (avglsflyover.poppedElement && avglsflyover.poppedElement.width)
verdictWidth = avglsflyover.poppedElement.width;

// get the bounding rect for image(s)
var imgRect = searchshield.GetFullBoundingRect(avglsflyover.poppedElement);

// half width/height of element bounding rect
var halfX = (imgRect.right – imgRect.left) / 2;
var halfY = (imgRect.bottom- imgRect.top) / 2;

// element the mouse is over, get the center position
var posX = searchshield.offsetLeft(avglsflyover.poppedElement) + halfX;
var posY = searchshield.offsetTop(avglsflyover.poppedElement) + halfY;

// if a verdict is inside a frame must get offsets for the frame element
var docFrames = document.frames;
if (docFrames)
{
for (var i=0; i < docFrames.length; i++) { try { var frameElem = docFrames[i].frameElement; if (frameElem.contentWindow.document.getElementById(avglsflyover.poppedElement.id)) { posX += searchshield.offsetLeft(frameElem); posY += searchshield.offsetTop(frameElem); break; } } catch(frmErr){} } } var transXOffset = 0; if (imgRect.mid == undefined) transXOffset = -1 * halfX; else transXOffset = ((imgRect.right + imgRect.left) / 2) - imgRect.mid; // normalize pos to 0 -- get amount of scrolling in browser window var scroll = searchshield.scrollSize(); var pageOffsetX = scroll[0]; var pageOffsetY = scroll[1]; posX -= pageOffsetX; posY -= pageOffsetY; // setup the offsets var offsetX = posX; var offsetY = posY; // calc where to display on page if ((windowX - posX) > posX)
{
// right
offsetX += halfX;
locateX = 1;
}
else
{
//left
offsetX -= (flyoverX + halfX);
}
if ((windowY – posY) > posY)
{
// below
if (posY < (windowY/4)) { offsetY -= halfY; locateY = 1; } else { offsetY -= (flyoverY / 2); locateY = 2; } } else { // above if ((windowY - posY) < (windowY/4)) { offsetY -= (flyoverY - halfY); } else { offsetY -= (flyoverY / 2); locateY = 2; } } // make sure we aren't off the screen if (offsetY < 0) offsetY = 0; if ((offsetY + flyoverY) > windowY)
offsetY = windowY – flyoverY;

// add page offsets back
offsetX += pageOffsetX;
offsetY += pageOffsetY;
posX += pageOffsetX;
posY += pageOffsetY;

var paddedOffsetX = 0; //provide space between icon and flyover
var padX = 3;
if (locateX == 0)
paddedOffsetX = offsetX – padX;
else
paddedOffsetX = offsetX + padX;

// set where to put the flyover
flyover.style.top = offsetY + “px”;
flyover.style.left = paddedOffsetX + “px”;

// set where to put the transparent layer
var trans = document.getElementById(“XPLSS_Trans”);
if (trans != null)
{
var trans_left = 0;
var trans_top = 0;
var trans_width= 0;
var trans_height = 0;

// transparent layer should overlap verdict image
if (locateX == 0)
trans_left = posX – flyoverX – halfX; // left
else
trans_left = posX – transXOffset – verdictWidth; // right

trans.style.left = trans_left + “px”;
trans.style.top = offsetY + “px”;

trans.style.width = flyoverX + verdictWidth + “px”;
trans.style.height = flyoverY + “px”;
}

avglsflyover.display();
},
display: function () {
avglsflyover.count++;
if (avglsflyover.count == 1)
{
var flyover = document.getElementById(“XPLSS_Flyover”);
if (flyover == null)
return;

// show the flyover, must use a little count to tell, crazy stuff
flyover.style.visibility = “visible”;
flyover.onmouseout = function(){
avglsflyover.hide(event);
};

// show the transparent layer
var trans_div = document.getElementById(“XPLSS_Trans”);
if (trans_div == null)
return;

trans_div.style.visibility = “visible”;
trans_div.onmouseout = function(){
avglsflyover.hide(event);
};

avglsflyover.poppedUp = false;
}
},
show: function () {
var div = document.getElementById(“XPLSS_Flyover”);
if (div == null)
return;

div.style.visibility = “visible”;

var trans_div = document.getElementById(“XPLSS_Trans”);
if (trans_div == null)
return;
trans_div.style.visible = “visible”;
}
};

var avglsinlineflyover = {
build: function (riskCategory, riskName, bgColor, borderColor) {
var html = ”;
html += ‘

‘;
html += ‘
‘;
html += riskCategory + ‘
‘;
html += riskName + ‘
‘;
html += ‘

‘;

return html;
},
popup: function (event, flyover, nSeverity, blUrl) {
//set verdict info
var div = document.getElementById(‘XPLSS_InlineFlyover’);
if (div == null)
return;

// blUrl is an object for a blacklisted short url
// when it is passed get the final url
if (blUrl != undefined)
{
var finalUrl = searchshield.avgCallFunc(document, ‘GetFinalUrl’, blUrl.sUrl);

var riskUrl = blUrl.sUrl;
if ((finalUrl) && (searchshield.FilterUrl(finalUrl, xplSearch.engine.shortened_urls)))
finalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl);

var riskName = blUrl.riskNameLabel + finalUrl;
flyover = avglsinlineflyover.build(blUrl.riskCategory, riskName, blUrl.bgColor, blUrl.borderColor);
}

div.innerHTML = flyover;
div.style.width = “auto”; //reset width
div.style.position = “absolute”;

if (searchshield.quirksMode || searchshield.docMode 0 ? true : false;

// get the exact size of the flyover
var flyoverSize = searchshield.elementSize(flyover);
var flyoverX = flyoverSize[0];
var flyoverY = flyoverSize[1];

flyover.style.width = flyoverX + “px”;

// get the bounding rect for image(s)
var imgRect = imageElem.getBoundingClientRect();

// half width/height (center) of element bounding rect
var halfX = (imgRect.right – imgRect.left) / 2;
var halfY = (imgRect.bottom- imgRect.top) / 2;

// element the mouse is over, get the center position
var posX = searchshield.offsetLeft(imageElem) + halfX;
var posY = searchshield.offsetTop(imageElem) + halfY;

var pageOffsetX = 0;
var pageOffsetY = 0;
var hasParentFrame = false;

// normalize pos to 0 — get amount of scrolling in browser window
var scroll = searchshield.scrollSize(imageElem);
pageOffsetX = scroll[0];
pageOffsetY = scroll[1];
hasParentFrame = scroll[2];

posX -= pageOffsetX;
posY -= pageOffsetY;

//compensate for Firefox 3
if (posX < imgRect.left) posX = imgRect.left+halfX; // setup the offsets var offsetX = posX; var offsetY = posY; // calc where to display on page if ((windowX - posX) > posX)
{
// right
//offsetX += halfX;
offsetX = imgRect.right + 3;
locateX = 1;
}
else
{
//left
//offsetX -= (flyoverX + halfX);
offsetX = imgRect.left – flyoverX – 3;
}
if ((windowY – posY) > posY)
{
// below
if (posY < (windowY/4)) { offsetY -= halfY; locateY = 1; } else { offsetY -= (flyoverY / 2) - halfY; locateY = 2; } } else { // above if ((windowY - posY) < (windowY/4)) { offsetY -= (flyoverY - halfY); } else { offsetY -= (flyoverY / 2) + halfY; locateY = 2; } } // make sure we aren't off the screen if (offsetY < 0) offsetY = 0; if ((offsetY + flyoverY) > windowY)
{
offsetY = windowY – flyoverY;
}
else if (scrollBarX && ((windowY – (posY + halfY)) < scrollYWidth)) { //verdict overlaps the horizontal scrollbar offsetY = windowY - (flyoverY + scrollYWidth); } // add page offsets back - if not in frame if (!hasParentFrame) { offsetX += pageOffsetX; offsetY += pageOffsetY; } //posX += pageOffsetX; //posY += pageOffsetY; //var paddedOffsetX = 0; //provide space between icon and flyover //var padX = 3; //if (locateX == 0) // paddedOffsetX = offsetX - padX; //else // paddedOffsetX = offsetX + padX; // set where to put the flyover flyover.style.top = offsetY + "px"; flyover.style.left = offsetX + "px"; avglsinlineflyover.display(); }, display: function () { var div = document.getElementById('XPLSS_InlineFlyover'); if (div == null) return; // show the flyover div.style.visibility = "visible"; }, imageExists: function(element) { if (element) { // check next siblings children var sibling = element.nextSibling; if ((sibling == null) || (sibling.getElementsByTagName == null)) return false; var images = sibling.getElementsByTagName("IMG"); if (images == null) return false; for (var i = 0; i < images.length; i++) { if (images[i].id == "avg_ls_image") return true; } } return false; }, getImage: function (anchor) { if (anchor) { var imageElem = null; var images = anchor.getElementsByTagName("img"); if (images == null) return imageElem; for (var i = 0; i < images.length; i++) { if (images[i].id == "avg_ls_image") { imageElem = images[i]; break; } } return imageElem; } }, getUrlFromQueryString: function (inUrl) { var url = inUrl; var uri = searchshield.parseLink(unescape(inUrl)); if (uri.source != null) { // regexp failed so used split to parse url var qsUrl = uri.source.indexOf("?url="); if (qsUrl != -1) url = uri.source.substring(qsUrl + 5); else url = uri.source; } else if ((uri.qsArray.url != null) && (uri.qsArray.url.length > 0))
{
url = uri.qsArray.url;
}

return url;
},
mouseOverHandler: function (e, doc, engine) {
if (e && e.srcElement && e.srcElement.href)
{
// need to keep a reference to the function registered
// by the listener to be able to remove it.
var handlerFunc = arguments.callee;
var element = e.srcElement;
var href = e.srcElement.href;

// need an engine
if (!engine)
return;

// check if it has an image already
if (avglsinlineflyover.imageExists(element))
return;

// add the image, returns the anchor not the image
var new_element = engine.add_inline_image(doc, element, null, null);

// do the check and update in the background
setTimeout(function() {avglsinlineflyover.checkAndUpdate(doc, element, new_element, engine, handlerFunc)}, 1);
}
},
checkAndUpdate: function (doc, element, new_element, engine, handlerFunc) {
if (!engine)
return;

try {
// remove the listener and get final url
element.detachEvent(“onmouseover”, handlerFunc, false);
var finalUrl = searchshield.avgCallFunc(doc, ‘GetFinalUrl’, element.href);
}
catch(e) {}

if ((typeof(finalUrl) != ‘undefined’) && finalUrl)
{
// if still a tiny url check for final url embedded in querystring
if (searchshield.FilterUrl(finalUrl, engine.shortened_urls) &&
(finalUrl.indexOf(“?url=”) != -1))
{
finalUrl = avglsinlineflyover.getUrlFromQueryString(finalUrl);
}
// update the verdict
engine.display_inline(doc, new_element, finalUrl, null, true);
}
else
{
engine.avg_ls_inline_hide_verdict(new_element);
}
}
};
/////////////// FLYOVERS ///////////////

(function(){
setTimeout( function() {
try {
if ((self == top) && top.document) {
searchshield.init(top.document, 1);
}
}
catch(e){return;}
}, 1 );
return;
})();

ALB - Associação de Leitura do Brasil
Faculdade de Educação Anexo II - Unicamp, 13083-970 - Campinas, SP
Fone: +55 19 3521-7960 Email: secretaria@alb.org.br

ALB – Associação de Leitura do Brasil
Cadastrar Nova Conta
Resetar Senha