<img src="http://b.scorecardresearch.com/p?c1=8&c2=&c3=&c4=&c5=&c6=&c15=&cv=2.0&cj=1" />
-->
-->
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+VU\d/.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 <= 7)
{
var className = xplSearch.engine.inline.color.classname[nSeverity];
var imgBase = "linkscanner://" + className + "_inline_border_";
var divWidth = searchshield.elementSize(div)[0];
//round up to nearest 10 to avoid intentional wrapping in div
var flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10))));
var ilfoDivs = div.getElementsByTagName("div");
if (ilfoDivs && ilfoDivs.length == 5)
{
//div.style.fontSize = "10px";
div.style.backgroundImage = "url(" + imgBase + "tl.png)";
div.style.backgroundPosition = "0 0";
div.style.backgroundRepeat = "no-repeat";
div.style.width = flyoverWidth + "px";
div.style.zIndex = "9999";
// avgILFO_head
ilfoDivs[0].style.backgroundImage = "url(" + imgBase + "tr.png)";
ilfoDivs[0].style.backgroundPosition = "top right";
ilfoDivs[0].style.backgroundRepeat = "no-repeat";
ilfoDivs[0].style.width = flyoverWidth + "px";
ilfoDivs[0].style.height = "5px";
// avgILFO_head div
ilfoDivs[1].style.height = "5px";
// avgILFO_content
ilfoDivs[2].style.backgroundImage = "url(" + imgBase + "r.png)";
ilfoDivs[2].style.backgroundPosition = "top right";
ilfoDivs[2].style.backgroundRepeat = "repeat-y";
ilfoDivs[2].style.fontSize = "10px";
ilfoDivs[2].style.color = "black";
ilfoDivs[2].style.padding = "0px 10px";
ilfoDivs[2].style.textAlign = "left";
ilfoDivs[2].style.wordWrap = "break-word";
ilfoDivs[2].style.lineHeight = "130%";
// avgILFO_foot
ilfoDivs[3].style.backgroundImage = "url(" + imgBase + "bl.png)";
ilfoDivs[3].style.backgroundPosition = "bottom left";
ilfoDivs[3].style.backgroundRepeat = "no-repeat";
ilfoDivs[3].style.height = "5px";
// avgILFO_foot div
ilfoDivs[4].style.backgroundImage = "url(" + imgBase + "br.png)";
ilfoDivs[4].style.backgroundPosition = "bottom right";
ilfoDivs[4].style.backgroundRepeat = "no-repeat";
ilfoDivs[4].style.width = flyoverWidth + "px";
ilfoDivs[4].style.height = "5px";
}
else
{
div.style.fontSize = "10px";
div.style.backgroundColor = xplSearch.engine.inline.color.background[nSeverity];
div.style.border = xplSearch.engine.inline.color.border[nSeverity] + " solid 3px";
div.style.padding = "3px 8px";
}
}
else
{
// apply updated styles for new flyover content
var sheets = document.styleSheets;
for (var i=0; i < sheets.length; i++)
{
if (sheets[i].id && sheets[i].id == "avgILFOStyle")
{
var avgILFOStyle = sheets[i];
break;
}
}
if (typeof(avgILFOStyle) !== "undefined")
{
var className = xplSearch.engine.inline.color.classname[nSeverity];
var divWidth = searchshield.elementSize(div)[0];
//round up to nearest 10 to avoid intentional wrapping in div
var flyoverWidth = divWidth + (10 - Math.ceil(10*((divWidth/10) - Math.floor(divWidth/10))));
var rules = avgILFOStyle.rules;
for (var i=0; i < rules.length; i++)
{
var bgImg = rules[i].style.backgroundImage;
var selText = rules[i].selectorText.toLowerCase();
if (bgImg)
{
var bgImgStyle = bgImg.replace(/default/, className);
rules[i].style.backgroundImage = bgImgStyle;
}
if (((selText == ".avgilfo") ||
(selText == ".avgilfo_head") ||
(selText == ".avgilfo_foot div")) &&
(rules[i].style.width) && (rules[i].style.width == "0px"))
{
rules[i].style.width = (flyoverWidth) + "px";
}
}
}
}
if (!event)
event = window.event;
var eventTarget = event.srcElement;
avglsinlineflyover.position(eventTarget);
},
hide: function (event) {
if (!event)
event = window.event;
var div = document.getElementById("XPLSS_InlineFlyover");
if (div == null)
return;
div.style.visibility = "hidden"; //invisible
div.style.left = "-5000px";
if (!searchshield.quirksMode)
{
// reset flyover styles
var sheets = document.styleSheets;
for (var i=0; i < sheets.length; i++)
{
if (sheets[i].id && sheets[i].id == "avgILFOStyle")
{
var avgILFOStyle = sheets[i];
break;
}
}
if (typeof(avgILFOStyle) !== "undefined")
{
var rules = avgILFOStyle.rules;
for (var i=0; i < rules.length; i++)
{
var bgImg = rules[i].style.backgroundImage;
var selText = rules[i].selectorText.toLowerCase();
if (bgImg)
{
var bgImgStyle = bgImg.replace(/:\/\/([a-z]+)_/i, '://default_');
rules[i].style.backgroundImage = bgImgStyle;
}
if (((selText == ".avgilfo") ||
(selText == ".avgilfo_head") ||
(selText == ".avgilfo_foot div")) &&
(rules[i].style.width))
{
rules[i].style.width = "0px";
}
}
}
}
},
position: function (imageElem) {
var flyover = document.getElementById('XPLSS_InlineFlyover');
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];
// Must know if there is a horizontal scroll bar for Firefox
// for proper flyover positioning near bottom edge
var scrollYWidth = winSize[2];
var scrollBarX = winSize[2] > 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;
})();
-->
Soendoro Soetanto
It reminds me of a little dashund I had. She once got stuck in the balcony’s grid and we all went crazy… maybe because it was the 12th floor!! But fortunately it all went okay and after A LOT of work we managed to get her untangled. Can’t think of how bad it would be if she went off on the other side!