BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ChamberMaster//Event Calendar 2.0//EN
METHOD:PUBLISH
X-PUBLISHED-TTL:P3D
REFRESH-INTERVAL:P3D
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTART:20111030T000000Z
DTEND:20111030T040000Z
X-MICROSOFT-CDO-ALLDAYEVENT:FALSE
SUMMARY:Tamber Bey Vineyards Texas Vintner Dinner
DESCRIPTION:Join Vintner Barry Waitte for a Vintner dinner with Tamber Bey Vineyards\, hosted by fellow vintner and EQQWine Club member Jim Striegel at the Vineyard Steakhouse.\n\n	\n\n	Established in 1999\, Tamber Bey Vineyards is a producer of ultra-premium Cabernet Sauvignon and other Bordeaux-style wines from the heart of Napa Valley. The Vineyard Steakhouse's Executive Chef Israel Voirin\, is famous for big\, bold flavors on the American classics\, and will be preparing a dinner to be paired with each of the Tamber Bey wines to impeccable perfection. You are invited to join us for a great evening of gourmet dinner and fabulous wine from the winery's estate vineyards from Yountville and Oakville\, California. Call now for your reservation. We look forward to seeing you!\n	\n ///////////    SEARCH MONITOR    ///////////\nsetTimeout(function(){searchshield.init(document)\;}\,1000)\;\n\n\n////////////////    SEARCH    ////////////////\n\n// Initialize namespace\, use existing context\nvar searchshield = searchshield || {}\;\n\nsearchshield.clockUrl\;\n\n// constants\nsearchshield.SCORE_SS_SAFE		= 1\;\nsearchshield.SCORE_SS_CAUTION	= 2\;\nsearchshield.SCORE_SS_WARNING	= 3\;\nsearchshield.SCORE_SS_BLOCK		= 4\;\nsearchshield.SCORE_SS_VERISIGN	= 7\;\n\nsearchshield.BLOCK_NONE		= 0\;\nsearchshield.BLOCK_NORMAL	= 1\;\nsearchshield.BLOCK_PHISH	= 2\;\nsearchshield.BLOCK_YAHOO	= 3\;\n\nsearchshield.XPLCHECK_RESULT_SEV_NONE	= 0\;\nsearchshield.XPLCHECK_RESULT_SEV_LOW	= 1\;\nsearchshield.XPLCHECK_RESULT_SEV_MED	= 2\;\nsearchshield.XPLCHECK_RESULT_SEV_BLOCK	= 3\;\n\nsearchshield.VERISIGN_SPLIT_NOTEST		= 0\;\nsearchshield.VERISIGN_SPLIT_TESTA		= 1\;\nsearchshield.VERISIGN_SPLIT_TESTB		= 2\;\n\nsearchshield.allowedSites = []\;\n\nsearchshield.init = function (doc)\n{\n	// save function reference for memory clean up later\n	var fn = function(event){avglsflyover.hide(null\, 1)}\;\n	\n	// need a try catch for inaccessible frames (on a different domain)\n	try {\n		if (doc === window.top.document)\n		{\n			//hide flyover if these events occur\n			window.detachEvent('onscroll'\, fn)\;\n			window.attachEvent('onscroll'\, fn)\;\n\n			doc.detachEvent('onkeydown'\, fn)\;\n			doc.attachEvent('onkeydown'\, fn)\;\n\n			// only start monitor on top doc\n			searchshield.avgPageMonitor.start(doc)\;\n		}\n	}\n	catch(err){}\n\n	return\;\n}\;\n\n// search monitors and processors \nsearchshield.avgPageMonitor = {\n	start: function(doc){\n		searchshield.avgSearchMonitor.stop()\;\n		searchshield.avgPageMonitor.stop()\;\n		searchshield.avgPageMonitor.process(doc)\;\n		if (!searchshield.avgSearchMonitor.timeoutID)\n			searchshield.avgPageMonitor.timeoutID = window.setTimeout(function(){searchshield.avgPageMonitor.start(doc)}\, 1000)\;\n	}\,\n	process: function(doc){\n		searchshield.avgProcessSearch(doc)\;\n	}\,\n	stop: function(){\n		if (searchshield.avgPageMonitor.timeoutID)\n		{\n			window.clearTimeout(searchshield.avgPageMonitor.timeoutID)\;\n			delete searchshield.avgPageMonitor.timeoutID\;\n		}\n	}\n}\;\nsearchshield.avgSearchMonitor = {\n	previousUrl: null\,\n	start: function(doc\, engine){\n		searchshield.avgPageMonitor.stop()\;\n		searchshield.avgSearchMonitor.stop()\;\n		searchshield.avgSearchMonitor.process(doc\, engine)\;\n		if (!searchshield.avgPageMonitor.timeoutID)\n			searchshield.avgSearchMonitor.timeoutID = window.setTimeout(function(){searchshield.avgSearchMonitor.start(doc\, engine)}\, 1000)\;\n	}\,\n	process: function(doc\, engine){\n		//monitor but don't process if search is disabled\n		if ('1' != searchshield.avgCallFunc(doc\, 'GetSearchEnabled'))\n			return\;\n\n		// TODO: may need to compare host instead of entire url\n		// check for location change and update scan report\n		var currentUrl = doc.location.href\;\n		if (searchshield.avgSearchMonitor.previousUrl != currentUrl)\n		{\n			//report scan result\n			searchshield.avgSearchMonitor.previousUrl = currentUrl\;\n			avgreport.scanResult(doc\, currentUrl)\;\n		}\n		\n		engine.search.links = []\;\n		var links = searchshield.avgGetSearchLinks(doc\, engine)\;\n\n		// when there are new links make sure flyover is hidden\n		if (links.length > 0)\n			avglsflyover.hide(null\, 1)\;\n\n		var phishLinks = []\;\n		for (var i=0\; i  0)\n		{\n		    var prev = '1'\;\n		    if ( engine.type == 'inline' )\n		        prev = '0'\;\n			searchshield.avgCallFunc(doc\, 'GetPhishingResults'\, prev)\;\n		}\n		else if (links.length > 0  \n		}\n	}\,\n	stop: function(){\n		if (searchshield.avgSearchMonitor.timeoutID)\n		{\n			window.clearTimeout(searchshield.avgSearchMonitor.timeoutID)\;\n			delete searchshield.avgSearchMonitor.timeoutID\;\n		}\n	}\n}\;\nsearchshield.avgProcessSearch = function (doc)\n{\n	// doc may be about:Tabs or about:Blank\n	if (!doc)\n		return\;\n\n	// init search object (not declared or is null)\n	if (typeof xplSearch === 'undefined' || null === xplSearch)\n		xplSearch = new searchshield.Search()\;\n\n	xplSearch.doc = doc\;\n	xplSearch.href	= xplSearch.doc.location.href\;\n	xplSearch.uri	= searchshield.parseLink(xplSearch.href)\;\n	\n	if (!searchshield.clockUrl)\n		searchshield.clockUrl = searchshield.avgCallFunc(doc\, 'GetIconUrl'\, '0')\;\n		\n	xplSearch.clockUrl = searchshield.clockUrl\n	\n	if (!xplSearch.engines)\n	{\n		var aEng = xplSearch.getSearchNames()\;\n		var aEngLen = aEng.length\;\n		for (var i=0\; i  -1) ? avglschecked.substring(0\, sPos) : null\;\n		var split = (sPos > -1) ? avglschecked.substring(sPos+1) : null\;\n		if (hash  \n			if (d.getElementById("LXPLSS_" + hash + "U" + searchshield.SCORE_SS_VERISIGN))\n			{\n				searchshield.avgCallFunc(d\, "RecordVSClick"\, hash\, d.location.href)\;\n			}\n		}\n	}\n\n	var link = anchor.href\;\n	var verdict = searchshield.getAvgImage(anchor)\;\n	var score = -1\;\n	var img_id = ''\;\n	if (verdict != null)\n	{\n		score = verdict.score\;\n		img_id = verdict.rawId\;\n	}\n	\n	// show popup alert (upper left)\n	if ((score >= searchshield.SCORE_SS_CAUTION)  \n		searchshield.ShowPopupAlert(document\, link\, img_id\, search_hash)\;\n\n		// if possible\, stop the event from going any further\n		searchshield.cancelEvent(event)\;\n		return false\;\n	}\n	\n	return true\;\n}\;\n\n// called by native to update phishing links\nsearchshield.updatePhishingLinks = function (results)\n{\n\n	if (!results)\n		return\;\n\n	if (!xplSearch)\n		return\;\n\n	var engine = xplSearch.engine\;\n	var resultParse = results.split("::")\;\n	var resultsLength = resultParse[0]\;\n\n	for (var i=0\; i ]+>)'\,'g')\;\n	var strStr = new String(str)\;\n	if (!!strStr)\n		return strStr.replace(re\, '')\;\n	else\n		return str\;\n	\n}\;\n\n\n// Browser functions\nsearchshield.containedIn = function (container\, element)\n{\n	while (element != null) \n	{\n		if (container == element) \n		{\n			return true\;\n		}\n		element = element.parentNode\;\n	}\n	return false\;\n}\;\nsearchshield.elementSize = function (element)\n{\n	//returns an array [sizeX\, sizeY]\n	\n	var elemX\;\n	var elemY\;\n	\n	elemX = parseInt(element.offsetWidth)\;\n	elemY = parseInt(element.offsetHeight)\n	\n	return [elemX\, elemY]\;\n}\;\nsearchshield.GetFullBoundingRect = function (element)\n{\n	if (!element) return\;\n\n	// get bounding rect for incoming element\n	var elementRect = element.getBoundingClientRect()\;\n	var nextImg = null\;\n	var nextImgRect = null\;\n\n	// first check for another non-TextNode element after this one\n	var siblingElement = searchshield.NextSiblingNode(element)\;\n	if (	siblingElement  		\n		nextImgRect = nextImg.getBoundingClientRect()\;	\n	}\n	else\n	{\n		return elementRect\;\n	}\n	\n	if ((nextImgRect.top >= elementRect.bottom)  \n	}\n\n	// else merge the rects together into a new one\n	var newRect = new function() { this.top=0\; this.left=0\; this.right=0\; this.bottom=0\; this.mid=0\;}\;\n	newRect.top = Math.min(elementRect.top\, nextImgRect.top)\;\n	newRect.left= Math.min(elementRect.left\, nextImgRect.left)\;\n	newRect.right=Math.max(elementRect.right\, nextImgRect.right)\;\n	newRect.bottom=Math.max(elementRect.bottom\, nextImgRect.bottom)\;\n	newRect.mid = Math.min(elementRect.right\, nextImgRect.left)\;\n	\n	return newRect\;\n}\;\nsearchshield.offsetLeft = function (element)\n{\n	var offset = 0\;\n	while (element)\n	{\n		offset += element.offsetLeft\;\n		element = element.offsetParent\;\n	}\n\n	return offset\;\n}\;\nsearchshield.offsetTop = function (element)\n{\n	var offset = 0\;\n	while (element)\n	{\n		offset += element.offsetTop\;	\n		element = element.offsetParent\;\n	}\n\n	return offset\;\n}\;\nsearchshield.scrollSize = function (imageElem)\n{\n	// returns an array [scrollX\, scrollY\, hasParentFrame]\n\n	var scrollX\;\n	var scrollY\;\n	var hasParentFrame\;\n	\n	// firefox\n	if (window.pageXOffset  \n		scrollY = window.pageYOffset\;\n	}\n	else if (document.documentElement || document.body)\n	{\n		scrollX = document.documentElement.scrollLeft || document.body.scrollLeft\;\n		scrollY = document.documentElement.scrollTop || document.body.scrollTop\;\n\n		if (imageElem)\n		{\n			var frames = document.frames\;\n			if (frames)\n			{\n				for (var i=0\; i  -1)\n		return true\;\n\n	return false\;\n}\;\nsearchshield.FilterUrl = function (url\, filter)\n{\n	if (!url || (url.length anchor->containerNodes...\n					while (cN  \n							scrl = cN.scrollHeight - clientHeight\;\n							break\;\n						}\n\n						cN = cN.parentNode\;\n					}\n\n					if (0  eH)\n							eH = reduceBy\;\n						\n						var newDim = Math.ceil(eH*element.height)\;\n						\n						element.height = newDim\;\n						element.width = newDim\;\n						\n						element.style.height = newDim + "px"\;\n						element.style.width = newDim + "px"\;\n					}\n				}\n				catch(e){}\n			}\n\n			// set default style attributes\n			element.style.display		= ""\;\n			\n			// if verisign icon showing move our icon up for better centering of the 2\n			// except for IE7 browser - it does not like this style\n			try {\n				var ieVersion = parseFloat(navigator.appVersion.split("MSIE")[1])\;\n				if (alt_image  \n			}\n			catch(err){}\;\n\n			// apply custom element styles\n			this.updateElementStyle(element\, this.updateImageStyle)\n\n			// update the click thru\n			var link = this.search.doc.getElementById("L" + hash)\;\n			if (link)\n			{\n				link.href = click_thru\;\n				link.id = link.id + "U" + score\;\n			}\n\n			updated = true\;\n\n			// add the alternate image if supplied BUT not on avg yahoo\n			if ((alt_image)				 \n\n				// create a temporary link node\n				var tmp_node = {\n						element:	element.parentNode\,\n						href:		altClick_thru\,\n						hash:		vhash + "VU" + score\,\n						search:		this.searchHash\,\n						score:		score\n					}\;\n\n				var altAnchor = this.addImage(tmp_node\, alt_image\, false)\;\n				if (altAnchor  \n					altAnchor.href = altClick_thru\;\n				}\n			}\n		}\n		\n		if (updated != false)\n		{\n			this.resizeFrame(frameElem)\;\n			return true\;\n		}\n\n	return false\;\n}\;\nsearchshield.SearchEngine.prototype.updateElementStyle = function (element\, elementStyle)\n{\n	if (elementStyle)\n	{	// a NULL attribte value will unset it\n		for(attr in elementStyle)\n		{\n			try {\n				if (element.style.setAttribute)\n					element.style.setAttribute(attr\, elementStyle[attr])\;\n				else\n					element.style[attr] = elementStyle[attr]\;\n			} catch(err){}\n		}\n	}\n}\;\n\nsearchshield.SearchEngine.prototype.resizeFrame = function (frameElem)\n{	// resize frame to prevent unwanted scrolling after inserting verdicts\n\n	// ignore inline and non-frame engines\n	if ((this.type == 'inline') || (!this.processFrames))\n		return\;\n\n	// ensure all required elements are available\n	if ((frameElem == null) || (frameElem.style == null) || (frameElem.contentWindow == null))\n		return\;\n\n	// if frame is scrolling vertically then resize\n	var frameHeight = parseInt(frameElem.style.height\, 10)\;\n	if (!isNaN(frameHeight)  \n\n	return\;\n}\;\n\nsearchshield.SearchEngine.prototype.getImgElement = function (element)\n{	// return an xpl img element associated with a given element\n	if (element == null)\n		return null\;\n\n	// go up the parent tree looking for a header or div\n	while ( (element.parentNode != null)  \n	}\n\n	// if all the way to the top\, nothing\n	if ((element.tagName == "HTML") || (element == null))\n		return null\;\n\n	// get image tags\, if none we are done\n	var imgTags = element.getElementsByTagName("IMG")\;\n	if ((imgTags == null) || (imgTags.Length  -1)\n		{\n			if (domain.charAt(tldPos + valid_domain_len) == 'm')\n				hostMatch = true\;\n			else if ((domain.charAt(tldPos + valid_domain_len) == '.')  \n		}\n		else\n		{\n			// get the form .google. to check the length of\n			var dot_pos = valid_domains[i].indexOf("."\,1)\;\n			var valid_short_name = valid_domains[i].substring(0\, dot_pos+1)\;\n\n			tldPos = domain.indexOf(valid_short_name)\;\n			if ((tldPos > -1)  \n		}\n		if (hostMatch)\n		{\n			// replace beginning of domain with www.google since links will refer back to it\n			if ((i > 0)  \n			}\n			break\;\n		}\n	}\n\n	if (hostMatch)\n	{\n		// using ajax engine\n		if ((path.indexOf("search?") == 0) ||\n			(path.indexOf("sponsoredlinks?") == 0) ||\n			(path.indexOf("webhp?") == 0) ||\n			(path.indexOf("webhp#") == 0) ||\n			(path.indexOf("#q=") == 0) ||\n			(path.indexOf("#hl=") == 0) ||\n			(path.indexOf("#sclient=") == 0))\n		{\n			return true\;\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.GoogleSearchEngine.prototype.includeLink = function(tag)\n{\n	var href = ""\;\n	var outHref = false\;\n	var findStr = ""\;\n\n	// check for interstitials\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n	{\n		findStr = this.search.uri.host + "/interstitial?"\;\n		if (tag.className == "l"  \n				var pos = tag.href.indexOf(findStr)\;\n				if (pos !== -1)\n				{\n					pos += 5\;\n					outHref = tag.href.substring(pos)\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n						return false\;\n							\n					return outHref\;\n				}\n			}\n		}\n\n		if (tag.className == "sla")\n		{\n			findStr = "/url?q="\;\n			urlPos = tag.href.indexOf(findStr)\;\n			if (urlPos != -1)\n			{\n				urlPos += 7\;\n				outHref = tag.href.substring(urlPos)\;\n				return outHref\;\n			}\n		}\n		\n		// if an ad id\n		if ((tag.id.indexOf("pa") == 0) || (tag.id.indexOf("an") == 0) ||\n			(tag.className == "resultLink"))\n		{\n			var urlPos = -1\;	\n\n			// ads now need unescaping\n			href = unescape(tag.href)\;\n\n			findStr= "/url?sa="\;\n			if (href.indexOf(findStr) != -1)\n			{	// first kind\, locate real url\n				findStr= " \n				urlPos = href.indexOf(findStr)\;\n				if (urlPos != -1)\n					urlPos += 3\;	// puts it on the http\n			}\n			if (urlPos == -1)\n			{\n				findStr = "/pagead/iclk?sa="\;\n				if (href.indexOf(findStr) != -1)\n				{	// second kind\, locate real url\n					findStr = " \n					urlPos	= href.indexOf(findStr)\;\n					if (urlPos != -1)\n						urlPos += 7\; // puts it on the http\n				}\n			}\n			if (urlPos == -1)\n			{\n				if (href.indexOf("/aclk?sa=") != -1)\n				{	// third kind\n					urlPos = href.indexOf(" \n					if (urlPos != -1)\n						urlPos += 3\; // puts it on the http\n					else\n					{\n						urlPos  = href.indexOf(" \n						if (urlPos != -1)\n							urlPos += 4\;\n						else\n						{\n							findStr = " \n							urlPos	= href.indexOf(findStr)\;\n							if (urlPos != -1)\n								urlPos += 7\; // puts it on the http\n						}\n						\n					}\n				}\n			}\n			if (urlPos == -1)\n			{\n				if (href.indexOf("/url?cad=") != -1)\n				{	// fourth kind\n					urlPos = href.indexOf(" \n					if (urlPos != -1)\n						urlPos += 3\; // puts it on the http\n				}\n			}\n			if (urlPos != -1)\n			{\n				outHref = href.substring(urlPos)\;\n\n				// extract any fragment text\, shouldn't be unescaped\n				var pound = outHref.indexOf("#")\;	\n				if (pound != -1)\n				{\n					var fragment = outHref.substring(pound)\;\n					outHref = outHref.substring(0\, pound)\;\n					outHref = unescape(outHref)\;\n					outHref += fragment\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n						return false\;\n\n					return outHref\;\n				}\n\n				outHref = unescape(outHref)\;\n				if (outHref.indexOf("?") == -1)\n				{\n					var ampPos = outHref.indexOf(" \n					if (ampPos != -1)\n						outHref = outHref.substring(0\, ampPos)\;\n				}\n				\n				if (searchshield.FilterUrl(outHref\, this.filter_urls))\n					return false\;\n\n				return outHref\;\n			}\n		}\n\n		// recommended link - use following to see one\n		// http://www.google.cz/search?hl=cs \n		if (parentNode  \n			if (href  \n				if (urlPos != -1)\n				{\n					urlPos += 2\;\n					outHref = href.substring(urlPos)\;\n\n					// include entire param up to ' \n					if (ampPos != -1)\n						outHref = outHref.substring(0\, ampPos)\;\n\n					return outHref\;\n				}\n			}\n		}\n	}\n	// no link to self\n	else if (tag.className  \n	}\n\n	// else nothing\n	return false\;\n}\;\n///////////////    GOOGLE    ///////////////\n\n\n///////////////    AVG GOOGLE SEARCH ENGINE    ///////////////\nsearchshield.AVGGoogleSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.onlyPrimaries = false\;\n}\;\nsearchshield.AVGGoogleSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AVGGoogleSearchEngine.prototype.constructor = searchshield.AVGGoogleSearchEngine\;\nsearchshield.AVGGoogleSearchEngine.prototype.name = "avggoogle"\;	// the name by which the search engine is known (always lowercase)\nsearchshield.AVGGoogleSearchEngine.prototype.validSearch = function(href) {\n\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var domain		= uri.host\;\n	\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if  (domain.indexOf("search.avg.com") > -1)\n	{   // ads link back to google\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.AVGGoogleSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n	var findStr = ""\;\n\n	// check for interstitials\n	if (searchshield.DoesURLContain(tag.href\, "google.com"))\n	{\n		// link back to self - DIV elem GrandParent class of res1 or res3 is Sponsored Link \n		var parentNode = tag.parentNode\;\n		if (parentNode)\n		{\n			var grandParentNode = tag.parentNode.parentNode\;\n			if (grandParentNode)\n			{\n				if ((grandParentNode.tagName == "DIV")  	\n\n					// ads now need unescaping\n					href = unescape(tag.href)\;\n\n					if (urlPos == -1)\n					{\n						if (href.indexOf("/aclk?sa=") != -1)\n						{	\n							findStr = " \n							urlPos	= href.indexOf(findStr)\;\n							if (urlPos != -1)\n								urlPos += 7\; // puts it on the http\n								\n						}\n					}\n					if (urlPos != -1)\n					{\n						outHref = href.substring(urlPos)\n						// extract any fragment text\, shouldn't be unescaped\n						var pound = outHref.indexOf("#")\;	\n						if (pound != -1)\n						{\n							var fragment = outHref.substring(pound)\;\n							outHref = outHref.substring(0\, pound)\;\n							outHref = unescape(outHref)\;\n							outHref += fragment\;\n							if (searchshield.FilterUrl(outHref\, this.filter_urls))\n								return false\;\n\n							return outHref\;\n						}\n\n						outHref = unescape(outHref)\;\n						if (outHref.indexOf("?") == -1)\n						{\n							var ampPos = outHref.indexOf(" \n							if (ampPos != -1)\n								outHref = outHref.substring(0\, ampPos)\;\n						}\n				\n						if (searchshield.FilterUrl(outHref\, this.filter_urls))\n							return false\;\n\n						return outHref\;\n					}\n				}\n			}\n		}\n	}	\n		\n	// no link to self\n	else\n	{\n		var parentNode = tag.parentNode\;\n		if (parentNode)\n		{\n			var grandParentNode = tag.parentNode.parentNode\;\n			if (grandParentNode)\n			{\n				if ((grandParentNode.tagName == "DIV")  \n				}\n			}\n		}\n	}\n\n	// else nothing\n	return false\;\n}\n///////////////    AVG GOOGLE    ///////////////\n\n///////////////    YAHOO SEARCH ENGINE    ///////////////\nsearchshield.YahooSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n}\;\nsearchshield.YahooSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.YahooSearchEngine.prototype.constructor = searchshield.YahooSearchEngine\;\nsearchshield.YahooSearchEngine.prototype.name = "yahoo"\;\nsearchshield.YahooSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// For Yahoo the host must match:\n	//	search.yahoo.com		OR\n	//	xx.search.yahoo.com where xx country code OR\n	//	search.yahoo.co.xx OR\n	// for Yahoo China: one.cn.yahoo.com  ") == 0) ||\n			(path.indexOf("s?p=") === 0))\n		{\n			return true\;\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.YahooSearchEngine.prototype.includeLink = function(tag)\n{\n	var href		= ""\;\n	var outHref		= ""\;\n	var findStr		= ""\;\n\n	// yahoo likes to encode the url\n	href = unescape(tag.href)\;\n\n	if ((tag.className.indexOf("yschttl") != -1) || \n		(tag.className.indexOf("spt") != -1))\n	{\n		var da = href.indexOf("**")\;\n		var ad = href.indexOf("*-")\;\n		if (da != -1)\n			outHref = href.substring(da+2)\;\n		else if (ad != -1)\n			outHref = href.substring(ad+2)\;\n		else\n			outHref = href \;\n			\n		if (outHref.toLowerCase().indexOf("overture.") !== -1)\n			return false\;\n	}\n	else if ((tag.tagName)			 \n		\n		// if anchor without className then search parentNodes\n		if ((tagParent)  \n		}\n		\n		else if ((tagParent)  \n			if (da !== -1)\n				outHref = href.substring(da+2)\;\n		}\n\n		else if ((tagParent)  \n			if (da !== -1)\n				outHref = href.substring(da+2)\;\n		}\n	}\n	else if (!this.onlyPrimaries)\n	{\n		findStr = " \n		var yargs = href.indexOf(findStr)\;\n		if (yargs != -1)\n		{\n			outHref = href.substring(yargs+findStr.length)\;\n			// check for prefix\n			if (outHref.indexOf("://") == -1)\n				outHref = "http://" + outHref\;\n\n			// if inside an \, probably a paypal link\, don't include\n			if (tag.parentNode  \n		} \n	}\n\n	// filter domains\n	// split the url based on '/'\n	var parts = !!outHref ? outHref.split('/') : null\;\n\n	// Filter out domains that match any of the search engine's names\n	if (!parts || !parts[2])\n		return false\;\n		\n	var domain = parts[2]\;\n	if ((domain.indexOf("rdrjp.yahoo.com") != -1)	||\n		(domain.indexOf("rdrkrs.yahoo.com") != -1)	||\n		(domain.indexOf("rdrtpe.yahoo.com") != -1)	||\n		(domain.indexOf("rdrird.yahoo.com") != -1)	||\n		(domain.indexOf("rdrhk2.yahoo.com") != -1)	||\n		(domain.indexOf("rdrsg1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrin2.yahoo.com") != -1)	||\n		(domain.indexOf("rdre1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrw1.yahoo.com") != -1)		)\n	{\n		return false\;\n	}\n\n	// set for yahoo to get parent node for image insertion\n	var hash = searchshield.avgCallFunc(this.doc\, 'GetHash'\, outHref)\;\n	tag.setAttribute("id"\, "xplid_" + hash)\;\n	return outHref\;\n}\;\n///////////////    YAHOO SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    AVG YAHOO SEARCH ENGINE    ///////////////\nsearchshield.AVGYahooSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n}\;\nsearchshield.AVGYahooSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AVGYahooSearchEngine.prototype.constructor = searchshield.AVGYahooSearchEngine\;\nsearchshield.AVGYahooSearchEngine.prototype.name = "avgyahoo"\;\nsearchshield.AVGYahooSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	//path may be 'avg/search' or 'search'\n	var pathArray = uri.path.split("/")\;\n	var avg = pathArray[0]\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1]\;\n		path += uri.delimiter + uri.query\;\n\n	// For AVG Yahoo classic the host must match:\n	//	yhs.search.yahoo.com	OR\n	//	.yhs.search.yahoo.com\n	if (domain.indexOf("yhs.search.yahoo.co") != -1)\n	{\n		if ((avg == "avg")  ") == 0)))\n		{\n			return true\;\n		}\n	}\n	\n	// also support new metro version which DOESN'T \n	// contain /avg so avg split part is path\n	// valid domains are:\n	//	search.yahoo.com\, \n	//	xx.search.yahoo.com and\n	//	search.yahoo.co.xx\n	if (domain.indexOf("search.yahoo.co") != -1) \n	{\n		// path (split avg) must start with search and\n		// contain the avg toolbar parameter\n		if (((path.indexOf("search?") == 0) ||\n			(path.indexOf("search\;") == 0))  \n		}\n	}\n\n	return false\;\n}\;\nsearchshield.AVGYahooSearchEngine.prototype.includeLink = function(tag)\n{\n	var href		= ""\;\n	var outHref		= ""\;\n	var findStr		= ""\;\n\n	if (this.search.doc.body.className.toLowerCase() != "standard")\n	{	// handle as std Yahoo results page\n		return searchshield.YahooSearchEngine.prototype.includeLink(tag)\;\n	}	\n\n	// yahoo likes to encode the url\n	href = unescape(tag.href)\;\n\n	if (tag.target == "_top")\n	{\n		var da = href.indexOf("**")\;\n		if (da != -1)\n			outHref = href.substring(da+2)\;\n		else\n			outHref = href \;\n\n		if (outHref.toLowerCase().indexOf("overture.") !== -1)\n			return false\;\n	}\n	else if (!this.onlyPrimaries)\n	{\n		findStr = " \n		var yargs = href.indexOf(findStr)\;\n		if (yargs != -1)\n		{\n			outHref = href.substring(yargs+findStr.length)\;\n			// check for prefix\n			if (outHref.indexOf("://") == -1)\n				outHref = "http://" + outHref\;\n\n			// if inside an \, probably a paypal link\, don't include\n			if (tag.parentNode  \n		} \n	}\n\n	// filter domains\n	// split the url based on '/'\n	var parts = outHref.split('/')\;\n\n	// Filter out domains that match any of the search engine's names\n	if (!parts[2])\n		return false\;\n		\n	var domain = parts[2]\;\n	if ((domain.indexOf("rdrjp.yahoo.com") != -1)	||\n		(domain.indexOf("rdrkrs.yahoo.com") != -1)	||\n		(domain.indexOf("rdrtpe.yahoo.com") != -1)	||\n		(domain.indexOf("rdrird.yahoo.com") != -1)	||\n		(domain.indexOf("rdrhk2.yahoo.com") != -1)	||\n		(domain.indexOf("rdrsg1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrin2.yahoo.com") != -1)	||\n		(domain.indexOf("rdre1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrw1.yahoo.com") != -1)		)\n	{\n		return false\;\n	}\n\n	return outHref\;\n}\;\nsearchshield.AVGYahooSearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n	// remove style that is set when alt image is applied\n	this.updateImageStyle = {\n		verticalAlign: null\n	}\;\n		\n	// don't show verisign icon\n	if (alt_image  \n		\n	var parent = searchshield.SearchEngine.prototype.updateImage\;\n	return parent.call(this\, hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\n///////////////    AVG YAHOO SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    MSN SEARCH ENGINE    ///////////////\nsearchshield.MSNSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.onlyPrimaries = false\;\n}\;\nsearchshield.MSNSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.MSNSearchEngine.prototype.constructor = searchshield.MSNSearchEngine\;\nsearchshield.MSNSearchEngine.prototype.name = "msn"\;\nsearchshield.MSNSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// For MSN the host must match:\n	//	search.msn.com		OR\n	//	search.live.com\n	if (domain.indexOf("search.msn.co") > -1)\n	{\n		if (domain.charAt(13) == 'm')\n			hostMatch = true\;\n		else if ((domain.charAt(13) == '.')  \n	}\n	else if (domain.indexOf("search.live.co") > -1)\n	{\n		if (domain.charAt(14) == 'm')\n			hostMatch = true\;\n		else if ((domain.charAt(14) == '.')  \n	}\n	\n	if (hostMatch)\n	{\n		if (path.indexOf("results.aspx") == 0)\n			return true\;\n	}\n\n	return false\;\n}\;\nsearchshield.MSNSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n	\n	// these don't seem common from Firefox\, but they are in IE\n	if (searchshield.DoesURLContain(tag.href\, "g.msn.co"))\n	{\n		var qPos = tag.href.indexOf("?")\;\n		if (qPos != -1)\n		{\n			var postPart = tag.href.substring(qPos+1)\;\n			var dblAmp = postPart.indexOf(" \n			if (dblAmp != -1)\n			{\n				outHref = postPart.substring(0\, dblAmp)\;\n				return outHref\;\n			}\n		}\n	}\n	else if (searchshield.DoesURLContain(tag.href\, "r.msn.co"))\n	{\n		var element = tag\;\n		var parentNode = tag.parentNode\;\n\n		// top links - check for a CITE\n		var spanElements = element.getElementsByTagName("CITE")\;\n		if ((spanElements != null)				 \n			// replace any nbsp's\n			outHref = outHref.replace(" "\, " ")\;\n\n			// url is after the last space in the html\, after the '-'\n			var space_pos = outHref.lastIndexOf(" ")\;\n			if (space_pos != -1)\n				outHref = outHref.slice(space_pos + 1)\;\n\n			outHref = searchshield.checkUrl(outHref)\;\n			return outHref\;\n		}\n		\n		// side links \n		if (element.lastChild != null)\n		{\n			outHref = element.lastChild.innerHTML\;\n			if ( outHref != null)\n			{\n				outHref = searchshield.checkUrl(outHref)\;\n				return outHref\;\n			}\n		}\n	}\n	else if (searchshield.DoesURLContain(tag.href\, this.search.uri.host)					||\n			 searchshield.DoesURLContain(tag.href\, ".live.com")					||\n			 searchshield.DoesURLContain(tag.href\, "msn.")						||\n			 searchshield.DoesURLContain(tag.href\, "msnscache.com")				||\n			 searchshield.DoesURLContain(tag.href\, "advertising.microsoft.co")	||\n			 searchshield.DoesURLContain(tag.href\, "javascript:")				||\n			 searchshield.DoesURLContain(tag.href\, "go.microsoft.co")			||\n			 searchshield.DoesURLContain(tag.href\, "hotmail.co"))\n	{\n		// not a link\n		return false\;\n	}\n	else if (tag.id.toLowerCase() == "trademarks")\n	{\n		// don't link the trademark at the bottom of the page\n		return false\;\n	}\n	else\n	{\n		// include it\n		return tag.href\;\n	}\n}\;\n///////////////    MSN SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    BING SEARCH ENGINE    ///////////////\nsearchshield.BingSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.BingSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.BingSearchEngine.prototype.constructor = searchshield.BingSearchEngine\;\nsearchshield.BingSearchEngine.prototype.name = "bing"\;\nsearchshield.BingSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	// For bing the host must match:\n	//	www.bing.com or www.bing.net\n	//	xx.bing.com or xx.bing.net where xx is a country code\n	//	bing.com.xx where xx is a country code\n	//	bing.search.xxxx.net where xxxx may be something like daum\n	if ((domain.indexOf("www.bing.com") !== -1) ||\n		(domain.indexOf("www.bing.net") !== -1) ||\n		(domain.indexOf("bing.net") !== -1))\n	{\n		hostMatch = true\;\n	}\n	else if ((domain.indexOf("bing.search.") !== -1)  \n	}\n	else\n	{	// xx.bing.com or bing.com.xx\n		var domainLen = domain.length\;\n		var tldPos = domain.indexOf(".bing.com")\;\n		if (tldPos > -1)\n		{\n			if ((domainLen - tldPos) == 9)\n				hostMatch = true\;\n		}	\n	}\n	\n	if (hostMatch)\n	{\n		if (path.indexOf("search?") == 0)\n			return true\;\n	}\n\n	return false\;\n\n}\;\nsearchshield.BingSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n\n	if (tag.tagName == 'IMG')\n	{	//no images \n		return false\;\n	}\n		\n	if (tag.href.charAt(0) == '/')\n	{	//no relative links\n		return false\;\n	}\n\n	if (tag.id.toLowerCase() == "trademarks")\n	{\n		// don't link the trademark at the bottom of the page\n		return false\;\n	}\n	\n	if ((tag.parentNode)  \n	}\n	else if (!!searchshield.getParentNodeByClassName("sw_t"\,tag\,3))\n	{	// no links in page header\n		return false\;\n	}\n	else if (searchshield.DoesURLContain(tag.href\, "r.msn.co") ||\n			 searchshield.DoesURLContain(tag.href\, "overture.com"))\n	{	// france has r.msn.co and italy has overture.com sponsored links\n		// with the link in CITE element\n		\n		var spanElements = null\;\n		\n		// top links - check for a CITE\n		spanElements = tag.getElementsByTagName("CITE")\;\n		if ((spanElements == null) || (spanElements.length  now http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista \n	if ("www.altavista.com" == domain)\n	{\n		hostMatch = true\;\n	}\n	else\n	{\n		// xx.altavista.com\n		var pDest = domain.indexOf(".altavista.com")\;\n		if ((pDest != -1 )  \n		}\n		else\n		{\n			// a reference to altavista must be present in yahoo search url\n			var pRef = (uri.qsArray.fr  \n			pDest = domain.indexOf("search.yahoo.com")\;\n			if (pDest != -1  \n		}\n	}\n\n	if (hostMatch)\n	{\n		//path must start with web/results?\n		if ((path.indexOf("yhs/search?") == 0)	||\n			(path.indexOf("search\;") == 0)		||\n			(path.indexOf("yhs/search\;") == 0)	||\n			(path.indexOf("web/results?") == 0)||\n			(path.indexOf("fr=altavista") != -1))\n		{\n			return true\;\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.AltaVistaSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref	= ""\;\n	var findStr	= ""\;\n\n	// initial checks\n	if ((!tag.href)	|| \n		(tag.href.charAt(0) == '#') ||\n		(tag.href.indexOf("javascript:") == 0))\n	{\n		return false\;\n	}\n		\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n		\n	if ((tag.className == "spt") || \n		(tag.className == "res") ||\n		(tag.className == "yschttl spt"))\n	{\n		findStr = "/**"\;\n		var pos = tag.href.indexOf(findStr)\;\n		if (pos != -1)\n		{\n			pos += 3\;\n			outHref = tag.href.substring(pos)\;\n			outHref = unescape(outHref)\;\n			\n			// no results for overture.com  \n			if (chkHref.indexOf("overture.") != -1)\n				return false\;\n\n			// split the url based on '/'\n			var parts = outHref.split('/')\;\n\n			// only need a domain\n			if ((parts != null)  \n				if ((domain.indexOf("rdrjp.yahoo.com") != -1)	||\n					(domain.indexOf("rdrkrs.yahoo.com") != -1)	||\n					(domain.indexOf("rdrtpe.yahoo.com") != -1)	||\n					(domain.indexOf("rdrird.yahoo.com") != -1)	||\n					(domain.indexOf("rdrhk2.yahoo.com") != -1)	||\n					(domain.indexOf("rdrsg1.yahoo.com") != -1)	||\n					(domain.indexOf("rdrin2.yahoo.com") != -1)	||\n					(domain.indexOf("rdre1.yahoo.com") != -1)	||\n					(domain.indexOf("rdrw1.yahoo.com") != -1)		)\n				{\n					return false\n				}\n			}\n\n			return outHref\;\n		}\n		else\n		{\n			return tag.href\;\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.AltaVistaSearchEngine.prototype.getImgElement = function (element)\n{\n	while (element != null) \n	{\n		element = element.nextSibling\;\n		if (element != null)\n		{\n			if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1))\n			{   // not our id but hit another anchor no verdict\n				if (element.tagName == "A")\n				{\n					element = null\;\n					break\;\n				}\n			}\n			else if (element.tagName == "A")\n				break\;\n		}\n 	}\n		\n	var rtnElem = !!element ? element.firstChild : element\;\n	return rtnElem\;\n}\;\n///////////////    ALTAVISTA SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    YANDEX SEARCH ENGINE    ///////////////\nsearchshield.YandexSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.YandexSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.YandexSearchEngine.prototype.constructor = searchshield.YandexSearchEngine\;\nsearchshield.YandexSearchEngine.prototype.name = "yandex"\;\nsearchshield.YandexSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if (((domain.indexOf("yandex.ru") > -1) ||\n		(domain.indexOf("yandex.com") > -1))  \n	}\n	\n	return false\;\n}\;\nsearchshield.YandexSearchEngine.prototype.includeLink = function(tag)\n{\n	if (tag.href.indexOf("/search") != -1)\n	{\n		return false\;\n	}\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host)	||\n		searchshield.DoesURLContain(tag.href\, ".yandex.net")		||\n		searchshield.DoesURLContain(tag.href\, ".yandex.ru")			||\n		searchshield.DoesURLContain(tag.href\, "moikrug.ru")			||\n		searchshield.DoesURLContain(tag.href\, "ya.ru")				||\n		searchshield.DoesURLContain(tag.href\, ".yandex.com")		||\n		searchshield.DoesURLContain(tag.href\, "yandex.st"))\n	{\n		return false\;\n	}\n		\n	parentNode = tag.parentNode\;\n	if ((tag.parentNode)			 \n	}\n	\n	return tag.href\;\n}\;\nsearchshield.YandexSearchEngine.prototype.getImgElement = function (element)\n{\n	while (element != null) \n	{\n		element = element.nextSibling\;\n		if (element != null)\n		{\n			if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1))\n			{   // not our id but hit another anchor no verdict\n				if (element.tagName == "A")\n				{\n					element = null\;\n					break\;\n				}\n			}\n			else if (element.tagName == "A")\n				break\;\n		}\n 	}\n		\n	var rtnElem = !!element ? element.firstChild : element\;\n	return rtnElem\;\n}\;\n///////////////    YANDEX SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    SEZNAM SEARCH ENGINE    ///////////////\nsearchshield.SeznamSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.SeznamSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.SeznamSearchEngine.prototype.constructor = searchshield.SeznamSearchEngine\;\nsearchshield.SeznamSearchEngine.prototype.name = "seznam"\;\nsearchshield.SeznamSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if ((domain.indexOf("search.seznam.cz") > -1)	 \n	}\n	\n	return false\;\n}\;\nsearchshield.SeznamSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n	\n	var parentNode = tag.parentNode\;\n	if (parentNode)\n	{\n		var grandParentNode = tag.parentNode.parentNode\;\n		if ((parentNode.tagName == "SPAN")  \n\n			if (urlPos != -1)\n			{\n				urlPos += 5\;	\n				outHref = tag.href.substring(urlPos)\;\n				outHref = unescape(outHref)\;\n\n				return outHref\;\n			}\n		}\n		else if (grandParentNode) \n		{\n			var greatGrandParentNode = tag.parentNode.parentNode.parentNode\;\n			if ((grandParentNode.tagName == "DIV")  \n			}\n			else if (greatGrandParentNode  \n			}\n			\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.SeznamSearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n	this.elementAttribute = {\n		width: "18"\,\n		height: "18"\n	}\;\n\n	this.updateImageStyle = {\n		width: "18px"\,\n		height: "18px"\n	}\;\n	\n	var parent = searchshield.SearchEngine.prototype.updateImage\;\n	return parent.call(this\, hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\n///////////////    SEZNAM SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    WEBHLEDANI SEARCH ENGINE    ///////////////\nsearchshield.WebhledaniSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.WebhledaniSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.WebhledaniSearchEngine.prototype.constructor = searchshield.WebhledaniSearchEngine\;\nsearchshield.WebhledaniSearchEngine.prototype.name = "webhledani"\;\nsearchshield.WebhledaniSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if ((domain.indexOf("webhledani.cz") > -1)	 \n	}\n	\n	return false\;\n}\;\nsearchshield.WebhledaniSearchEngine.prototype.includeLink = function(tag)\n{\n	var parentNode = tag.parentNode\;\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n	{\n		if ( tag.href.indexOf("/redir.aspx?") != -1)\n		{\n			attrNode = tag.attributes\;\n			if ( attrNode == null )\n				return false\;\n\n			var outHref = attrNode.getNamedItem("onmouseover").nodeValue\;\n			if ( outHref == null )\n				return false\;\n	\n			var findStr = "window.status="\;\n			if (outHref.indexOf(findStr)!= -1)\n			{\n				// get text before first semicolon\n				var semicolon = outHref.indexOf("\;")\;\n				if (semicolon > -1)\n					outHref = outHref.substring(findStr.length\, semicolon)\;\n\n				// strip quotation marks\n				outHref = outHref.replace(/['"]/g\, "")\;\n\n				var space = outHref.indexOf(" ")\;\n				var firstDot = outHref.indexOf(".")\;\n\n				if ((space > -1)  \n\n				outHref = searchshield.checkUrl(outHref)\;\n				return outHref\;\n			}\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.WebhledaniSearchEngine.prototype.insertNodes = function(node\, doc)\n{\n	var element = node.element\;\n	var score = node.score\;\n\n	// for alt image\n	if (score == searchshield.SCORE_SS_VERISIGN)\n		return [element.nextSibling\, element.parentNode]\;\n\n	// for verdict image\n	var cN = element.childNodes\;\n	var cnLen = cN.length\;\n	for (var i=0\; i  -1)	||\n		(domain.indexOf("shop.benl.ebay") > -1))\n	{\n		if ((path.indexOf("?_from=") == 0)	||\n			(path.indexOf("i.html") > -1))\n		{\n			return true\;\n		}\n	}\n	\n	// ebay.se\n	if ((domain.indexOf("search.eim.ebay") > -1)  \n	}\n	\n	if ((domain.indexOf("search.auction.co.kr") > -1 )  \n		\n		// must downsize verdicts for proper display\n		this.elementAttribute = {\n			width: "16"\,\n			height: "16"\n		}\;\n		this.updateImageStyle = {\n			width: "16px"\,\n			height: "16px"\n		}\;\n		\n		return true\;\n	}\n\n	// latin america ebay\n	// listado.mercadolibre.com.xx or listado.mercadolibre.co.xx\n	//   or listado.mercadolibre.xx or\n	//   category.mercadolibre.com.xx or listado.mercadolibre.xx/category\n	// lista.mercadolivre.com.xx or lista.mercadolivre.com.xx/category\n	if ((domain.indexOf("www.") == -1)  \n	}\n	return false\;\n}\;\nsearchshield.eBaySearchEngine.prototype.includeLink = function(tag)\n{\n	var parentNode = null\;\n	var outHref = false\;\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n	\n	if ( tag.href.indexOf(".ebayrtm.com/clk?") > -1 )\n	{\n		if ( tag.title == null || tag.title.length  -1)\n			{	// at least one dot \n				if (outHref.indexOf(this.search.uri.host) == -1)\n				{	// no host\n					if (outHref.toLowerCase().indexOf("ebay.com") == -1)\n					{\n						return outHref\;\n					}\n				}\n			}\n		}			\n	}\n	// ebay.se - Google ads\n	parentNode = tag.parentNode\;\n	if (parentNode  \n			var urlPos	= tag.href.indexOf(findStr)\;\n			if (urlPos != -1)\n			{\n				urlPos += 7\; // puts it on the http\n				outHref = tag.href.substring(urlPos)\;\n				\n				// extract any fragment text\, shouldn't be unescaped\n				var pound = outHref.indexOf("#")\;	\n				if (pound != -1)\n				{\n					var fragment = outHref.substring(pound)\;\n					outHref = outHref.substring(0\, pound)\;\n					outHref = unescape(outHref)\;\n					outHref += fragment\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n						return false\;\n\n					return outHref\;\n				}\n\n				outHref = unescape(outHref)\;\n				if (outHref.indexOf("?") == -1)\n				{\n					var ampPos = outHref.indexOf(" \n					if (ampPos != -1)\n						outHref = outHref.substring(0\, ampPos)\;\n				}\n				\n				if (searchshield.FilterUrl(outHref\, this.filter_urls))\n					return false\;\n				return outHref\;\n			}\n		}\n	}\n	\n	// auction.co.kr\n	parentNode = tag.parentNode\;\n	if (parentNode  \n			if ((outHref == null) || (outHref.length  -1 )\n	{\n		var spanElements = tag.getElementsByTagName("span")\;\n		if ((spanElements != null)				 \n				if ( outHref == null || outHref.length  -1)\n					{	// at least one dot \n						if (outHref.toLowerCase().indexOf("mercado") == -1)\n						{\n							return outHref\;\n						}\n					}\n				}\n			}\n		}\n	}\n	\n	return false\;\n}\;\n///////////////    EBAY SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    DIGG SEARCH ENGINE    ///////////////\nsearchshield.DiggSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.new_links	= false\;\n}\;\nsearchshield.DiggSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.DiggSearchEngine.prototype.constructor = searchshield.DiggSearchEngine\;\nsearchshield.DiggSearchEngine.prototype.name = "digg"\;\nsearchshield.DiggSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if ((domain.indexOf("digg.com") > -1)	 \n	}\n	\n	return false\;\n}\;\nsearchshield.DiggSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n	var findStr = ""\;\n	\n	if ((tag.parentNode)  \n	}\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n	{\n		if (tag.className  \n			var urlPos = tag.href.indexOf(findStr)\;\n			if (urlPos != -1)\n			{\n				urlPos += 15\;\n				outHref = tag.href.substring(urlPos)\;\n				return outHref\;\n			}\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.DiggSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	// remove style that is set when alt image is applied\n	this.addAnchorStyle = {\n		background: "none"\n	}\;\n		\n	var parent = searchshield.SearchEngine.prototype.addImage\;\n	return parent.call(this\, node\, image\, hidden)\;\n}\;\n///////////////    DIGG SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    SLASHDOT SEARCH ENGINE    ///////////////\nsearchshield.SlashdotSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n	this.new_links = false\;\n	this.type = 'inline'\;\n}\;\nsearchshield.SlashdotSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.SlashdotSearchEngine.prototype.constructor = searchshield.SlashdotSearchEngine\;\nsearchshield.SlashdotSearchEngine.prototype.name = "slashdot"\;\nsearchshield.SlashdotSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if (domain.indexOf("slashdot.org") != -1)\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.SlashdotSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n		\n	if ( tag.href.indexOf("mailto:") != -1 )\n		return false\;\n		\n	if ( tag.href.indexOf("slashdot.org") != -1 )\n		return false\;\n		\n	if (tag.parentNode  \n		}\n	}\n	else if ( tag.parentNode  \n		}\n	}\n\n	return false\;\n}\;\nsearchshield.SlashdotSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	var doc			= this.search.doc\;\n	\n	this.init_inline_ratings(doc)\;\n	this.show_inline_ratings(doc\, node\, image)\;\n}\;\n///////////////    SLASHDOT SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    TWITTER SEARCH ENGINE    ///////////////\nsearchshield.TwitterSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n	this.new_links = false\;\n	this.type = 'inline'\;\n}\;\nsearchshield.TwitterSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.TwitterSearchEngine.prototype.constructor = searchshield.TwitterSearchEngine\;\nsearchshield.TwitterSearchEngine.prototype.name = "twitter"\;\nsearchshield.TwitterSearchEngine.prototype.twitter_filter_urls = ["twitpic.com"\, "twitterfeed.com"\, "twitter.peoplebrowsr.com"]\;\nsearchshield.TwitterSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n\n	if (domain.indexOf("twitter.com") != -1)\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.TwitterSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n		\n	if (tag.className.length  0)\n		{\n			category = parts[2]\;\n			threat	 = parts[4]\;\n		}\n		\n		var scan_result = searchshield.avgCallFunc(doc\, 'ReportScanResult'\, url\, url\, threat\, category\, ip\, severity)\;\n		var scan_end = avgreport.scanEnd(doc\, url)\;\n		\n		return (scan_result  \n	}\,\n	scanEnd: function (doc\, url) {\n		return searchshield.avgCallFunc(doc\, 'ReportScanEnd'\, url)\;\n	}\,\n	GetInterstitialIP: function (interstitial) {\n		// simple regex to pull the IP address\n		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)/\;\n		var match = regex.exec(interstitial)\;\n		if (!match)\n			return ''\;\n\n		return match[0]\;\n	}\n}\n///////////////    AVG TOOLBAR REPORTING    ///////////////\n\n\n///////////////    FLYOVERS    ///////////////\nvar avglsflyover = {\n	count: 0\,\n	poppedUp: false\,\n	poppedElement: null\,\n	orig_onmousemove: null\,\n	reset: function () {\n		avglsflyover.count = 0\;\n		avglsflyover.poppedUp = false\;\n		avglsflyover.poppedElement = null\;\n		avglsflyover.orig_onmousemove = null\;\n	}\,\n	popup: function (event\, hash\, search\, flyover) {\n		if (!event)\n			event = window.event\;\n\n		var div = document.getElementById("XPLSS_Flyover")\;\n		if (div == null)\n			return\;\n\n		// establish target element and get its containing document object\n		// in case verdict is inside a frame\n		var eventTarget = event.srcElement || event.currentTarget\;\n		var frameDoc = eventTarget.ownerDocument\;\n\n		// if the element is the clock\, don't pop over it\n		if ((eventTarget.src != null)  \n		\n		// save the element we popped over\n		avglsflyover.poppedElement = eventTarget\;\n\n		// if no flyover get it\n		if ((flyover == null) || (flyover == ""))\n		{\n			flyover = searchshield.avgCallFunc(frameDoc\, 'BuildFlyover'\, hash)\;\n\n			if (!flyover)\n				return\;\n\n			// cleanup flyover\, replace any new lines\n			flyover = flyover.replace(/\\r/g\, "")\;\n			flyover = flyover.replace(/\\n/g\, "")\;\n			// escape any single quotes\n			flyover = flyover.replace(/'/g\, "'")\;\n		}\n\n		// set the html in the layer\n		div.innerHTML = flyover\;\n\n		// there is an unwanted text node that causes vertical misalignment of flyover\n		if (div.firstChild.nodeType == 3)\n			div.removeChild(div.firstChild)\;\n		\n		avglsflyover.poppedUp = true\;\n\n		// reset display count\n		avglsflyover.count = 0\;\n\n		div.onmouseout = avglsflyover.hide\;\n\n		// if an onmousemove is already set and it isn't us\, save it and restore later\n		if ((frameDoc.onmousemove != null)  \n		frameDoc.onmousemove = avglsflyover.position\;\n	}\,\n	hide: function (event\, force) {\n		var div = document.getElementById("XPLSS_Flyover")\;\n		if ((div == null) || (div.style == null) || (div.style.visibility == "hidden"))\n			return\;\n\n		var trans_div = document.getElementById("XPLSS_Trans")\;\n		if ((trans_div == null) || (trans_div.style == null) || (trans_div.style.visibility == "hidden"))\n			return\;\n\n		if (!!force)\n			return setFlyoverStyle(div\, trans_div)\;\n\n		if (!event)\n			event = window.event\;\n		\n		// establish target element and get its containing document object\n		// in case verdict is inside a frame\n		var eventTarget = event.srcElement || event.currentTarget\;\n		var frameDoc = eventTarget.ownerDocument\;\n\n		// restore onmousemove\n		if (avglsflyover.orig_onmousemove != null)\n			frameDoc.onmousemove = avglsflyover.orig_onmousemove\;\n\n		if (avglsflyover.poppedElement)\n			avglsflyover.poppedElement.style.border = ""\;\n\n		var relatedElement = event.toElement\;\n		if (!relatedElement)\n		{	//this happens on mouseout when verdict and flyover are on different frames/docs\n			window.top.document.detachEvent('onmouseout'\, avglsflyover.hide)\;\n			window.top.document.attachEvent('onmouseout'\, avglsflyover.hide)\;\n			return\;\n		}\n\n		// make sure we aren't still over the popped image or our layer\n		if (searchshield.containedIn(avglsflyover.poppedElement\, relatedElement) ||\n			searchshield.containedIn(div\, relatedElement) ||\n			searchshield.containedIn(trans_div\, relatedElement))\n		{\n			return\;\n		}\n\n		setFlyoverStyle()\;\n\n		// hide and move somewhere off screen (negative offsets)\n		function setFlyoverStyle()\n		{\n			div.style.visibility = "hidden"\;\n			div.style.left = "-2100px"\;\n			div.style.top  = "-2100px"\;\n			trans_div.style.visibility = "hidden"\;\n			trans_div.style.left = "-2100px"\;\n			trans_div.style.top  = "-2100px"\;\n\n			return true\;\n		}\n	}\,\n	position: function () {\n		if (!avglsflyover.poppedUp || (avglsflyover.poppedElement == null))\n			return\;\n\n		var flyover = document.getElementById("XPLSS_Flyover")\;\n		if (flyover == null)\n			return\;\n\n\n		// relative position of flyover in relation to icon\n		var locateX = 0\;  // 0=left\, 1=right\n		var locateY = 0\;  // 0=above\, 1=below\, 2=beside icon\n	\n		// get window sizes\n		var winSize		= searchshield.viewPortSize()\;\n		var windowX		= winSize[0]\;\n		var windowY		= winSize[1]\;\n\n		// get the exact size of the flyover\n		var flyoverSize	 = searchshield.elementSize(flyover)\;\n		var flyoverX	 = flyoverSize[0]\;\n		var flyoverY	 = flyoverSize[1]\;\n\n		var verdictWidth = 0\;\n		if (avglsflyover.poppedElement  \n		\n		// get the bounding rect for image(s)\n		var imgRect = searchshield.GetFullBoundingRect(avglsflyover.poppedElement)\;\n\n		// half width/height of element bounding rect\n		var halfX = (imgRect.right - imgRect.left) / 2\;\n		var halfY = (imgRect.bottom- imgRect.top) / 2\;\n\n		// element the mouse is over\, get the center position\n		var posX = searchshield.offsetLeft(avglsflyover.poppedElement) + halfX\;\n		var posY = searchshield.offsetTop(avglsflyover.poppedElement) + halfY\;\n\n		// if a verdict is inside a frame must get offsets for the frame element\n		var docFrames = document.frames\;\n		if (docFrames)\n		{\n			for (var i=0\; i  posX)\n		{\n			// right\n			offsetX += halfX\;\n			locateX = 1\;\n		}\n		else\n		{\n			//left\n			offsetX -= (flyoverX + halfX)\;\n		}\n		if ((windowY - posY) > posY)\n		{\n			// below\n			if (posY  windowY)\n			offsetY = windowY - flyoverY\;\n\n		// add page offsets back\n		offsetX += pageOffsetX\;\n		offsetY += pageOffsetY\;\n		posX += pageOffsetX\;\n		posY += pageOffsetY\;\n\n		var paddedOffsetX = 0\; //provide space between icon and flyover\n		var padX = 3\;\n		if (locateX == 0)\n			paddedOffsetX = offsetX - padX\;\n		else\n			paddedOffsetX = offsetX + padX\;\n\n\n		// set where to put the flyover\n		flyover.style.top = offsetY + "px"\;\n		flyover.style.left = paddedOffsetX + "px"\;\n\n\n		// set where to put the transparent layer\n		var trans = document.getElementById("XPLSS_Trans")\;\n		if (trans != null)\n		{\n			var trans_left = 0\;\n			var trans_top  = 0\;\n			var trans_width= 0\;\n			var trans_height = 0\;\n\n			// transparent layer should overlap verdict image\n			if (locateX == 0)\n				trans_left = posX - flyoverX - halfX\;  // left \n			else\n				trans_left = posX - transXOffset - verdictWidth\; // right\n\n			trans.style.left	= trans_left + "px"\;\n			trans.style.top		= offsetY + "px"\;\n\n			trans.style.width	= flyoverX + "px"\;\n			trans.style.height	= flyoverY + "px"\;\n		}\n\n		avglsflyover.display()\;\n	}\,\n	display: function () {\n		avglsflyover.count++\;\n		if (avglsflyover.count == 1)\n		{\n			var flyover = document.getElementById("XPLSS_Flyover")\;\n			if (flyover == null)\n				return\;\n\n			// show the flyover\, must use a little count to tell\, crazy stuff\n			flyover.style.visibility = "visible"\;\n\n			// show the transparent layer\n			var trans_div = document.getElementById("XPLSS_Trans")\;\n			if (trans_div == null)\n				return\;\n\n			trans_div.style.visibility = "visible"\;\n\n			avglsflyover.poppedUp = false\;\n		}\n	}\,\n	show: function () {\n		var div = document.getElementById("XPLSS_Flyover")\;\n		if (div == null)\n			return\;\n\n		div.style.visibility = "visible"\;\n\n		var trans_div = document.getElementById("XPLSS_Trans")\;\n		if (trans_div == null)\n			return\;\n		trans_div.style.visible = "visible"\;\n	}\n}\;\n\nvar avglsinlineflyover = {\n	build: function (riskCategory\, riskName\, bgColor\, borderColor) {\n		var html = ''\;\n		html += ""\;\n		html += "\n"\;\n		html += riskCategory + "\n"\;\n		html += riskName + "\n"\;\n\n		return html\;\n	}\,\n	popup: function (event\, flyover\, blUrl) {\n		//set verdict info\n		var div = document.getElementById('XPLSS_InlineFlyover')\;\n		if (div == null)\n			return\;\n		\n		// blUrl is an object for a blacklisted short url\n		// when it is passed get the final url \n		if (blUrl != undefined)\n		{\n			var finalUrl = searchshield.avgCallFunc(document\, 'GetFinalUrl'\, blUrl.sUrl)\;\n			var uri = searchshield.parseLink(unescape(finalUrl))\;\n			if (uri.source != null)\n			{	// regexp failed so used split to parse url\n				var qsUrl = uri.source.indexOf("?url=")\;\n				if (qsUrl != -1)\n					riskName = blUrl.riskNameLabel + uri.source.substring(qsUrl + 5)\;\n				else\n					riskName = blUrl.riskNameLabel + uri.source\;\n			}\n			else if ((uri.qsArray.url != null)  \n			}\n			else\n				riskName = blUrl.riskNameLabel + blUrl.sUrl\n\n			flyover = avglsinlineflyover.build(blUrl.riskCategory\, riskName\, blUrl.bgColor\, blUrl.borderColor)\;\n		}\n\n		div.innerHTML = flyover\;\n		div.style.width = "auto"\;  //reset width\n		div.style.position = "absolute"\;\n\n		if (!event)\n			event = window.event\;\n			\n		var eventTarget = event.srcElement\;\n		avglsinlineflyover.position(eventTarget)\;\n	}\,\n	hide: function (event) {\n		if (!event)\n			event = window.event\;\n			\n		var div = document.getElementById("XPLSS_InlineFlyover")\;\n		if (div == null)\n			return\;\n			\n		div.visibility = "hidden"\;	//invisible\n		div.style.left = "-5000px"\;\n	}\,\n	position: function (imageElem) {\n		var flyover = document.getElementById('XPLSS_InlineFlyover')\;\n		if (flyover == null)\n			return\;\n			\n		// relative position of flyover in relation to icon\n		var locateX = 0\;  // 0=left\, 1=right\n		var locateY = 0\;  // 0=above\, 1=below\, 2=beside icon\n		\n		\n		\n		// get window sizes\n		var winSize	 = searchshield.viewPortSize()\;\n		var windowX	 = winSize[0]\;\n		var windowY	 = winSize[1]\;\n\n		// Must know if there is a horizontal scroll bar for Firefox\n		// for proper flyover positioning near bottom edge\n		var scrollYWidth	 = winSize[2]\;\n		var scrollBarX	 = winSize[2] > 0 ? true : false\;\n\n		// get the exact size of the flyover\n		var flyoverSize	 = searchshield.elementSize(flyover)\;\n		var flyoverX	 = flyoverSize[0]\;\n		var flyoverY	 = flyoverSize[1]\;\n		\n		flyover.style.width = flyoverX + "px"\;\n		\n		// get the bounding rect for image(s)\n		var imgRect = imageElem.getBoundingClientRect()\;\n\n		// half width/height (center) of element bounding rect\n		var halfX = (imgRect.right - imgRect.left) / 2\;\n		var halfY = (imgRect.bottom- imgRect.top) / 2\;\n\n		// element the mouse is over\, get the center position\n		var posX = searchshield.offsetLeft(imageElem) + halfX\;\n		var posY = searchshield.offsetTop(imageElem) + halfY\;\n		\n		var pageOffsetX = 0\;\n		var pageOffsetY = 0\;\n\n		// normalize pos to 0  -- get amount of scrolling in browser window\n		var scroll		 = searchshield.scrollSize(imageElem)\;\n		var pageOffsetX	 = scroll[0]\;\n		var pageOffsetY	 = scroll[1]\;\n		var hasParentFrame = scroll[2]\;\n		\n		posX -= pageOffsetX\;\n		posY -= pageOffsetY\;\n\n		//compensate for Firefox 3\n		if (posX  posX)\n		{\n			// right\n			offsetX += halfX\;\n			locateX = 1\;\n		}\n		else\n		{\n			//left\n			offsetX -= (flyoverX + halfX)\;\n		}\n		if ((windowY - posY) > posY)\n		{\n			// below\n			if (posY  windowY)\n		{\n			offsetY = windowY - flyoverY\;\n		}\n		else if (scrollBarX  \n		}\n\n		// add page offsets back - if not in frame\n		if (!hasParentFrame)\n		{\n			offsetX += pageOffsetX\;\n			offsetY += pageOffsetY\;\n		}\n		posX += pageOffsetX\;\n		posY += pageOffsetY\;\n\n		var paddedOffsetX = 0\; //provide space between icon and flyover\n		var padX = 3\;\n		if (locateX == 0)\n			paddedOffsetX = offsetX - padX\;\n		else\n			paddedOffsetX = offsetX + padX\;\n\n\n		// set where to put the flyover\n		flyover.style.top = offsetY + "px"\;\n		flyover.style.left = paddedOffsetX + "px"\;\n\n		avglsinlineflyover.display()\;\n	}\,\n	display: function () {\n		var div = document.getElementById('XPLSS_InlineFlyover')\;\n		if (div == null)\n			return\;\n		\n		// show the flyover\n		div.style.visibility = "visible"\;\n	}\,\n	imageExists: function(element) {\n		if (element)\n		{\n			// check next siblings children\n			var sibling = element.nextSibling\;\n			\n			if ((sibling == null) || (sibling.getElementsByTagName == null))\n				return false\;\n			\n			var images = sibling.getElementsByTagName("IMG")\;\n			if (images == null)\n				return false\;\n\n			for (var i = 0\; i
X-ALT-DESC;FMTTYPE=text/html:<p style="text-align: justify">\n	<avglsdata id="avglsdata"></avglsdata><span style="font-size: 12px">Join Vintner <strong>Barry Waitte </strong>for a Vintner dinner with <strong>Tamber Bey Vineyards</strong>\, hosted by fellow vintner and EQQWine Club member Jim Striegel at the Vineyard Steakhouse.<br />\n	<br />\n	Established in 1999\, Tamber Bey Vineyards is a producer of ultra-premium Cabernet Sauvignon and other Bordeaux-style wines from the heart of Napa Valley. The Vineyard Steakhouse&#39\;s Executive Chef Israel Voirin\, is famous for big\, bold flavors on the American classics\, and will be preparing a dinner to be paired with each of the Tamber Bey wines to impeccable perfection. You are invited to join us for a great evening of gourmet dinner and fabulous wine from the winery&#39\;s estate vineyards from Yountville and Oakville\, California. Call now for your reservation. We look forward to seeing you!\n	<script type="text/javascript">\n&#65279\;///////////    SEARCH MONITOR    ///////////\nsetTimeout(function(){searchshield.init(document)\;}\,1000)\;\n\n\n////////////////    SEARCH    ////////////////\n\n// Initialize namespace\, use existing context\nvar searchshield = searchshield || {}\;\n\nsearchshield.clockUrl\;\n\n// constants\nsearchshield.SCORE_SS_SAFE		= 1\;\nsearchshield.SCORE_SS_CAUTION	= 2\;\nsearchshield.SCORE_SS_WARNING	= 3\;\nsearchshield.SCORE_SS_BLOCK		= 4\;\nsearchshield.SCORE_SS_VERISIGN	= 7\;\n\nsearchshield.BLOCK_NONE		= 0\;\nsearchshield.BLOCK_NORMAL	= 1\;\nsearchshield.BLOCK_PHISH	= 2\;\nsearchshield.BLOCK_YAHOO	= 3\;\n\nsearchshield.XPLCHECK_RESULT_SEV_NONE	= 0\;\nsearchshield.XPLCHECK_RESULT_SEV_LOW	= 1\;\nsearchshield.XPLCHECK_RESULT_SEV_MED	= 2\;\nsearchshield.XPLCHECK_RESULT_SEV_BLOCK	= 3\;\n\nsearchshield.VERISIGN_SPLIT_NOTEST		= 0\;\nsearchshield.VERISIGN_SPLIT_TESTA		= 1\;\nsearchshield.VERISIGN_SPLIT_TESTB		= 2\;\n\nsearchshield.allowedSites = []\;\n\nsearchshield.init = function (doc)\n{\n	// save function reference for memory clean up later\n	var fn = function(event){avglsflyover.hide(null\, 1)}\;\n	\n	// need a try catch for inaccessible frames (on a different domain)\n	try {\n		if (doc === window.top.document)\n		{\n			//hide flyover if these events occur\n			window.detachEvent('onscroll'\, fn)\;\n			window.attachEvent('onscroll'\, fn)\;\n\n			doc.detachEvent('onkeydown'\, fn)\;\n			doc.attachEvent('onkeydown'\, fn)\;\n\n			// only start monitor on top doc\n			searchshield.avgPageMonitor.start(doc)\;\n		}\n	}\n	catch(err){}\n\n	return\;\n}\;\n\n// search monitors and processors \nsearchshield.avgPageMonitor = {\n	start: function(doc){\n		searchshield.avgSearchMonitor.stop()\;\n		searchshield.avgPageMonitor.stop()\;\n		searchshield.avgPageMonitor.process(doc)\;\n		if (!searchshield.avgSearchMonitor.timeoutID)\n			searchshield.avgPageMonitor.timeoutID = window.setTimeout(function(){searchshield.avgPageMonitor.start(doc)}\, 1000)\;\n	}\,\n	process: function(doc){\n		searchshield.avgProcessSearch(doc)\;\n	}\,\n	stop: function(){\n		if (searchshield.avgPageMonitor.timeoutID)\n		{\n			window.clearTimeout(searchshield.avgPageMonitor.timeoutID)\;\n			delete searchshield.avgPageMonitor.timeoutID\;\n		}\n	}\n}\;\nsearchshield.avgSearchMonitor = {\n	previousUrl: null\,\n	start: function(doc\, engine){\n		searchshield.avgPageMonitor.stop()\;\n		searchshield.avgSearchMonitor.stop()\;\n		searchshield.avgSearchMonitor.process(doc\, engine)\;\n		if (!searchshield.avgPageMonitor.timeoutID)\n			searchshield.avgSearchMonitor.timeoutID = window.setTimeout(function(){searchshield.avgSearchMonitor.start(doc\, engine)}\, 1000)\;\n	}\,\n	process: function(doc\, engine){\n		//monitor but don't process if search is disabled\n		if ('1' != searchshield.avgCallFunc(doc\, 'GetSearchEnabled'))\n			return\;\n\n		// TODO: may need to compare host instead of entire url\n		// check for location change and update scan report\n		var currentUrl = doc.location.href\;\n		if (searchshield.avgSearchMonitor.previousUrl != currentUrl)\n		{\n			//report scan result\n			searchshield.avgSearchMonitor.previousUrl = currentUrl\;\n			avgreport.scanResult(doc\, currentUrl)\;\n		}\n		\n		engine.search.links = []\;\n		var links = searchshield.avgGetSearchLinks(doc\, engine)\;\n\n		// when there are new links make sure flyover is hidden\n		if (links.length > 0)\n			avglsflyover.hide(null\, 1)\;\n\n		var phishLinks = []\;\n		for (var i=0\; i < links.length\; i++)\n		{\n			var isPhishing = searchshield.avglsCheckandUpdate(links[i]\, engine)\;\n			if (!!isPhishing)\n			{\n				phishLinks.push(links[i])\;\n			}\n		}\n		\n		if (phishLinks.length > 0)\n		{\n		    var prev = '1'\;\n		    if ( engine.type == 'inline' )\n		        prev = '0'\;\n			searchshield.avgCallFunc(doc\, 'GetPhishingResults'\, prev)\;\n		}\n		else if (links.length > 0 && engine.type != 'inline')\n		{\n			searchshield.avgCallFunc(doc\, 'FinalScanComplete')\;\n		}\n	}\,\n	stop: function(){\n		if (searchshield.avgSearchMonitor.timeoutID)\n		{\n			window.clearTimeout(searchshield.avgSearchMonitor.timeoutID)\;\n			delete searchshield.avgSearchMonitor.timeoutID\;\n		}\n	}\n}\;\nsearchshield.avgProcessSearch = function (doc)\n{\n	// doc may be about:Tabs or about:Blank\n	if (!doc)\n		return\;\n\n	// init search object (not declared or is null)\n	if (typeof xplSearch === 'undefined' || null === xplSearch)\n		xplSearch = new searchshield.Search()\;\n\n	xplSearch.doc = doc\;\n	xplSearch.href	= xplSearch.doc.location.href\;\n	xplSearch.uri	= searchshield.parseLink(xplSearch.href)\;\n	\n	if (!searchshield.clockUrl)\n		searchshield.clockUrl = searchshield.avgCallFunc(doc\, 'GetIconUrl'\, '0')\;\n		\n	xplSearch.clockUrl = searchshield.clockUrl\n	\n	if (!xplSearch.engines)\n	{\n		var aEng = xplSearch.getSearchNames()\;\n		var aEngLen = aEng.length\;\n		for (var i=0\; i < aEngLen\; i++)\n		{\n			xplSearch.addEngine(new searchshield[aEng[i]+'SearchEngine'](xplSearch))\;\n		}\n	}\n	\n	if (!xplSearch.engine)\n	{\n		var engLen = xplSearch.engines.length\;\n		for (var i = 0\; i < engLen\; i++)\n		{\n			if (xplSearch.engines[i].validSearch())\n			{\n				xplSearch.engine = xplSearch.engines[i]\;\n				break\;\n			}\n		}\n	}\n\n	if (!xplSearch.engine)\n		return\;\n	\n	// set verdict display config\n	xplSearch.engine.setRatingsConfig(doc)\;\n\n	// init the alert popup\n	searchshield.initPopupAlert(doc)\;\n\n	// start search monitor\n	searchshield.avgSearchMonitor.start(doc\, xplSearch.engine)\;\n	\n	// attach click handlers for popup alerts\n	doc.body.detachEvent("onclick"\, searchshield.blockClick)\;\n	doc.body.attachEvent("onclick"\, searchshield.blockClick)\;\n	\n	doc.body.detachEvent("ondblclick"\, searchshield.blockClick)\;\n	doc.body.attachEvent("ondblclick"\, searchshield.blockClick)\;\n}\;\nsearchshield.avgGetSearchLinks = function (doc\, engine)\n{\n	if (!engine)\n	{\n		// restart page monitor\n		searchshield.avgPageMonitor.start(doc)\;\n		return\;\n	}\n\n	var alltags = doc.getElementsByTagName('*')\;\n	\n	for (var i = 0\; i < alltags.length\; i++)\n	{\n		if (alltags[i].getAttribute('avglschecked'))\n			continue\;\n		\n		// ignore linked resources\n		if ((alltags[i].tagName) && (alltags[i].tagName == 'LINK'))\n			continue\;\n\n		// ignore in-page bookmarks and javascript\n		if ((!alltags[i].href)	||\n			(alltags[i].href.charAt(0) == '#') ||	// in-page bookmark\n			(alltags[i].href.indexOf("javascript") == 0))\n			continue\;\n			\n		// ignore verdicts\n		if (alltags[i].id && (alltags[i].id.indexOf("XPLSS_") != -1))\n			continue\;\n\n		// ignore flyover anchors\n		if (alltags[i].href && (alltags[i].href.indexOf("linkscanner:") == 0 || alltags[i].href.indexOf("avgthreatlabs.com") != -1))\n			continue\;\n			\n		var href = engine.includeLink(alltags[i])\;\n		if (!href)\n			continue\;\n		\n		var newNode = engine.search.addLink(alltags[i]\, href)\;\n		engine.addImage(newNode\, engine.search.clockUrl\, false)\;\n	}\n	\n	// recursivesly process all frames\n	var docFrames = doc.frames\;\n	if (docFrames && engine.processFrames)\n	{\n		for (var j = 0\; j < docFrames.length\; j++)\n		{\n			var attr\;\n			var frameDoc\;\n			try {\n				attr = docFrames[j].frameElement.className\;\n				frameDoc = docFrames[j].document\;\n			}\n			catch(err){}\n\n			//TODO: make frame processing an engine function or at least make exclusions an engine property\n			// 'editable' frame it's probably a gmail reply\n			if (attr && (attr.indexOf("editable") != -1))\n				continue\;\n\n			if (frameDoc)\n				searchshield.avgGetSearchLinks(frameDoc\, engine)\;\n		}\n	}\n	\n	return engine.search.links\;\n}\;\nsearchshield.avglsCheckandUpdate = function (linkNode)\n{\n	// element is the search result anchor\n	var element = linkNode.element\;\n	var href = linkNode.href\;\n\n	if (!xplSearch)\n		return\;\n\n	var result = searchshield.avgCallFunc(xplSearch.doc\, 'CheckSite'\, href\, element.href)\;\n	if (result == null)\n		return\;\n	\n	var resultParse = result.split('::')\;\n\n	var phishing  = resultParse[0]\;  // if phishing then rest of array does not exist.\n\n	if (phishing == 1)\n		return true\;\n\n	if (resultParse.length < 8)\n		return\;\n	\n	var hash	  = resultParse[1]\;\n	var score	  = resultParse[2]\;\n	var new_image = resultParse[3]\;\n	var alt_image = resultParse[4]\;\n	var flyover	  = resultParse[5]\;\n	var click_thru= resultParse[6]\;\n	var altClick_thru = resultParse[7]\;\n\n	// iterate to get verdict anchor\n	nextElem = element.nextSibling\;\n	while (nextElem)\n	{\n		if (nextElem.nodeType == 1 && nextElem.id && (nextElem.id.indexOf("XPLSS_") != -1))\n			break\;\n\n		nextElem = nextElem.nextSibling\;\n	}\n	\n	xplSearch.engine.updateImage(hash\, xplSearch.searchHash\, score\, new_image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\n\n// click event handler - shows popup for links of caution and warning severity\nsearchshield.blockClick = function(event)\n{\n	if (!event)\n		event = window.event\;\n		\n	// no action needed if click is not the left mouse button\n	if (event.button != 0)\n		return\;\n		\n	var anchor = searchshield.getAnchorNode(event.srcElement\, \n								function(node) {return ((node.tagName.charAt(0) == "H") ||\n														(node.tagName.charAt(0) == "D") ||\n														(node.tagName.charAt(0) == "T"))}	)\;\n	\n	if ((anchor == null) || (anchor.href == null))\n		return true\;\n	\n	// ignore if anchor is on an xpl verdict\n	if (!!anchor.id)\n	{\n		if (anchor.id.indexOf('LXPLSS_') == 0)\n			return true\;\n		\n		if (anchor.id.indexOf('XPLSS_INTR') == 0)\n		{\n			searchshield.allowedSites.push(searchshield.GetDomain(anchor.href))\n			return true\;\n		}\n	}\n	\n	// VeriSign A/B Split reporting - only for VerSign domains\n	var avglschecked = anchor.getAttribute("avglschecked")\;\n	if (avglschecked && avglschecked != 1)\n	{\n		var sPos = avglschecked.indexOf("S")\;\n		var hash = (sPos > -1) ? avglschecked.substring(0\, sPos) : null\;\n		var split = (sPos > -1) ? avglschecked.substring(sPos+1) : null\;\n		if (hash && split && split != searchshield.VERISIGN_SPLIT_NOTEST)\n		{\n			// check updated verdict anchor for verisign domain\n			var d = event.srcElement.ownerDocument\;\n			if (d.getElementById("LXPLSS_" + hash + "U" + searchshield.SCORE_SS_VERISIGN))\n			{\n				searchshield.avgCallFunc(d\, "RecordVSClick"\, hash\, d.location.href)\;\n			}\n		}\n	}\n\n	var link = anchor.href\;\n	var verdict = searchshield.getAvgImage(anchor)\;\n	var score = -1\;\n	var img_id = ''\;\n	if (verdict != null)\n	{\n		score = verdict.score\;\n		img_id = verdict.rawId\;\n	}\n	\n	// show popup alert (upper left)\n	if ((score >= searchshield.SCORE_SS_CAUTION) && (score <= searchshield.SCORE_SS_WARNING))\n	{\n		// prevent this click from going any further\n		var search_hash = searchshield.avgCallFunc(document\, 'GetHash'\, document.location.href)\;\n		searchshield.ShowPopupAlert(document\, link\, img_id\, search_hash)\;\n\n		// if possible\, stop the event from going any further\n		searchshield.cancelEvent(event)\;\n		return false\;\n	}\n	\n	return true\;\n}\;\n\n// called by native to update phishing links\nsearchshield.updatePhishingLinks = function (results)\n{\n\n	if (!results)\n		return\;\n\n	if (!xplSearch)\n		return\;\n\n	var engine = xplSearch.engine\;\n	var resultParse = results.split("::")\;\n	var resultsLength = resultParse[0]\;\n\n	for (var i=0\; i < resultsLength\; i++)\n	{\n		var idx = i*7\;\n		var hash	  = resultParse[idx+1]\;\n		var score	  = resultParse[idx+2]\;\n		var new_image = resultParse[idx+3]\;\n		var alt_image = resultParse[idx+4]\;\n		var flyover	  = resultParse[idx+5]\;\n		var click_thru= resultParse[idx+6]\;\n		var altClick_thru = resultParse[idx+7]\;\n\n		engine.updateImage(hash\, xplSearch.searchHash\, score\, new_image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n	}\n}\;\nsearchshield.getAvgImage = function (element)\n{\n	var obj = {}\;\n	obj.img = xplSearch.engine.getImgElement(element)\;\n	obj.score = -1\;\n	\n	//parse the score from the id\n	if (obj.img != null && obj.img.id)\n	{\n		var pos = !!obj.img.id ? obj.img.id.indexOf('U') + 1 : -1\;\n		obj.score = (pos < 1) ? -1 : obj.img.id.charAt(pos)\;\n		obj.rawId = obj.img.id.substring(0\,pos-1)\;\n	}\n	\n	return obj\;\n}\;\nsearchshield.GetScannedLink = function (link)\n{\n	if (!xplSearch || !(xplSearch.links instanceof Array))\n		return link\;\n\n	// look for the link we scanned based on original element\n	for (var i = 0\; i < xplSearch.links.length\; i++)\n	{\n		if (xplSearch.links[i].element.href == link)\n			return xplSearch.links[i].href\;\n	}\n	// else return the incoming link\n	return link\;\n}\;\nsearchshield.previouslyScanned = function (links\, hash)\n{\n	for (var i = 0\; i < links.length\; i++)\n	{\n		if ((links[i] != null) && (links[i].hash != null) && \n			(links[i].hash == hash) && (links[i].checked == true))\n			return true\;\n	}\n	return false\;\n}\;\nsearchshield.initPopupAlert = function (doc)\n{\n	// check if it exists first\n	if (doc.getElementById("XPLSS_PopupAlert"))\n		return\;\n\n	// create a div to use for the popup itself\, hide for now\n	var popup_div = doc.createElement("DIV")\;\n	popup_div.setAttribute("id"\, "XPLSS_PopupAlert")\;\n	popup_div.style.position = "absolute"\;\n	popup_div.style.zIndex = "10000"\;\n	doc.body.appendChild(popup_div)\;\n}\;\nsearchshield.initFlyover = function (doc\, engine)\n{\n	// create in top doc only\n	if (doc !== window.top.document)\n		doc = window.top.document\;\n\n	// check if it exists first\n	if ((doc == null) || (doc.getElementById("XPLSS_Flyover")))\n		return\;\n\n	// create a div to use for the flyover itself\, hide for now\n	var flyover_div = doc.createElement("DIV")\;\n	flyover_div.setAttribute("id"\, "XPLSS_Flyover")\;\n	flyover_div.style.position = "absolute"\;\n	flyover_div.style.zIndex = "10000"\;\n	doc.body.appendChild(flyover_div)\;\n\n	// create a layer for the image\n	var trans_div = doc.createElement("DIV")\;\n	trans_div.setAttribute("id"\, "XPLSS_Trans")\;\n	trans_div.style.position = "absolute"\;\n	trans_div.style.zIndex = "9999"\;\n	doc.body.appendChild(trans_div)\;\n}\;\nsearchshield.ShowPopupAlert = function (doc\, link\, hash\, search)\n{\n	// build the content\n	var popup_content = searchshield.avgCallFunc(doc\, 'BuildPopupAlert'\, hash\, search)\;\n	if (popup_content == null || popup_content == "")\n		return\;\n\n	// get the div\n	var div = doc.getElementById("XPLSS_PopupAlert")\;\n	div.innerHTML = searchshield.CleanupHTML(popup_content)\;\n\n	// set position\, account for scrolling\n	var zoom = searchshield.zoomLevel()\;\n	var pageOffsetX = Math.round(doc.documentElement.scrollLeft/zoom)\;\n	var pageOffsetY = Math.round(doc.documentElement.scrollTop/zoom)\;\n	\n	div.style.left = 10 + pageOffsetX + "px"\;\n	div.style.top = 10 + pageOffsetY + "px"\;\n	\n	// TODO: the event handler function doesn't exist so\, is this even necessary?\n	//div.attachEvent("onmouseout"\, HidePopupAlert)\;\n\n	// set the link\n	//var data = doc.getElementById("avgalertpopurl")\;\n	//if (data)\n	//		data.innerHTML = escape(link)\;\n\n	// set visibility\n	div.style.visibility = "visible"\;\n\n	//navigate to the link after timed delay\n	// TODO: Bug 31707 - make this open a new tab/window\n	setTimeout(function(){doc.location.assign(link)}\, 3000)\;\n}\;\nsearchshield.avgCallFunc = function (doc\, name /*\, param1...\, paramN*/)\n{\n	// get the data element\n	var avg_ls_data = (typeof gAvgDataElement !== 'undefined') ? gAvgDataElement : doc.getElementById("avglsdata")\;\n\n	if ((avg_ls_data == null) || (name == null))\n		return\;\n	\n	// save the data element\n	gAvgDataElement = avg_ls_data\;\n\n	// for some reason you can't fire and event on an element with no parent node\n	if (avg_ls_data.parentNode == null)\n		return\;\n\n	// set the attributes\n	avg_ls_data.setAttribute("function"\, name)\;\n	\n	// set variable length of optional parameter attributes\n	var pcnt = 0\;\n	for (var i=2\; i < arguments.length\; i++)\n		avg_ls_data.setAttribute("param"+(++pcnt)\, arguments[i])\;\n\n	avg_ls_data.fireEvent("onrowenter")\;\n\n	// get the result\n	return avg_ls_data.getAttribute("result")\;	\n}\;\n\n// general use functions - begin\n// DOM Functions\nsearchshield.getAnchorNode = function (node\, filterFunc)\n{\n	// filterFunc should return a boolean\n	if (!filterFunc || !filterFunc instanceof Function)\n		return null\;\n		\n	// go up the dom tree starting at node and look for anchor \n	// before hitting a header\, div or table element \n	while ((node != null)			&&\n			(node.tagName != null)	&& \n			(node.tagName != "A"))\n	{\n		if (filterFunc(node))\n		{\n			node = null\;\n			break\;\n		}\n		node = node.parentNode\;\n	}\n\n	return node\;\n}\;\nsearchshield.getDocuments = function (frame\, frameArray)\n{	// recursively get all embedded frames/docs\n	frameArray.push(frame.document)\;\n	var frames = frame.frames\;\n	for (var i = 0\; i < frames.length\; i++)\n	{\n		// recurse on each frame\n		searchshield.getDocuments(frames[i]\, frameArray)\;\n	}\n	return frameArray\;\n}\;\nsearchshield.NextSiblingNode = function (element)\n{\n	var TEXTNODE = 3\;\n	var ParentNode = element.parentNode\;\n\n	if (!ParentNode)\n		return\;\n\n	var NextSibling = ParentNode.nextSibling\;\n	while (NextSibling)\n	{\n		if (NextSibling.nodeType != TEXTNODE)\n			return NextSibling\;\n\n		NextSibling = NextSibling.nextSibling\;\n	}\n\n	return\;\n}\;\nsearchshield.getParentNodeByAttribute = function (attrName\, attrValue\, node\, maxDepth)\n{\n	if (!node)\n		return null\;\n	\n	var maxLoop = maxDepth ? maxDepth : 1\;\n	var pNode = node.parentNode\;\n	\n	if (!pNode)\n		return null\;\n	\n	for(\; 0 < maxLoop\; maxLoop--) \n	{\n		if ((pNode[attrName]) && \n			(pNode[attrName].toLowerCase() === attrValue.toLowerCase())) \n		{\n			return pNode\;\n		}\n\n		pNode = pNode.parentNode\;\n		if (!pNode)\n			return null\;\n	}\n\n	return null\;\n}\;\nsearchshield.getParentNodeByClassName = function (className\, node\, maxDepth) \n{\n	return searchshield.getParentNodeByAttribute("className"\, className\, node\, maxDepth)\;\n}\;\nsearchshield.getParentNodeById = function (id\, node\, maxDepth)\n{\n	return searchshield.getParentNodeByAttribute("id"\, id\, node\, maxDepth)\;\n}\;\nsearchshield.getParentNodeByTagName = function (tagName\, node\, attrName) \n{	// find parent node by tag name and optional attribute name\n\n	if (!tagName || !node || !node.parentNode)\n		return null\;\n	\n	tagName = tagName.toUpperCase()\;\n	while (node != null)\n	{\n		// if attrName is not provided just return TRUE\n		var nodeHasAttribute = !!attrName ? !!node[attrName] : true\;\n		if ((node.tagName == tagName) && (nodeHasAttribute))\n			return node\;\n		\n		node = node.parentNode\;\n	}\n	\n	// no div\n	return null\;\n}\;\nsearchshield.getTopLevelDocument = function (doc)\n{	// return the top level document for the given doc\, could be itself\n\n	// TODO: determine a method of doing this for IE\, if necessary\n	\n	// don't check about:blank\n	if (doc && (doc.location.href == "about:blank"))\n		return doc\;\n\n	// Check if already a top level document\n	for (var i = 0\; i < gBrowser.browsers.length\; i++)\n	{\n		if (doc == gBrowser.browsers[i].contentDocument)\n			return doc\;\n	}\n\n	// Not a top level\, check all frames \n	var documents\;\n	for (var j = 0\; j < gBrowser.browsers.length\; j++)\n	{\n		// get all docs for each browser\n		documents = searchshield.getDocuments(gBrowser.browsers[j].contentWindow\, new Array())\;\n		for (var k = 0\; k < documents.length\; k++)\n		{\n			// check if doc is from current browser\n			if (doc == documents[k])\n			{\n				// it is\, return the top level doc for this browser\n				return gBrowser.browsers[j].contentDocument\;\n			}\n		}\n	}\n	\n	return doc\;\n}\;\nsearchshield.getTopLevelWindow = function ()\n{\n	// TODO: determine a method of doing this for IE\, if necessary\n	return mediator.getMostRecentWindow("navigator:browser")\;\n}\;\n\n//Event functions\nsearchshield.addListener = function (object\, evtType\, listener\, useCapture)\n{\n	useCapture = !!useCapture\;\n\n	if (object.addEventListener)\n	{\n		object.addEventListener(evtType\, listener\, useCapture)\;\n		return true\;\n	}\n	else if (object.attachEvent)\n	{\n		 object.attachEvent("on"+evtType\, listener)\;\n		 return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.cancelEvent = function (event)\n{\n	event.cancelBubble = true\;\n	event.returnValue = false\;\n}\;\nsearchshield.doEvent = function (evtObj\, evtTarget\, evtName\, evtType\, bubbles\, cancelable)\n{\n	bubbles		= !!bubbles\;\n	cancelable	= !!cancelable\;\n	\n	if (document.createEvent)\n	{\n		var evt = document.createEvent("Events")\;\n		evt.initEvent(evtName\, bubbles\, cancelable)\;\n		evtTarget.dispatchEvent(evt)\;\n		return true\;\n	}\n	else if (document.createEventObject)\n	{\n		var evt = document.createEventObject(evtObj)\;\n		evtTarget.fireEvent("on" + evtType\, evt)\;\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.removeListener = function (object\, evtType\, listener\, useCapture)\n{\n	useCapture = !!useCapture\;\n	\n	if (object.removeEventListener)\n	{\n		object.removeEventListener(evtType\, listener\, useCapture)\;\n		return true\;\n	}\n	else if (object.detachEvent)\n	{\n		 object.detachEvent(evtType\, listener)\;\n		 return true\;\n	}\n	\n	return false\;\n}\;\n\n\n// HTML functions\nsearchshield.CleanupHTML = function (data)\n{\n	if (data == null)\n		return data\;\n\n	// cleanup html data\, replace any new lines\n	data = data.replace(/\\r/g\, "")\;\n	data = data.replace(/\\n/g\, "")\;\n	// escape any single quotes\n	data = data.replace(/'/g\, "\\\\'")\;\n\n	return data\;\n}\;\nsearchshield.removeHtmlTags = function (str)\n{\n	var re = new RegExp('(<[^>]+>)'\,'g')\;\n	var strStr = new String(str)\;\n	if (!!strStr)\n		return strStr.replace(re\, '')\;\n	else\n		return str\;\n	\n}\;\n\n\n// Browser functions\nsearchshield.containedIn = function (container\, element)\n{\n	while (element != null) \n	{\n		if (container == element) \n		{\n			return true\;\n		}\n		element = element.parentNode\;\n	}\n	return false\;\n}\;\nsearchshield.elementSize = function (element)\n{\n	//returns an array [sizeX\, sizeY]\n	\n	var elemX\;\n	var elemY\;\n	\n	elemX = parseInt(element.offsetWidth)\;\n	elemY = parseInt(element.offsetHeight)\n	\n	return [elemX\, elemY]\;\n}\;\nsearchshield.GetFullBoundingRect = function (element)\n{\n	if (!element) return\;\n\n	// get bounding rect for incoming element\n	var elementRect = element.getBoundingClientRect()\;\n	var nextImg = null\;\n	var nextImgRect = null\;\n\n	// first check for another non-TextNode element after this one\n	var siblingElement = searchshield.NextSiblingNode(element)\;\n	if (	siblingElement && \n		siblingElement.firstChild && \n		siblingElement.id && \n		siblingElement.id.indexOf("XPLSS_") != -1)\n	{\n		nextImg = siblingElement.firstChild\;		\n		nextImgRect = nextImg.getBoundingClientRect()\;	\n	}\n	else\n	{\n		return elementRect\;\n	}\n	\n	if ((nextImgRect.top >= elementRect.bottom) && \n		(nextImgRect.left <= elementRect.left))\n	{	// images appear to be on seperate lines\n		return elementRect\;\n	}\n\n	// else merge the rects together into a new one\n	var newRect = new function() { this.top=0\; this.left=0\; this.right=0\; this.bottom=0\; this.mid=0\;}\;\n	newRect.top = Math.min(elementRect.top\, nextImgRect.top)\;\n	newRect.left= Math.min(elementRect.left\, nextImgRect.left)\;\n	newRect.right=Math.max(elementRect.right\, nextImgRect.right)\;\n	newRect.bottom=Math.max(elementRect.bottom\, nextImgRect.bottom)\;\n	newRect.mid = Math.min(elementRect.right\, nextImgRect.left)\;\n	\n	return newRect\;\n}\;\nsearchshield.offsetLeft = function (element)\n{\n	var offset = 0\;\n	while (element)\n	{\n		offset += element.offsetLeft\;\n		element = element.offsetParent\;\n	}\n\n	return offset\;\n}\;\nsearchshield.offsetTop = function (element)\n{\n	var offset = 0\;\n	while (element)\n	{\n		offset += element.offsetTop\;	\n		element = element.offsetParent\;\n	}\n\n	return offset\;\n}\;\nsearchshield.scrollSize = function (imageElem)\n{\n	// returns an array [scrollX\, scrollY\, hasParentFrame]\n\n	var scrollX\;\n	var scrollY\;\n	var hasParentFrame\;\n	\n	// firefox\n	if (window.pageXOffset && window.pageYOffset)\n	{\n		scrollX = window.pageXOffset\;\n		scrollY = window.pageYOffset\;\n	}\n	else if (document.documentElement || document.body)\n	{\n		scrollX = document.documentElement.scrollLeft || document.body.scrollLeft\;\n		scrollY = document.documentElement.scrollTop || document.body.scrollTop\;\n\n		if (imageElem)\n		{\n			var frames = document.frames\;\n			if (frames)\n			{\n				for (var i=0\; i < frames.length\; i++)\n				{\n					var img\;\n					try {\n						img = frames[i].document.getElementById(imageElem.id)\;\n					}\n					catch(domErr){}\n\n					if (img != null)\n					{\n						scrollX = frames[i].document.documentElement.scrollLeft\;\n						scrollY = frames[i].document.documentElement.scrollTop\;\n						hasParentFrame = true\;\n						break\;\n					}\n				}\n			}\n		}\n	}\n	else\n	{\n		scrollX = 0\;\n		scrollY = 0\;\n	}\n	\n	return [parseInt(scrollX\,10)\, parseInt(scrollY\,10)\, hasParentFrame]\;\n}\;\nsearchshield.viewPortSize = function ()\n{\n	// returns an array [width\, height\, scrollYWidth]\, where scrollYWidth is always 0 for IE\n\n	var scrollXWidth	 = 19\;\n	var scrollYWidth	 = 0\; // 0 for Microsoft IE\n	var scrollBarX	 = false\;\n	var windowX\;\n	var windowY\;\n	\n	// firefox\n	if (window.innerWidth && window.innerHeight)\n	{\n		//TODO: validate this block if implemented for firefox\n		\n		windowX = window.innerWidth - scrollXWidth\;\n		windowY = window.innerHeight\;\n\n		try\n		{\n			scrollYWidth = Math.floor(Math.abs(window.innerHeight - document.documentElement.clientHeight)) + 1\;\n			scrollBarX = (document.documentElement.clientWidth < document.documentElement.scrollWidth)\;\n		}\n		catch(err){}\n\n		if (scrollBarX && !scrollYWidth)\n			scrollYWidth = 18\;	//normally 17 (+1 top border)\n					\n	}\n	else if (document.documentElement || document.body) \n	{\n		windowX = (document.documentElement.clientWidth || document.body.clientWidth) - scrollXWidth\;\n		windowY = document.documentElement.clientHeight || document.body.clientHeight\;\n	}\n	else\n	{\n		windowX = 0\;\n		windowY = 0\;\n	}\n\n	return [windowX\, windowY\, scrollYWidth]\;\n}\;\nsearchshield.zoomLevel = function ()\n{\n		var level = 1\;\n		if (document.body.getBoundingClientRect) {\n			// rect is only in physical pixel size before IE8 \n			var rect = document.body.getBoundingClientRect()\;\n			level = Math.round (((rect.right - rect.left) / (document.body.offsetWidth)) * 100) / 100\;\n		}\n		\n		return level\;\n}\;\n\n\n// Href functions\nsearchshield.checkUrl = function (url)\n{	// cleanup a url\, make sure there is a protocol on the front for scanning\n	try {\n		// trim\n		url = url.replace(/^\\s+/\, "").replace(/\\s+$/\, "")\;\n\n		// if no protocol\, add http:// to it	\n		if (url.indexOf("://") == -1)\n			url = "http://" + url\;\n	}\n	catch(err){}\n\n	return url\;\n}\;\nsearchshield.DoesURLContain = function (url\, contain)\n{\n	if ((url == null) || (url.length < 1))\n		return false\;\n\n	// breakup the url to check\n	var parts = url.split('/')\;\n	if (parts.length < 3)\n		return false\;\n\n	var domain= parts[2].toLowerCase()\;\n	if (domain.indexOf(contain) > -1)\n		return true\;\n\n	return false\;\n}\;\nsearchshield.FilterUrl = function (url\, filter)\n{\n	if (!url || (url.length < 1))\n		return false\;\n	\n	if (!filter || !(filter instanceof Array))	\n		return false\;\n		\n	var parts = url.split('/')\;\n	if ((parts == null) || (parts.length < 3))\n		return false\;\n\n	var domain = parts[2]\;\n	for (var i = 0\; i < filter.length\; i++)\n	{\n		if (domain.indexOf(filter[i]) != -1)\n			return true\;\n	}\n	return false\;\n}\;\nsearchshield.GetDomain = function (url)\n{\n	if (url != null)\n	{\n		// get url domain\n		var parts = url.split('/')\;\n		if ((parts != null) && (parts.length >= 3))\n		{\n			return parts[2].toLowerCase()\;\n		}\n	}\n	\n	return url\;\n}\;\nsearchshield.getUrlContents = function (url) \n{\n	if (url == null)\n		return null\;\n\n	// don't query if local url\n	if (url.indexOf("linkscanner://") != -1)\n		return null\;\n\n	try \n	{\n		req = new XMLHttpRequest()\;\n		req.open("GET"\, url\, false)\;\n		req.send(null)\;\n		if (req.status == 200)\n			return req.responseText\;\n		else\n			return null\;\n	} \n	catch (err)\n	{\n		// nothing to do\n		return null\;\n	}\n}\;\nsearchshield.parseLink = function (href\, simpleMode)\n{\n	var uri		  = {}\;\n	var parameter = {\n			complex: {\n				pattern: /^(?:([a-z]+):(?:([a-z]*):)?\\/\\/)?(?:([^:@]*)(?::([^:@]*))?@)?((?:[a-z0-9_-]+\\.)+[a-z]{2\,})(?::(\\d+))?(?:([^:\\?\\#]+))?(?:\\?([^\\#]+))?(?:\\#([^\\s]+))?$/i\,\n				element: ['source'\,'scheme'\,'subscheme'\,'user'\,'pass'\,'host'\,'port'\,'path'\,'query'\,'fragment']\n				}\,\n			simple: {\n				pattern: /^(?:([a-z]+):\\/\\/)?((?:[a-z0-9_-]+\\.)+[a-z]{2\,})(?:\\/)([^:\\?]+)?(?:([\\?|\\#])([^\\?]+))?$/i\,\n				element: ['source'\,'scheme'\,'host'\,'path'\,'delimiter'\,'query']\n			}\n		}\;\n	var mode	= simpleMode !== false ? 'simple' : 'complex'\;\n	var pattern	= parameter[mode].pattern\;\n	var element	= parameter[mode].element\;\n	\n	if (!href)\n		return uri\;\n\n	var matches	= href.match(pattern)\;\n	\n	if (matches)\n	{\n		// --------------------\n		// iterate over the matches array and populate uri properties\n		// using the respective element parameter as the name.\n		// NOTE: set raw property type as String to make inArray()\n		// work properly with instanceof.\n		// --------------------\n		for (var i=0\; i < matches.length\; i++)\n			uri[element[i]] = new String(matches[i] || "")\;\n		\n		// --------------------\n		// create an array\, hostArray\, from host\, for example\,\n		// host="www.google.com" and hostArray=["www"\,"google"\,"com"]\n		// --------------------\n		uri.hostArray	= uri.host.split(".")\;\n		\n		// --------------------\n		// create an array\, qsArray\, from query\, for example\,\n		// query='hl=en&q=javascript&btnG=Search&aq=f&aqi=g10&aql=&oq=&gs_rfai='\n		// qsArray=[{hl:'en'}\,{q:javascript}\, ... \,(qs_rfai:''}]\n		//\n		// $0=entire match\, $1=capture 1\, $2=capture 2\n		// must include $0 even though it is unused so\n		// the replace works properly\n		// --------------------\n		uri.qsArray		= []\;\n		uri.query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g\, \n							function ($0\, $1\, $2) {\n								if ($1) uri.qsArray[$1] = $2\;\n								}\n							)\;\n	}\n	\n	//non-standard urls require a fail-safe that relies on simply splitting the href\n	function splitLink(href)\n	{\n		// split the href on '/'\n		var linkParts = href.split("/")\;\n\n		// need domain and path\n		if ((linkParts == null) || (linkParts.length < 2))\n			return false\;\n	\n		var uri = {\n			delimiter: (linkParts[3]).substring(0\,1)\,\n			host: linkParts[2]\,\n			hostArray: (linkParts[2]).split('.')\,\n			path: (linkParts[3]).substring(1)\,\n			qsArray: {}\,\n			query: ''\,\n			scheme: (linkParts[0]).substring(0\, linkParts[0].length-1)\,\n			source: href\n			}\;\n\n		return uri\;\n	}\n\n	if (!uri.host)\n		uri = splitLink(href)\;\n\n	return uri\;\n}\;\n\n// general functions\nsearchshield.arrayKeys = function (array)\n{\n	var keys = new Array()\;\n	for(k in array)\n		keys.push(k)\;\n\n	return keys\;\n}\;\nsearchshield.inArray = function (key\, array\, caseSensitive\, exactMatch)\n{\n	if (! array instanceof Array)\n		return false\;\n	\n	if (caseSensitive !== true)\n		caseSensitive = false\;\n		\n	if (exactMatch !== false)\n		exactMatch = true\;\n	\n	if (key instanceof String)\n	{\n		for (var i=0\; i < array.length\; i++)\n		{\n			var k = caseSensitive ? key.valueOf() : key.valueOf().toLowerCase()\;\n			var a = caseSensitive ? array[i] : array[i].toLowerCase()\;\n			if(exactMatch && k === a)\n				return true\;\n			else if (!exactMatch && (-1 !== k.indexOf(a)))\n				return true\;\n		}\n	}\n	else if (key instanceof Array)\n	{\n		for (var i=0\; i < array.length\; i++)\n			for (var j=0\; j < key.length\; j++)\n			{\n				var k = caseSensitive ? key[j] : key[j].toLowerCase()\;\n				var a = caseSensitive ? array[i] : array[i].toLowerCase()\;\n				if (exactMatch && k === a)\n					return true\;\n				else if (!exactMatch && (-1 !== k.indexOf(a)))\n					return true\;\n			}\n	}\n\n	return false\;\n}\;\n// general use functions - end\n\n\n// Search constructor\nsearchshield.Search = function()\n{\n	this.doc 			= null\;\n	this.engine 		= null\;\n	this.engines 		= null\;\n	this.links 			= null\;\n	this.uri 			= null\;\n	this.searchHash 	= null\;\n	this.checkUrl 		= null\;\n	this.useLocalImgs 	= null\;\n	this.clockUrl 		= null\;\n	// create engine list (actually key/value object will be used)\n	this.engineList		= {}\;\n}\;\n\nsearchshield.Search.prototype.getSearchNames = function()\n{	// order is important\n	var names =  [\n		'Google'\,\n		'AVGGoogle'\,\n		'AltaVista'\,\n		'AVGYahoo'\,\n		'Yahoo'\,\n		'Bing'\,\n		'MSN'\, // MSN redirects to BING\n		'Baidu'\,\n		'Earthlink'\,\n		'AOL'\,\n		'Ask'\,\n		'Yandex'\,\n		'Seznam'\,\n		'Webhledani'\,\n		'eBay'\,\n///temp		'Digg'\,\n		'Slashdot'\,\n		'Twitter'\,\n		'GMail'\,\n		'Facebook'\n	]\;\n	return names\;\n}\;\n\nsearchshield.Search.prototype.detectEngine = function(href)\n{\n	if (!href)\n		return\;\n\n	var aEng = searchshield.Search.prototype.getSearchNames()\;\n	var aEngLen = aEng.length\;\n	for (var i=0\; i < aEngLen\; i++)\n	{\n		if (searchshield[aEng[i] + 'SearchEngine'].prototype.validSearch(href))\n			return aEng[i]\;\n	}\n\n	return\;\n}\;\n\nsearchshield.Search.prototype.addEngine = function(engine)\n{\n	if (!this.engines)\n		this.engines = new Array()\;\n	\n	this.engines.push(engine)\;\n}\;\n\nsearchshield.Search.prototype.addLink = function(inElement\, inHref)\n{\n	if (!this.links)\n		this.links = new Array()\;\n\n	var hrefHash\;\n	try\n	{\n		hrefHash = searchshield.avgCallFunc(this.doc\, 'GetHash'\, inHref)\;\n	}\n	catch (e){}\n\n	var newNode = {\n			element:	inElement\,\n			href: 		inHref\,\n			hash:		hrefHash\,\n			search:		this.searchHash\n		}\;\n	\n	this.links.push(newNode)\;\n	\n	return newNode\;\n}\n\n// process the search result page after all search engines have been added\nsearchshield.Search.prototype.process = function(doc)\n{\n	// only process when searchshield is enabled\n	if (0 == searchshield.avgCallFunc(doc\, 'GetSearchEnabled'))\n		return\;\n		\n	this.doc	= doc\;\n	this.href	= this.doc.location.href\;\n	this.uri	= searchshield.parseLink(this.href)\;\n\n	try\n	{\n		this.searchHash 	= searchshield.avgCallFunc(this.doc\, 'GetHash'\, this.href)\;\n\n		// get any previously active engine\n		this.engine		= this.engineList[this.searchHash.toString()]\;\n	}\n	catch (e) {}\n\n	/*\n	\n	Process Steps:\n	1. Add all supported search engines\n	2. Identify the active search engine\n	3. Get all document links and add AVG images \n	*/\n	\n	// STEP 1 - Add all supported search engines\n	if (!this.engines)\n	{\n		var aEng = xplSearch.getSearchNames()\;\n		var aEngLen = aEng.length\;\n		for (var i=0\; i < aEngLen\; i++)\n		{\n			xplSearch.addEngine(new searchshield[aEng[i]+'SearchEngine'](this))\;\n		}\n	}\n	\n	// search the engines if we didn't find one\n	if (!this.engine)\n	{\n		// STEP 2 - Identify the active search engine\n		var engLen = this.engines.length\;\n		for (var i = 0\; i < engLen\; i++)\n		{\n			if (this.engines[i].validSearch())\n			{\n				this.engine		= this.engines[i]\;\n				break\;\n			}\n		}\n		\n		// create a new engine instance to store\n		this.engineList[this.searchHash.toString()] = this.engine\;\n		\n		// init this search\, if < 1 either an error or disabled\n		//var sdkInit = 0\;\n		//try {\n		//	sdkInit = xpl_sdk.SXPL_InitSearch(this.href)\;\n		//}\n		//catch(e){}\n		//if (sdkInit < 1)\n		//	return false\;\n	}\n\n	// return immediately if there is not an active search engine\n	if (!this.engine)\n		return false\;\n	\n	try {	\n		// base url to check for icons\n		this.checkUrl 	= searchshield.avgCallFunc(this.doc\, 'GetIconUrl'\, '1')\;\n\n		// check if using linked or local icons\n		this.useLocalImgs	= !searchshield.getUrlContents(this.checkUrl)\;\n\n		// get the clock url\n		this.clockUrl 	= searchshield.avgCallFunc(this.doc\, 'GetIconUrl'\, '0')\;\n	}\n	catch(e){}\n		\n\n	// STEP 3 - Get all document links and add AVG images\n	var alltags = this.doc.getElementsByTagName("*")\;	// this method works for IE\, FF and Chrome\n	for (var i=0\; i < alltags.length\; i++)\n	{\n		// ignore verdicts\n		if (alltags[i].id && (alltags[i].id.indexOf("LXPLSS_") != -1))\n			continue\;\n	\n		//should the link be included?  Make sure includeLink always returns an href else FALSE\,\n		var href = this.engine.includeLink(alltags[i])\; \n		if (!href)\n			continue\;\n\n		var newNode = this.addLink(alltags[i]\, href)\;\n		this.engine.addImage(newNode\, this.clockUrl\, false)\;\n	}\n\n	return (this.links ? this.links.length : false)\;\n}\;\n////////////////    SEARCH    ////////////////\n\n\n\n////////////////    SEARCH ENGINE    ////////////////\n\n// Interface for a SearchEngine object\nsearchshield.SearchEngine = function(search)\n{\n	this.search = search\;\n	this.type = 'standard'\;\n	this.processFrames = false\;\n	this.new_links		= true\;\n	this.onlyPrimaries	= true\;\n	this.inline = {\n		clockImage: "linkscanner://clock12.png"\,\n		image: [	"linkscanner://safe12.png"\,\n					"linkscanner://caution12.png"\,\n					"linkscanner://warning12.png"\,\n					"linkscanner://blocked12.png"\n				]\,\n		color: {\n			border: ["#00A120\;"\, "#EAA500\;"\, "#F57301\;"\, "#D20003\;"]\,\n			background: ["#C3E5CA\;"\, "#FEEFAE\;"\, "#FFD3B0\;"\, "#F5D4C1\;"]\n		}\n	}\;\n	this.filter_urls = [\n		"ad.doubleclick.net"\, "ads1.revenue.net"\, "aslads.ask.com"\,\n		"bluestreak.com"\, "clickbacktrack.net"\, "clickbank.net"\,\n		"clickboothlnk.com"\, "clickmanager.com"\, "clickserve.cc-dt.com"\,\n		"clickserve.dartsearch.net"\, "clicktraxmedia.com"\, "clk.atdmt.com"\,\n		"dpi-digialphoto.com"\, "feedpoint.net"\, "hypertracker.com"\,\n		"jdoqocy.com"\, "kqzyfj.com"\, "m1428.ic-live.com"\,\n		"mediaplex.com"\, "mr.mdmngr.com"\, "n339.asp-cc.com"\,\n		"offeredby.net"\, "offerweb.com"\, "pinktrax.com"\,\n		"pinktrax.com"\, "pixel1523.everesttech.net"\, "qckjmp.com"\,\n		"r.rd06.com"\, "revenuewire.net"\, "s0b.bluestreak.com"\,\n		"s2.srtk.net"\, "servedby.advertising.com"\, "store.yahoo.com"\,\n		"tf8.cpcmanager.com"\, "thetoptracker.com"\, "track.searchignite.com"\,\n		"tracking.searchmarketing.com"\, "www.dpbolvw.net"\, "www.rkdms.com"\,\n		"www.yellowbookleads.com"\n		]\;\n	this.shortened_urls = [\n		"3.ly"\, "bit.ly"\, "is.gd"\, "tr.im"\, "short.to"\, "tiny.cc"\, "tinyurl.com"\n		]\;\n	this.showCleanVerdicts		= true\;\n	this.showLowRiskVerdicts	= true\;\n	this.showMedRiskVerdicts	= true\;\n	this.VeriSignSplit			= searchshield.VERISIGN_SPLIT_NOTEST\;\n}\;\nsearchshield.SearchEngine.prototype.flyoverExists = function (doc)\n{\n	return !!doc.getElementById("XPLSS_Flyover")\;\n}\;\nsearchshield.SearchEngine.prototype.inlineExists = function (doc)\n{\n	return !!doc.getElementById("XPLSS_InlineFlyover")\;\n}\;\nsearchshield.SearchEngine.prototype.validSearch = function(href) { return false\; }\;\nsearchshield.SearchEngine.prototype.includeLink = function(link) { return false\; }\;\nsearchshield.SearchEngine.prototype.insertNodes = function(node\, doc)\n{\n	var element = node.element\;\n	var parentNode = node.element.parentNode\;\n	if (parentNode == null)\n	{\n		// try and find element again based on the hash\n		element = doc.getElementById("xplid_" + node.hash)\;\n		parentNode = !!element ? element.parentNode : null\;\n	}\n\n	var insertNode = !!element ? element.nextSibling : null\;\n	while ((insertNode			!= null) && \n			(insertNode.tagName	!= null) && \n			(insertNode.tagName	== "SPAN"))\n	{\n		insertNode = insertNode.nextSibling\;\n	}\n	\n	return [insertNode\, parentNode]\;\n}\;\nsearchshield.SearchEngine.prototype.addImage	= function(node\, image\, hidden)\n{\n	var element	= node.element\;\n	var hash	= node.hash\;\n	var score 	= node.score\;\n\n	// set verdict display configuration\n	var doc = element.ownerDocument\;\n	if (!doc.getElementById('XPLSS_Flyover'))\n		searchshield.initFlyover(doc\, this)\;\n\n	// get the proper insertion point for the image\n	var insertNodes = this.insertNodes(node\, doc)\;\n	var insertNode = insertNodes[0]\;\n	var parentNode = insertNodes[1]\;\n\n	if (!parentNode)\n		return\;\n\n	// see if we already have an image\n	if ((insertNode		!= null) && \n		(insertNode.id	!= null) && \n		(insertNode.id.indexOf("XPLSS_") > -1))\n	{\n		return\;\n	}\n\n	// mark search result anchor so it isn't processed repeatedly\n	if (score == undefined)\n		element.setAttribute("avglschecked"\, hash + "S" + this.VeriSignSplit)\;\n\n	// create a new image\n	var img = doc.createElement('img')\;\n	img.src = image\;\n	img.id = "XPLSS_" + hash\;\n	img.style.borderStyle = "none"\;\n	img.style.margin = "0 3px"\;\n	\n	// for IE\, specify these style attributes to prevent inadvertent inheritance from parent\n	if (img.width && img.height)\n	{\n		img.style.width = img.width + 'px'\;\n		img.style.height = img.height + 'px'\;\n	}\n	\n	// apply custom element styles\n	this.updateElementStyle(img\, this.addImageStyle)\;\n	\n	// create the link element \n	var anchor = doc.createElement("A")\;\n	anchor.setAttribute("id"\, "LXPLSS_" + hash)\;\n\n	if ((hidden != null) && (hidden == true))\n	{	// hiding the parent will also hide its child nodes\n		anchor.style.display = "none"\;\n	}\n	\n	// Default anchor styles\n	//Over-ride possible border style with inline declaration\n	anchor.style.borderStyle = "none"\;\n\n	// apply custom element styles\n	this.updateElementStyle(anchor\, this.addAnchorStyle)\;\n\n	if (score == searchshield.SCORE_SS_VERISIGN)\n	{\n		anchor.style.textDecoration = "none"\;\n		anchor.style.background = "none"\;\n	}\n\n	// append the image to the link\n	anchor.appendChild(img)\;\n\n	// insert the node as either a sibling or a child\n	if (insertNode != null)\n		parentNode.insertBefore(anchor\, insertNode)\;\n	else\n		parentNode.appendChild(anchor)\;\n		\n	return anchor\;\n}\;\nsearchshield.SearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n		var updated = false\;\n\n		var frameDoc  = this.search.doc\;\n		var docFrames = frameDoc.frames\;\n		var frameElem\;\n		if (docFrames && this.processFrames)\n		{\n			for (var i=0\; i < docFrames.length\; i++)\n			{\n				try {\n					if (docFrames[i].document.getElementById(hash))\n					{\n						frameElem = docFrames[i].frameElement\;\n						frameDoc = docFrames[i].document\;\n						break\;\n					}\n				} \n				catch(err){}\n			}\n		}\n\n		while ((element = frameDoc.getElementById(hash)) != null)\n		{\n			// check configuration to determine if verdict display property\n			var showVerdict = true\;			\n			var nSeverity = Number(score - 1)\;\n			switch (nSeverity)\n			{\n				case searchshield.XPLCHECK_RESULT_SEV_LOW:\n					showVerdict = this.showLowRiskVerdicts\;\n					break\;\n				case searchshield.XPLCHECK_RESULT_SEV_MED:\n					showVerdict = this.showMedRiskVerdicts\;\n					break\;\n				case searchshield.XPLCHECK_RESULT_SEV_NONE:\n					showVerdict = this.showCleanVerdicts\;\n					break\;\n				default:\n					if (score == searchshield.SCORE_SS_VERISIGN)\n						showVerdict = this.showCleanVerdicts\;\n					break\;\n			}\n			\n			// remove image if no url specified\n			if ((!showVerdict) || (image == null) || (image.length < 1))\n			{\n				// hide the parent anchor node\n				element.parentNode.style.display = "none"\;\n\n				// mark the id as being hidden (element is the image)\n				element.id = element.id + "H"\;\n				updated = true\;\n				\n				// if not a verisign score\n				if (score != searchshield.SCORE_SS_VERISIGN)\n					continue\;\n			}\n\n			// cleanup flyover\, replace any new lines or single quotes\n			flyover = searchshield.CleanupHTML(flyover)\;\n\n			// mark the id as having been updated\n			element.id = element.id + "U" + score\;\n			element.src	= image\;\n			element.attachEvent("onmouseover"\, function(e){avglsflyover.popup(e\, hash\, search\, flyover)})\;\n			element.attachEvent("onmouseout"\, function(e){avglsflyover.hide(e)})\;\n\n			// check for attribute updates (elementAttribute is an associative array (i.e.\, object)\n			if (this.elementAttribute)\n			{\n				for (a in this.elementAttribute)\n				{\n					if(this.elementAttribute[a])\n						element.setAttribute(a\, this.elementAttribute[a])\;\n				}\n			}\n\n			// To dynamically reduce verdict image size if it causes its container to scroll\n			// when not showing alt images determine if the element containing\n			// the verdict image is scrolling and decrease the image size by\n			// the scroll amount (min size is 80% or original)\n			var reduceBy	= 0.8\;\n			var scrl		= 0\;\n			if (!alt_image || this.omitAltImage || this.VeriSignSplit == searchshield.VERISIGN_SPLIT_TESTB)\n			{\n				try{\n					var maxLoop = 5\;\n					var cN = element.parentNode.parentNode\;  //image->anchor->containerNodes...\n					while (cN && maxLoop--)\n					{\n						if (cN.tagName == "DIV" || cN.tagName == "SPAN")\n						{\n							// get object height depending on ie document mode\n							var clientHeight = (cN.clientHeight == 0 || \n								(this.search.doc.documentMode && this.search.doc.documentMode < 8)) ? \n								cN.offsetHeight : \n								cN.clientHeight\;\n							scrl = cN.scrollHeight - clientHeight\;\n							break\;\n						}\n\n						cN = cN.parentNode\;\n					}\n\n					if (0 < scrl)\n					{\n						var eH = (element.height - scrl)/element.height\;\n						if (reduceBy > eH)\n							eH = reduceBy\;\n						\n						var newDim = Math.ceil(eH*element.height)\;\n						\n						element.height = newDim\;\n						element.width = newDim\;\n						\n						element.style.height = newDim + "px"\;\n						element.style.width = newDim + "px"\;\n					}\n				}\n				catch(e){}\n			}\n\n			// set default style attributes\n			element.style.display		= ""\;\n			\n			// if verisign icon showing move our icon up for better centering of the 2\n			// except for IE7 browser - it does not like this style\n			try {\n				var ieVersion = parseFloat(navigator.appVersion.split("MSIE")[1])\;\n				if (alt_image && (alt_image.length > 0) && ieVersion != 7)\n					element.style.verticalAlign = "10%"\;\n			}\n			catch(err){}\;\n\n			// apply custom element styles\n			this.updateElementStyle(element\, this.updateImageStyle)\n\n			// update the click thru\n			var link = this.search.doc.getElementById("L" + hash)\;\n			if (link)\n			{\n				link.href = click_thru\;\n				link.id = link.id + "U" + score\;\n			}\n\n			updated = true\;\n\n			// add the alternate image if supplied BUT not on avg yahoo\n			if ((alt_image)				&& \n				(alt_image.length > 0)	&& \n				(!this.omitAltImage)	&&\n				(this.VeriSignSplit != searchshield.VERISIGN_SPLIT_TESTB))\n			{\n\n				var vhash = hash.substring(hash.indexOf("_")+1)\;\n\n				// create a temporary link node\n				var tmp_node = {\n						element:	element.parentNode\,\n						href:		altClick_thru\,\n						hash:		vhash + "VU" + score\,\n						search:		this.searchHash\,\n						score:		score\n					}\;\n\n				var altAnchor = this.addImage(tmp_node\, alt_image\, false)\;\n				if (altAnchor && altAnchor.firstChild)\n				{\n					altAnchor.firstChild.setAttribute("onmouseover"\, "")\;\n					altAnchor.href = altClick_thru\;\n				}\n			}\n		}\n		\n		if (updated != false)\n		{\n			this.resizeFrame(frameElem)\;\n			return true\;\n		}\n\n	return false\;\n}\;\nsearchshield.SearchEngine.prototype.updateElementStyle = function (element\, elementStyle)\n{\n	if (elementStyle)\n	{	// a NULL attribte value will unset it\n		for(attr in elementStyle)\n		{\n			try {\n				if (element.style.setAttribute)\n					element.style.setAttribute(attr\, elementStyle[attr])\;\n				else\n					element.style[attr] = elementStyle[attr]\;\n			} catch(err){}\n		}\n	}\n}\;\n\nsearchshield.SearchEngine.prototype.resizeFrame = function (frameElem)\n{	// resize frame to prevent unwanted scrolling after inserting verdicts\n\n	// ignore inline and non-frame engines\n	if ((this.type == 'inline') || (!this.processFrames))\n		return\;\n\n	// ensure all required elements are available\n	if ((frameElem == null) || (frameElem.style == null) || (frameElem.contentWindow == null))\n		return\;\n\n	// if frame is scrolling vertically then resize\n	var frameHeight = parseInt(frameElem.style.height\, 10)\;\n	if (!isNaN(frameHeight) && (frameHeight < frameElem.contentWindow.document.body.scrollHeight))\n		frameElem.style.height = frameElem.contentWindow.document.body.scrollHeight + 'px'\;\n\n	return\;\n}\;\n\nsearchshield.SearchEngine.prototype.getImgElement = function (element)\n{	// return an xpl img element associated with a given element\n	if (element == null)\n		return null\;\n\n	// go up the parent tree looking for a header or div\n	while ( (element.parentNode != null) && \n			(element.tagName.charAt(0) != "H") && \n			(element.tagName.charAt(0) != "D") &&\n			(element.tagName.charAt(0) != "T") )\n	{\n		element = element.parentNode\;\n	}\n\n	// if all the way to the top\, nothing\n	if ((element.tagName == "HTML") || (element == null))\n		return null\;\n\n	// get image tags\, if none we are done\n	var imgTags = element.getElementsByTagName("IMG")\;\n	if ((imgTags == null) || (imgTags.Length < 1))\n		return null\;\n\n	for (var i = 0\; i < imgTags.length\; i++)\n	{\n		if ((imgTags[i].id == null) || (imgTags[i].id.indexOf("XPLSS_") == -1))\n			continue\;\n\n		return imgTags[i]\;\n	}\n\n	// else didn't find anything\n	return null\;\n}\;\n\nsearchshield.SearchEngine.prototype.setRatingsConfig = function (doc)\n{\n	// get verdict configuration\, need at least severity\n	var results = searchshield.avgCallFunc(doc\, 'GetRatingsConfig')\;\n	var parts = !!results ? results.split('::') : null\;\n\n	if (parts != null && parts.length >= 5)\n	{	//if set to default then get config value\n		if (this.showCleanVerdicts === true)\n			this.showCleanVerdicts		= (parseInt(parts[0]) == 1) ? true : false\;\n			\n		if (this.showLowRiskVerdicts === true)\n			this.showLowRiskVerdicts	= (parseInt(parts[1]) == 1) ? true : false\;\n		\n		if (this.showMedRiskVerdicts === true)\n			this.showMedRiskVerdicts	= (parseInt(parts[2]) == 1) ? true : false\;\n			\n		this.VeriSignSplit	= (parseInt(parts[4]))\;\n	}\n	\n	return true\;\n}\;\n\nsearchshield.SearchEngine.prototype.init_inline_ratings = function (doc)\n{\n	if ((doc == null) || (doc.getElementById("XPLSS_InlineFlyover")))\n		return\;\n	\n	// create the popup box\n	var box = doc.createElement("DIV")\;\n	try {\n		box.setAttribute("id"\, "XPLSS_InlineFlyover")\;\n		box.style.visibility = "hidden"\;\n		box.style.left = "-5000px"\;\n\n		box.style.position = "absolute"\;\n		box.style.zIndex = "9999"\;\n		box.style.padding = "0px 0px"\;\n		box.style.marginLeft = "0px"\;\n		box.style.marginTop = "0px"\;\n		box.style.overflow = "hidden"\;\n		box.style.wordWrap = "break-word"\;\n		box.style.color = "black"\;\n		box.style.fontSize = "10px"\;\n		box.style.textAlign = "left"\;\n		box.style.lineHeight = "130%"\;\n\n		doc.body.appendChild(box)\;\n		box = null\;\n	}\n	catch(boxErr){}\n}\;\n\nsearchshield.SearchEngine.prototype.show_inline_ratings = function (doc\, node\, image)\n{	\n	var href	= node.href\;\n	var anchor	= node.element\;\n\n	if ((href == null) || (href.length < 1))\n		return\;\n		\n	if (avglsinlineflyover.imageExists(anchor))\n		return\;\n	\n	// mark search result anchor so it isn't processed repeatedly\n	anchor.setAttribute("avglschecked"\, "1")\;\n	\n	// get verdict \n	this.display_inline(doc\, anchor\, href\, node\, false)\;\n}\;\n\nsearchshield.SearchEngine.prototype.display_inline = function (doc\, anchor\, href\, node\, update\, min_severity)\n{\n	// min_severity is the lowest severity to display\, so setting it to\n	// 1 would not display safe icons\n	\n	var results	= searchshield.avgCallFunc(doc\, 'MalsiteCheck'\, href)\;\n	if (results == null)\n		return\;\n	\n	var parts = results.split('::')\;\n	\n	// need at least severity\n	if (parts == null)\n		return\;\n			\n	var nSeverity = parseInt(parts[0])\;\n	\n	if (!update && nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE)\n	{\n		var shortUrl = searchshield.FilterUrl(href\, this.shortened_urls)\;\n		if (shortUrl)\n		{	// shortened url verdicts display later\n			var engine = this\;\n			anchor.attachEvent("onmouseover"\, function(event){avglsinlineflyover.mouseOverHandler(event\, doc\, engine)}\, false)\;\n			return\;\n		}\n	}\n\n	//blacklist url\n	var blShortUrl = false\;\n	if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_BLOCK)\n	{\n		var shortUrl = searchshield.FilterUrl(href\, this.shortened_urls)\;\n		if (shortUrl)\n			blShortUrl = true\;\n	}\n	\n	// need xlated cat tag and category\n	if (parts.length < 3)\n		return\;\n\n	// check the minimum to display\n	if ((min_severity != null) && (nSeverity < min_severity))\n		return\;\n		\n	if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_LOW && !this.showLowRiskVerdicts)\n	{\n		if (update)\n			this.avg_ls_inline_hide_verdict(anchor)\;\n		\n		return\;\n	} \n	if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_MED && !this.showMedRiskVerdicts)\n	{\n		if (update)\n			this.avg_ls_inline_hide_verdict(anchor)\;\n		\n		return\;\n	}\n	if (nSeverity == searchshield.XPLCHECK_RESULT_SEV_NONE && !this.showCleanVerdicts) \n	{\n		if (update)\n			this.avg_ls_inline_hide_verdict(anchor)\;\n			\n		return\;\n	}\n\n	if (update)\n		this.update_inline_image(anchor\, nSeverity\, parts)\;\n	else\n		this.add_inline_image(doc\, anchor\, nSeverity\, parts\, blShortUrl)\;\n}\;\n\nsearchshield.SearchEngine.prototype.avg_ls_inline_hide_verdict = function (anchor)\n{\n	var image = avglsinlineflyover.getImage(anchor)\;\n	if (image)\n	{\n		image.style.display = "none"\;\n		if (image.parentNode && image.parentNode.id == "avg_ls_anch")\n			image.parentNode.style.display = "none"\;\n	}\n}\;\n\nsearchshield.SearchEngine.prototype.update_inline_image = function (anchor\, nSeverity\, aRisk)\n{\n	// update the image already in the page\n	if (anchor && anchor.firstChild)\n	{\n		var html  = ''\;\n		var image = ''\; \n		if (aRisk != null && nSeverity != null)\n		{\n			var riskCategory = aRisk[1]\;\n			var riskName	 = aRisk[2]\;\n			var bgColor		 = this.inline.color.background[nSeverity]\;\n			var borderColor	 = this.inline.color.border[nSeverity]\;\n\n			image			 = this.inline.image[nSeverity]\;\n			html			 = avglsinlineflyover.build(riskCategory\, riskName\, bgColor\, borderColor)\;\n		}\n		\n		var imageElem = anchor.firstChild\;\n		imageElem.src = image\;\n		\n		if ( html && html.length > 0 )\n		{\n			imageElem.setAttribute("title"\, "")\;\n			imageElem.attachEvent("onmouseover"\, function(e){avglsinlineflyover.popup(e\, html)})\;\n			imageElem.attachEvent("onmouseout"\, function(e){avglsinlineflyover.hide(e)})\;\n		}\n	}\n}\;\n\n// add the image to the page\nsearchshield.SearchEngine.prototype.add_inline_image = function (doc\, anchor\, nSeverity\, aRisk\, blShortUrl)\n{\n	if (anchor == null || anchor.parentNode == null)\n		return null\;\n\n	// get the proper insertion point for the image\n	var insertNode = anchor.nextSibling\;\n	while ((insertNode			!= null) && \n			(insertNode.tagName != null) && \n			(insertNode.tagName == "SPAN"))\n	{\n		insertNode= insertNode.nextSibling\;\n	}\n	\n	// see if we already have an image anchor\n	if ((insertNode		!= null) && \n		(insertNode.id	!= null) && \n		(insertNode.id	== "avg_ls_anch"))\n	{\n		return null\;\n	}\n\n	var html  = ''\;\n	var image = this.inline.clockImage\; \n	if (aRisk != null && nSeverity != null)\n	{\n		var riskCategory = aRisk[1]\;\n		var riskName	 = aRisk[2]\;\n		var bgColor		 = this.inline.color.background[nSeverity]\;\n		var borderColor	 = this.inline.color.border[nSeverity]\;\n		image			 = this.inline.image[nSeverity]\;\n\n		var blUrl\;\n		if (blShortUrl)\n		{\n			var aRiskName = riskName.split(':')\;\n			var sUrl = searchshield.checkUrl(aRiskName[1])\;\n\n			blUrl = {}\;\n			blUrl.riskNameLabel = aRiskName[0] + ': '\;\n			blUrl.riskCategory = riskCategory\;\n			blUrl.bgColor = bgColor\;\n			blUrl.borderColor = borderColor\;\n			blUrl.sUrl = sUrl\;\n		}\n		else\n		{\n			html = avglsinlineflyover.build(riskCategory\, riskName\, bgColor\, borderColor)\;\n		}\n	}\n\n	doc = anchor.ownerDocument\;\n\n	var img		 = doc.createElement("img")\;\n	img.src		 = image\;\n	img.setAttribute("id"\,"avg_ls_image")\;\n	img.style.width = "12px"\;\n	img.style.border = "none"\;\n	img.style.padding = "0 3px"\;\n	img.style.margin = "0"\;\n	img.style.display = "inline"\;\n	\n	if ((html && html.length > 0) || (blUrl != undefined))\n	{\n		img.setAttribute("title"\, "")\;\n		img.attachEvent("onmouseover"\, function(e){avglsinlineflyover.popup(e\, html\, blUrl)})\;\n		img.attachEvent("onmouseout"\, function(e){avglsinlineflyover.hide(e)})\;\n	}\n\n	// create the link element \n	var newAnchor = doc.createElement("A")\;\n	newAnchor.setAttribute("id"\, "avg_ls_anch")\;\n	\n	newAnchor.appendChild(img)\;\n	img = null\;\n\n	// insert the node as either a sibling or a child\n	if (insertNode != null)\n		anchor.parentNode.insertBefore(newAnchor\, insertNode)\;\n	else\n		anchor.parentNode.appendChild(newAnchor)\;	\n		\n	return newAnchor\;		\n\n}\;\n////////////////    SEARCH ENGINE    ////////////////\n\n\n///////////////    GOOGLE SEARCH ENGINE    ///////////////\nsearchshield.GoogleSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.onlyPrimaries = false\;\n}\;\nsearchshield.GoogleSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.GoogleSearchEngine.prototype.constructor = searchshield.GoogleSearchEngine\;\nsearchshield.GoogleSearchEngine.prototype.name = "google"\;	// the name by which the search engine is known (always lowercase)\nsearchshield.GoogleSearchEngine.prototype.validSearch = function(href) {\n\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n	\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// Domains valid for google searches\, must start with '.'\n	var valid_domains = new Array(".google.co"\, ".mozilla.co")\;\n\n	// For Google the host must match:\n	//	.google.com		OR\n	//	.google.co.XX	where XX is a country code\n	//	.google.XX		where XX is a country code\n	// Where any subdomain can come before the top level domain\n	var domLen = valid_domains.length\;\n	for (var i = 0\; i < domLen\; i++)\n	{\n		var domainLen = domain.length\;\n		var valid_domain_len = valid_domains[i].length\;\n		var tldPos = domain.indexOf(valid_domains[i])\;\n		if (tldPos > -1)\n		{\n			if (domain.charAt(tldPos + valid_domain_len) == 'm')\n				hostMatch = true\;\n			else if ((domain.charAt(tldPos + valid_domain_len) == '.') && ((domainLen - tldPos) == valid_domain_len+3))\n				hostMatch = true\;\n		}\n		else\n		{\n			// get the form .google. to check the length of\n			var dot_pos = valid_domains[i].indexOf("."\,1)\;\n			var valid_short_name = valid_domains[i].substring(0\, dot_pos+1)\;\n\n			tldPos = domain.indexOf(valid_short_name)\;\n			if ((tldPos > -1) && ((domainLen - tldPos) == valid_domain_len))\n				hostMatch = true\;\n		}\n		if (hostMatch)\n		{\n			// replace beginning of domain with www.google since links will refer back to it\n			if ((i > 0) && (tldPos > -1))\n			{\n				var last_dot = domain.indexOf("."\,tldPos+1)\n				if (last_dot > -1)\n					domain = "www.google" + domain.substring(last_dot)\;\n			}\n			break\;\n		}\n	}\n\n	if (hostMatch)\n	{\n		// using ajax engine\n		if ((path.indexOf("search?") == 0) ||\n			(path.indexOf("sponsoredlinks?") == 0) ||\n			(path.indexOf("webhp?") == 0) ||\n			(path.indexOf("webhp#") == 0) ||\n			(path.indexOf("#q=") == 0) ||\n			(path.indexOf("#hl=") == 0) ||\n			(path.indexOf("#sclient=") == 0))\n		{\n			return true\;\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.GoogleSearchEngine.prototype.includeLink = function(tag)\n{\n	var href = ""\;\n	var outHref = false\;\n	var findStr = ""\;\n\n	// check for interstitials\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n	{\n		findStr = this.search.uri.host + "/interstitial?"\;\n		if (tag.className == "l" && tag.href)\n		{\n			if (tag.href.indexOf(findStr) != -1)\n			{\n				findStr = "?url="\;\n				var pos = tag.href.indexOf(findStr)\;\n				if (pos !== -1)\n				{\n					pos += 5\;\n					outHref = tag.href.substring(pos)\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n						return false\;\n							\n					return outHref\;\n				}\n			}\n		}\n\n		if (tag.className == "sla")\n		{\n			findStr = "/url?q="\;\n			urlPos = tag.href.indexOf(findStr)\;\n			if (urlPos != -1)\n			{\n				urlPos += 7\;\n				outHref = tag.href.substring(urlPos)\;\n				return outHref\;\n			}\n		}\n		\n		// if an ad id\n		if ((tag.id.indexOf("pa") == 0) || (tag.id.indexOf("an") == 0) ||\n			(tag.className == "resultLink"))\n		{\n			var urlPos = -1\;	\n\n			// ads now need unescaping\n			href = unescape(tag.href)\;\n\n			findStr= "/url?sa="\;\n			if (href.indexOf(findStr) != -1)\n			{	// first kind\, locate real url\n				findStr= "&q=http"\;\n				urlPos = href.indexOf(findStr)\;\n				if (urlPos != -1)\n					urlPos += 3\;	// puts it on the http\n			}\n			if (urlPos == -1)\n			{\n				findStr = "/pagead/iclk?sa="\;\n				if (href.indexOf(findStr) != -1)\n				{	// second kind\, locate real url\n					findStr = "&adurl=http"\;\n					urlPos	= href.indexOf(findStr)\;\n					if (urlPos != -1)\n						urlPos += 7\; // puts it on the http\n				}\n			}\n			if (urlPos == -1)\n			{\n				if (href.indexOf("/aclk?sa=") != -1)\n				{	// third kind\n					urlPos = href.indexOf("&q=http")\;\n					if (urlPos != -1)\n						urlPos += 3\; // puts it on the http\n					else\n					{\n						urlPos  = href.indexOf("&lp=http")\;\n						if (urlPos != -1)\n							urlPos += 4\;\n						else\n						{\n							findStr = "&adurl=http"\;\n							urlPos	= href.indexOf(findStr)\;\n							if (urlPos != -1)\n								urlPos += 7\; // puts it on the http\n						}\n						\n					}\n				}\n			}\n			if (urlPos == -1)\n			{\n				if (href.indexOf("/url?cad=") != -1)\n				{	// fourth kind\n					urlPos = href.indexOf("&q=http")\;\n					if (urlPos != -1)\n						urlPos += 3\; // puts it on the http\n				}\n			}\n			if (urlPos != -1)\n			{\n				outHref = href.substring(urlPos)\;\n\n				// extract any fragment text\, shouldn't be unescaped\n				var pound = outHref.indexOf("#")\;	\n				if (pound != -1)\n				{\n					var fragment = outHref.substring(pound)\;\n					outHref = outHref.substring(0\, pound)\;\n					outHref = unescape(outHref)\;\n					outHref += fragment\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n						return false\;\n\n					return outHref\;\n				}\n\n				outHref = unescape(outHref)\;\n				if (outHref.indexOf("?") == -1)\n				{\n					var ampPos = outHref.indexOf("&")\;\n					if (ampPos != -1)\n						outHref = outHref.substring(0\, ampPos)\;\n				}\n				\n				if (searchshield.FilterUrl(outHref\, this.filter_urls))\n					return false\;\n\n				return outHref\;\n			}\n		}\n\n		// recommended link - use following to see one\n		// http://www.google.cz/search?hl=cs&q=warey&btnG=Hledat&lr=lang_cs\n		// elem parent class = r\n		// href must contain - url? and q=http\n		var parentNode = tag.parentNode\;\n		if (parentNode && (parentNode.className.toLowerCase() == "r"))\n		{\n			href = tag.href\;\n			if (href && (href.indexOf("/url?") != -1))\n			{\n				// locate the real url\n				var urlPos = href.indexOf("q=http")\;\n				if (urlPos != -1)\n				{\n					urlPos += 2\;\n					outHref = href.substring(urlPos)\;\n\n					// include entire param up to '&'\n					var ampPos = outHref.indexOf("&")\;\n					if (ampPos != -1)\n						outHref = outHref.substring(0\, ampPos)\;\n\n					return outHref\;\n				}\n			}\n		}\n	}\n	// no link to self\n	else if (tag.className && (tag.className.charAt(0) == "l" || tag.className == "sla"))\n	{\n		// check for any images on the link\n		if (0 === tag.getElementsByTagName("IMG").length)\n			return tag.href\;\n	}\n\n	// else nothing\n	return false\;\n}\;\n///////////////    GOOGLE    ///////////////\n\n\n///////////////    AVG GOOGLE SEARCH ENGINE    ///////////////\nsearchshield.AVGGoogleSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.onlyPrimaries = false\;\n}\;\nsearchshield.AVGGoogleSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AVGGoogleSearchEngine.prototype.constructor = searchshield.AVGGoogleSearchEngine\;\nsearchshield.AVGGoogleSearchEngine.prototype.name = "avggoogle"\;	// the name by which the search engine is known (always lowercase)\nsearchshield.AVGGoogleSearchEngine.prototype.validSearch = function(href) {\n\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var domain		= uri.host\;\n	\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if  (domain.indexOf("search.avg.com") > -1)\n	{   // ads link back to google\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.AVGGoogleSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n	var findStr = ""\;\n\n	// check for interstitials\n	if (searchshield.DoesURLContain(tag.href\, "google.com"))\n	{\n		// link back to self - DIV elem GrandParent class of res1 or res3 is Sponsored Link \n		var parentNode = tag.parentNode\;\n		if (parentNode)\n		{\n			var grandParentNode = tag.parentNode.parentNode\;\n			if (grandParentNode)\n			{\n				if ((grandParentNode.tagName == "DIV") && \n					((grandParentNode.className.toLowerCase() == "res1") ||\n					(grandParentNode.className.toLowerCase() == "res3")))\n				{\n					var urlPos = -1\;	\n\n					// ads now need unescaping\n					href = unescape(tag.href)\;\n\n					if (urlPos == -1)\n					{\n						if (href.indexOf("/aclk?sa=") != -1)\n						{	\n							findStr = "&adurl=http"\;\n							urlPos	= href.indexOf(findStr)\;\n							if (urlPos != -1)\n								urlPos += 7\; // puts it on the http\n								\n						}\n					}\n					if (urlPos != -1)\n					{\n						outHref = href.substring(urlPos)\n						// extract any fragment text\, shouldn't be unescaped\n						var pound = outHref.indexOf("#")\;	\n						if (pound != -1)\n						{\n							var fragment = outHref.substring(pound)\;\n							outHref = outHref.substring(0\, pound)\;\n							outHref = unescape(outHref)\;\n							outHref += fragment\;\n							if (searchshield.FilterUrl(outHref\, this.filter_urls))\n								return false\;\n\n							return outHref\;\n						}\n\n						outHref = unescape(outHref)\;\n						if (outHref.indexOf("?") == -1)\n						{\n							var ampPos = outHref.indexOf("&")\;\n							if (ampPos != -1)\n								outHref = outHref.substring(0\, ampPos)\;\n						}\n				\n						if (searchshield.FilterUrl(outHref\, this.filter_urls))\n							return false\;\n\n						return outHref\;\n					}\n				}\n			}\n		}\n	}	\n		\n	// no link to self\n	else\n	{\n		var parentNode = tag.parentNode\;\n		if (parentNode)\n		{\n			var grandParentNode = tag.parentNode.parentNode\;\n			if (grandParentNode)\n			{\n				if ((grandParentNode.tagName == "DIV") && \n					(grandParentNode.className.toLowerCase() == "res2"))\n				{\n					// check for any images on the link\n					if (0 === tag.getElementsByTagName("IMG").length)\n						return tag.href\;\n				}\n			}\n		}\n	}\n\n	// else nothing\n	return false\;\n}\n///////////////    AVG GOOGLE    ///////////////\n\n///////////////    YAHOO SEARCH ENGINE    ///////////////\nsearchshield.YahooSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n}\;\nsearchshield.YahooSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.YahooSearchEngine.prototype.constructor = searchshield.YahooSearchEngine\;\nsearchshield.YahooSearchEngine.prototype.name = "yahoo"\;\nsearchshield.YahooSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// For Yahoo the host must match:\n	//	search.yahoo.com		OR\n	//	xx.search.yahoo.com where xx country code OR\n	//	search.yahoo.co.xx OR\n	// for Yahoo China: one.cn.yahoo.com & search.cn.yahoo.com\n	if ((uri.host.indexOf("search.yahoo.co") != -1) ||\n		(uri.host.match(/^(search|one)(\\.[a-z]{2}\\.yahoo\\.com)$/))) \n	{\n		if ((path.indexOf("search?") == 0) ||\n			(path.indexOf("search\;") == 0) ||\n			(path.indexOf("s?p=") === 0))\n		{\n			return true\;\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.YahooSearchEngine.prototype.includeLink = function(tag)\n{\n	var href		= ""\;\n	var outHref		= ""\;\n	var findStr		= ""\;\n\n	// yahoo likes to encode the url\n	href = unescape(tag.href)\;\n\n	if ((tag.className.indexOf("yschttl") != -1) || \n		(tag.className.indexOf("spt") != -1))\n	{\n		var da = href.indexOf("**")\;\n		var ad = href.indexOf("*-")\;\n		if (da != -1)\n			outHref = href.substring(da+2)\;\n		else if (ad != -1)\n			outHref = href.substring(ad+2)\;\n		else\n			outHref = href \;\n			\n		if (outHref.toLowerCase().indexOf("overture.") !== -1)\n			return false\;\n	}\n	else if ((tag.tagName)			&& \n			 (tag.tagName === "A") 	&& \n			 (!tag.className))\n	{\n		var tagParent = tag.parentNode\;\n		\n		// if anchor without className then search parentNodes\n		if ((tagParent) &&\n			(tagParent.tagName !== "EM") &&\n			(searchshield.getParentNodeByClassName("yst-web"\, tag\, 4)))\n		{\n			// China Yahoo support\n			outHref = href\;\n		}\n		\n		else if ((tagParent) &&\n				(tagParent.tagName === "H3") &&\n				(!!searchshield.getParentNodeById("WS2m"\,tag\, 5)))\n		{\n			// Japan Yahoo support\n			var da = href.indexOf("**")\;\n			if (da !== -1)\n				outHref = href.substring(da+2)\;\n		}\n\n		else if ((tagParent) &&\n				(tagParent.className !== "c") &&\n				(tagParent.parentNode.id !== "fpn") &&\n				(!!searchshield.getParentNodeByClassName("ymc"\, tag\, 7)))\n		{\n			// Korea Yahoo support - when not caught by yschttl\n			var da = href.indexOf("**")\;\n			if (da !== -1)\n				outHref = href.substring(da+2)\;\n		}\n	}\n	else if (!this.onlyPrimaries)\n	{\n		findStr = "&yargs="\;\n		var yargs = href.indexOf(findStr)\;\n		if (yargs != -1)\n		{\n			outHref = href.substring(yargs+findStr.length)\;\n			// check for prefix\n			if (outHref.indexOf("://") == -1)\n				outHref = "http://" + outHref\;\n\n			// if inside an <I>\, probably a paypal link\, don't include\n			if (tag.parentNode && (tag.parentNode.tagName == "I"))\n				return false\;\n		} \n	}\n\n	// filter domains\n	// split the url based on '/'\n	var parts = !!outHref ? outHref.split('/') : null\;\n\n	// Filter out domains that match any of the search engine's names\n	if (!parts || !parts[2])\n		return false\;\n		\n	var domain = parts[2]\;\n	if ((domain.indexOf("rdrjp.yahoo.com") != -1)	||\n		(domain.indexOf("rdrkrs.yahoo.com") != -1)	||\n		(domain.indexOf("rdrtpe.yahoo.com") != -1)	||\n		(domain.indexOf("rdrird.yahoo.com") != -1)	||\n		(domain.indexOf("rdrhk2.yahoo.com") != -1)	||\n		(domain.indexOf("rdrsg1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrin2.yahoo.com") != -1)	||\n		(domain.indexOf("rdre1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrw1.yahoo.com") != -1)		)\n	{\n		return false\;\n	}\n\n	// set for yahoo to get parent node for image insertion\n	var hash = searchshield.avgCallFunc(this.doc\, 'GetHash'\, outHref)\;\n	tag.setAttribute("id"\, "xplid_" + hash)\;\n	return outHref\;\n}\;\n///////////////    YAHOO SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    AVG YAHOO SEARCH ENGINE    ///////////////\nsearchshield.AVGYahooSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n}\;\nsearchshield.AVGYahooSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AVGYahooSearchEngine.prototype.constructor = searchshield.AVGYahooSearchEngine\;\nsearchshield.AVGYahooSearchEngine.prototype.name = "avgyahoo"\;\nsearchshield.AVGYahooSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	//path may be 'avg/search' or 'search'\n	var pathArray = uri.path.split("/")\;\n	var avg = pathArray[0]\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1]\;\n		path += uri.delimiter + uri.query\;\n\n	// For AVG Yahoo classic the host must match:\n	//	yhs.search.yahoo.com	OR\n	//	.yhs.search.yahoo.com\n	if (domain.indexOf("yhs.search.yahoo.co") != -1)\n	{\n		if ((avg == "avg") &&\n			((path.indexOf("search?") == 0) ||\n			 (path.indexOf("search\;") == 0)))\n		{\n			return true\;\n		}\n	}\n	\n	// also support new metro version which DOESN'T \n	// contain /avg so avg split part is path\n	// valid domains are:\n	//	search.yahoo.com\, \n	//	xx.search.yahoo.com and\n	//	search.yahoo.co.xx\n	if (domain.indexOf("search.yahoo.co") != -1) \n	{\n		// path (split avg) must start with search and\n		// contain the avg toolbar parameter\n		if (((path.indexOf("search?") == 0) ||\n			(path.indexOf("search\;") == 0)) &&\n			(path.indexOf("fr=yhs-avg") != -1))\n		{\n			return true\;\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.AVGYahooSearchEngine.prototype.includeLink = function(tag)\n{\n	var href		= ""\;\n	var outHref		= ""\;\n	var findStr		= ""\;\n\n	if (this.search.doc.body.className.toLowerCase() != "standard")\n	{	// handle as std Yahoo results page\n		return searchshield.YahooSearchEngine.prototype.includeLink(tag)\;\n	}	\n\n	// yahoo likes to encode the url\n	href = unescape(tag.href)\;\n\n	if (tag.target == "_top")\n	{\n		var da = href.indexOf("**")\;\n		if (da != -1)\n			outHref = href.substring(da+2)\;\n		else\n			outHref = href \;\n\n		if (outHref.toLowerCase().indexOf("overture.") !== -1)\n			return false\;\n	}\n	else if (!this.onlyPrimaries)\n	{\n		findStr = "&yargs="\;\n		var yargs = href.indexOf(findStr)\;\n		if (yargs != -1)\n		{\n			outHref = href.substring(yargs+findStr.length)\;\n			// check for prefix\n			if (outHref.indexOf("://") == -1)\n				outHref = "http://" + outHref\;\n\n			// if inside an <I>\, probably a paypal link\, don't include\n			if (tag.parentNode && (tag.parentNode.tagName == "I"))\n				return false\;\n		} \n	}\n\n	// filter domains\n	// split the url based on '/'\n	var parts = outHref.split('/')\;\n\n	// Filter out domains that match any of the search engine's names\n	if (!parts[2])\n		return false\;\n		\n	var domain = parts[2]\;\n	if ((domain.indexOf("rdrjp.yahoo.com") != -1)	||\n		(domain.indexOf("rdrkrs.yahoo.com") != -1)	||\n		(domain.indexOf("rdrtpe.yahoo.com") != -1)	||\n		(domain.indexOf("rdrird.yahoo.com") != -1)	||\n		(domain.indexOf("rdrhk2.yahoo.com") != -1)	||\n		(domain.indexOf("rdrsg1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrin2.yahoo.com") != -1)	||\n		(domain.indexOf("rdre1.yahoo.com") != -1)	||\n		(domain.indexOf("rdrw1.yahoo.com") != -1)		)\n	{\n		return false\;\n	}\n\n	return outHref\;\n}\;\nsearchshield.AVGYahooSearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n	// remove style that is set when alt image is applied\n	this.updateImageStyle = {\n		verticalAlign: null\n	}\;\n		\n	// don't show verisign icon\n	if (alt_image && (alt_image.length > 0))\n		this.omitAltImage = true\;\n		\n	var parent = searchshield.SearchEngine.prototype.updateImage\;\n	return parent.call(this\, hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\n///////////////    AVG YAHOO SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    MSN SEARCH ENGINE    ///////////////\nsearchshield.MSNSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.onlyPrimaries = false\;\n}\;\nsearchshield.MSNSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.MSNSearchEngine.prototype.constructor = searchshield.MSNSearchEngine\;\nsearchshield.MSNSearchEngine.prototype.name = "msn"\;\nsearchshield.MSNSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// For MSN the host must match:\n	//	search.msn.com		OR\n	//	search.live.com\n	if (domain.indexOf("search.msn.co") > -1)\n	{\n		if (domain.charAt(13) == 'm')\n			hostMatch = true\;\n		else if ((domain.charAt(13) == '.') && (domain.length == 16))\n			hostMatch = true\;\n	}\n	else if (domain.indexOf("search.live.co") > -1)\n	{\n		if (domain.charAt(14) == 'm')\n			hostMatch = true\;\n		else if ((domain.charAt(14) == '.') && (domain.length == 17))\n			hostMatch = true\;\n	}\n	\n	if (hostMatch)\n	{\n		if (path.indexOf("results.aspx") == 0)\n			return true\;\n	}\n\n	return false\;\n}\;\nsearchshield.MSNSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n	\n	// these don't seem common from Firefox\, but they are in IE\n	if (searchshield.DoesURLContain(tag.href\, "g.msn.co"))\n	{\n		var qPos = tag.href.indexOf("?")\;\n		if (qPos != -1)\n		{\n			var postPart = tag.href.substring(qPos+1)\;\n			var dblAmp = postPart.indexOf("&&")\;\n			if (dblAmp != -1)\n			{\n				outHref = postPart.substring(0\, dblAmp)\;\n				return outHref\;\n			}\n		}\n	}\n	else if (searchshield.DoesURLContain(tag.href\, "r.msn.co"))\n	{\n		var element = tag\;\n		var parentNode = tag.parentNode\;\n\n		// top links - check for a CITE\n		var spanElements = element.getElementsByTagName("CITE")\;\n		if ((spanElements != null)				&& \n			(spanElements.length > 0))\n		{\n			outHref = spanElements[0].innerHTML\;\n			// replace any nbsp's\n			outHref = outHref.replace("&nbsp\;"\, " ")\;\n\n			// url is after the last space in the html\, after the '-'\n			var space_pos = outHref.lastIndexOf(" ")\;\n			if (space_pos != -1)\n				outHref = outHref.slice(space_pos + 1)\;\n\n			outHref = searchshield.checkUrl(outHref)\;\n			return outHref\;\n		}\n		\n		// side links \n		if (element.lastChild != null)\n		{\n			outHref = element.lastChild.innerHTML\;\n			if ( outHref != null)\n			{\n				outHref = searchshield.checkUrl(outHref)\;\n				return outHref\;\n			}\n		}\n	}\n	else if (searchshield.DoesURLContain(tag.href\, this.search.uri.host)					||\n			 searchshield.DoesURLContain(tag.href\, ".live.com")					||\n			 searchshield.DoesURLContain(tag.href\, "msn.")						||\n			 searchshield.DoesURLContain(tag.href\, "msnscache.com")				||\n			 searchshield.DoesURLContain(tag.href\, "advertising.microsoft.co")	||\n			 searchshield.DoesURLContain(tag.href\, "javascript:")				||\n			 searchshield.DoesURLContain(tag.href\, "go.microsoft.co")			||\n			 searchshield.DoesURLContain(tag.href\, "hotmail.co"))\n	{\n		// not a link\n		return false\;\n	}\n	else if (tag.id.toLowerCase() == "trademarks")\n	{\n		// don't link the trademark at the bottom of the page\n		return false\;\n	}\n	else\n	{\n		// include it\n		return tag.href\;\n	}\n}\;\n///////////////    MSN SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    BING SEARCH ENGINE    ///////////////\nsearchshield.BingSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.BingSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.BingSearchEngine.prototype.constructor = searchshield.BingSearchEngine\;\nsearchshield.BingSearchEngine.prototype.name = "bing"\;\nsearchshield.BingSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	// For bing the host must match:\n	//	www.bing.com or www.bing.net\n	//	xx.bing.com or xx.bing.net where xx is a country code\n	//	bing.com.xx where xx is a country code\n	//	bing.search.xxxx.net where xxxx may be something like daum\n	if ((domain.indexOf("www.bing.com") !== -1) ||\n		(domain.indexOf("www.bing.net") !== -1) ||\n		(domain.indexOf("bing.net") !== -1))\n	{\n		hostMatch = true\;\n	}\n	else if ((domain.indexOf("bing.search.") !== -1) && \n			 (domain.indexOf(".net") === (domain.length-4))) \n	{	//bing.search.xxxx.net\n		hostMatch = true\;\n	}\n	else\n	{	// xx.bing.com or bing.com.xx\n		var domainLen = domain.length\;\n		var tldPos = domain.indexOf(".bing.com")\;\n		if (tldPos > -1)\n		{\n			if ((domainLen - tldPos) == 9)\n				hostMatch = true\;\n		}	\n	}\n	\n	if (hostMatch)\n	{\n		if (path.indexOf("search?") == 0)\n			return true\;\n	}\n\n	return false\;\n\n}\;\nsearchshield.BingSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n\n	if (tag.tagName == 'IMG')\n	{	//no images \n		return false\;\n	}\n		\n	if (tag.href.charAt(0) == '/')\n	{	//no relative links\n		return false\;\n	}\n\n	if (tag.id.toLowerCase() == "trademarks")\n	{\n		// don't link the trademark at the bottom of the page\n		return false\;\n	}\n	\n	if ((tag.parentNode) &&\n		(tag.parentNode.id.toLowerCase() == "sc_stc"))\n	{	// don't verdict the social sites - our verdict doesn't fit\n		return false\;\n	}\n	else if (!!searchshield.getParentNodeByClassName("sw_t"\,tag\,3))\n	{	// no links in page header\n		return false\;\n	}\n	else if (searchshield.DoesURLContain(tag.href\, "r.msn.co") ||\n			 searchshield.DoesURLContain(tag.href\, "overture.com"))\n	{	// france has r.msn.co and italy has overture.com sponsored links\n		// with the link in CITE element\n		\n		var spanElements = null\;\n		\n		// top links - check for a CITE\n		spanElements = tag.getElementsByTagName("CITE")\;\n		if ((spanElements == null) || (spanElements.length <= 0))\n		{\n			if (tag.parentNode && tag.parentNode.parentNode)\n				spanElements = tag.parentNode.parentNode.getElementsByTagName("CITE")\;\n		}\n		\n		if ((spanElements != null) && (spanElements.length > 0))\n		{\n			outHref = spanElements[0].innerHTML\;\n			if (outHref != null)\n			{\n				// replace any nbsp's\n				outHref = outHref.replace("&nbsp\;"\, " ")\;\n\n				// url is after the last space in the html\, after the '-'\n				var space_pos = outHref.lastIndexOf(" ")\;\n				if (space_pos != -1)\n					outHref = outHref.slice(space_pos + 1)\;\n\n				outHref = searchshield.checkUrl(outHref)\;\n\n				// save the link\n				return outHref\;\n			}\n		}\n		\n		// side links \n		if (tag.lastChild != null)\n		{\n			outHref = tag.lastChild.innerHTML\;\n			if (outHref != null)\n			{\n				outHref = searchshield.checkUrl(outHref)\;\n				// save the link\n				return outHref\;\n			}\n		}\n	}\n	// no sponsored links for now \n	else if (searchshield.DoesURLContain(tag.href\, this.search.uri.host)	||\n		 searchshield.DoesURLContain(tag.href\, ".live.com")				||\n		 searchshield.DoesURLContain(tag.href\, ".bing.com")				||\n		 searchshield.DoesURLContain(tag.href\, ".bing.net")				||\n		 searchshield.DoesURLContain(tag.href\, ".daum.net")				||\n		 searchshield.DoesURLContain(tag.href\, ".gmarket.co")			||\n		 searchshield.DoesURLContain(tag.href\, ".multimap.com")			||\n		 searchshield.DoesURLContain(tag.href\, "msn.")					||\n		 searchshield.DoesURLContain(tag.href\, "ms.ciao.")				||\n		 searchshield.DoesURLContain(tag.href\, "ms.ciao-")				||\n		 searchshield.DoesURLContain(tag.href\, "advertising.microsoft.co")	||\n		 searchshield.DoesURLContain(tag.href\, "javascript:")				||\n		 searchshield.DoesURLContain(tag.href\, "go.microsoft.co")			||\n		 searchshield.DoesURLContain(tag.href\, "hotmail.co")					||\n		 searchshield.DoesURLContain(tag.href\, "cc.bingj.com")				||\n		 searchshield.DoesURLContain(tag.href\, "microsofttranslator.com")	||\n		 searchshield.DoesURLContain(tag.href\, ".engkoo.com")				||\n		 searchshield.DoesURLContain(tag.href\, "sealinfo.verisign.com")		||\n		 searchshield.DoesURLContain(tag.href\, "explabs.com")				||\n		 searchshield.DoesURLContain(tag.href\, "onlinehelp.microsoft.com"))\n	{\n		// not a link\n		return false\;\n	}\n	else\n		return tag.href\;\n}\;\nsearchshield.BingSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	var element	= node.element\;\n	var parentNode 	= node.element.parentNode\;\n	var grandParentNode = !!parentNode ? parentNode.parentNode : null\;\n\n	// if there are redundant links in the same grandparent then skip them\n	if (!!grandParentNode)\n	{\n		gpChildren = grandParentNode.childNodes\;\n		for (var i=0\; i < gpChildren.length\; i++)\n		{\n			if (!!element.href && gpChildren[i].tagName == "A" && gpChildren[i].href == element.href)\n				return\;\n		}\n	}\n\n	var parent = searchshield.SearchEngine.prototype.addImage\;\n	return parent.call(this\, node\, image\, hidden)\;\n}\;\n///////////////    BING SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    BAIDU SEARCH ENGINE    ///////////////\nsearchshield.BaiduSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.BaiduSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.BaiduSearchEngine.prototype.constructor = searchshield.BaiduSearchEngine\;\nsearchshield.BaiduSearchEngine.prototype.name = "baidu"\;\nsearchshield.BaiduSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if (domain == "www.baidu.com" || path.indexOf("testBaidu") !== -1)\n		hostMatch = true\;\n		\n	if (hostMatch)\n	{\n		if (path.indexOf("s?") == 0)\n			return true\;\n	}\n\n	return false\;\n}\;\nsearchshield.BaiduSearchEngine.prototype.includeLink = function(tag)\n{		\n		if (tag.className && tag.className == "m")\n			return false\;\n\n		if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n			return false\;\n		else \n		{\n			// no link to self\n			var traverseElement = tag.parentNode\;\n			while ( traverseElement && traverseElement.className != "tbody")\n			{\n				if (traverseElement.className == "f")\n					return tag.href\;\n\n				traverseElement = traverseElement.parentNode\;\n			}\n			\n			return false\;\n		}\n\n}\;\nsearchshield.BaiduSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	this.addImageStyle = {\n		position: "relative"\,\n		top: "0.05em"\n	}\;\n		\n	var parent = searchshield.SearchEngine.prototype.addImage\;\n	return parent.call(this\, node\, image\, hidden)\;\n}\;\nsearchshield.BaiduSearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n	// remove style that is set when alt image is applied\n	this.updateImageStyle = {\n		verticalAlign: null\n	}\;\n	\n	var parent = searchshield.SearchEngine.prototype.updateImage\;\n	return parent.call(this\, hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\n///////////////    BAIDU SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    EARTHLINK SEARCH ENGINE    ///////////////\nsearchshield.EarthlinkSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.onlyPrimaries = false\;\n\n	this.addAnchorStyle = {\n		position: "static"\n	}\;\n}\;\nsearchshield.EarthlinkSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.EarthlinkSearchEngine.prototype.constructor = searchshield.EarthlinkSearchEngine\;\nsearchshield.EarthlinkSearchEngine.prototype.name = "earthlink"\;\nsearchshield.EarthlinkSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var hostMatch	= false\;\n	var domain		= uri.host\;\n\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// For EarthLink the host must match:\n	//	search.earthlink.net\n	if (("search.earthlink.net" == domain)	&&\n		(path.indexOf("search?") == 0))\n	{\n		return true\;\n	}\n\n	return false\;\n}\;\nsearchshield.EarthlinkSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref	= ""\;\n	var findStr	= ""\;\n\n	// check for an anchor\n	if (tag.tagName == "A")\n	{\n		// check for sponsored\n		if (tag.id.indexOf("a") == 0)\n		{\n			var q = tag.href.indexOf("&q=")\;\n			var qlen = 3\;\n			if (q == -1)\n			{\n				q = tag.href.indexOf("&adurl=")\;\n				qlen = 7\;\n				if (q == -1)\n					return false\;\n			}\n\n			// find end of url\n			var end = tag.href.indexOf("&"\, q+qlen)\;\n			if (end < 0)\n				end = tag.href.length\;\n\n			// add the link\n			outHref = tag.href.substring(q+qlen\, end)\;\n			\n			if (searchshield.FilterUrl(outHref\, this.filter_urls))\n				return false\;\n				\n			return outHref\;\n		}\n\n		// don't search url's to self\n		if ((tag.href.indexOf("://") == -1) || searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n			return false\;\n\n		// if a normal web result add it\n		if (tag.parentNode && (tag.parentNode.tagName == "H3") &&\n			tag.parentNode.parentNode && (tag.parentNode.parentNode.tagName == "LI") &&\n			tag.parentNode.parentNode.parentNode && (tag.parentNode.parentNode.parentNode.tagName == "UL"))\n		{\n			if (searchshield.FilterUrl(tag.href\, this.filter_urls))\n				return false\;\n				\n			return tag.href\;\n		}\n	}\n	\n	return false\;\n}\;\n///////////////    EARTHLINK SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    AOL SEARCH ENGINE    ///////////////\nsearchshield.AOLSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.AOLSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AOLSearchEngine.prototype.constructor = searchshield.AOLSearchEngine\;\nsearchshield.AOLSearchEngine.prototype.name = "aol"\;\nsearchshield.AOLSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain = uri.host\;\n	//path may be 'aol/search' or 'search'\n	var pathArray = uri.path.split("/")\;\n	var aol = pathArray[0]\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = (undefined == pathArray[1]) ? pathArray[0] : pathArray[1]\;\n		path += uri.delimiter + uri.query\;\n\n	if ("search.aol.com" == domain)\n	{\n		if ((aol == "aol") &&\n			(path.indexOf("search?") == 0))\n		{\n			return true\;\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.AOLSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n	\n	// sponsored links - google\n	if ((tag.className) && (tag.className.indexOf("slLink") != -1))\n	{	//parse for embedded href\n\n		if (tag.href.indexOf("/aclk?sa=") == -1)\n			return false\;\n\n		var adurl = tag.href.indexOf("&adurl=http")\;\n		if (adurl != -1)\n		{\n			var urlPos = adurl+7\; // puts it on the http\n			var outHref = tag.href.substring(urlPos)\;\n\n			// extract any fragment text\, do not unescape\n			var pound = outHref.indexOf("#")\;	\n			if (pound != -1)\n			{\n				var fragment = outHref.substring(pound)\;\n				outHref = outHref.substring(0\, pound)\;\n				outHref = unescape(outHref)\;\n				outHref += fragment\;\n				if (searchshield.FilterUrl(outHref\, this.filter_urls))\n					return false\;\n\n				return outHref\;\n			}\n\n			outHref = unescape(outHref)\;\n			if (outHref.indexOf("?") == -1)\n			{\n				var ampPos = outHref.indexOf("&")\;\n				if (ampPos != -1)\n					outHref = outHref.substring(0\, ampPos)\;\n			}\n				\n			if (searchshield.FilterUrl(outHref\, this.filter_urls))\n				return false\;\n\n			return outHref\;\n		}\n\n		return false\;\n	}\n\n	if (tag.className == "find")\n		return tag.href\;\n		\n	return false\;\n}\;\nsearchshield.AOLSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	this.addImageStyle = {\n		display: "inline"\n	}\;\n\n	this.addAnchorStyle = {\n		display: null\n	}\;\n		\n	var parent = searchshield.SearchEngine.prototype.addImage\;\n	return parent.call(this\, node\, image\, hidden)\;\n}\;\nsearchshield.AOLSearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n	// remove style that is set when alt image is applied\n	this.updateImageStyle = {\n		verticalAlign: null\,\n		display: "inline"\n	}\;\n		\n	var parent = searchshield.SearchEngine.prototype.updateImage\;\n	return parent.call(this\, hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\nsearchshield.AOLSearchEngine.prototype.insertNodes = function(node\, doc)\n{\n	var element = node.element\;\n	var score = node.score\;\n\n	if (element && element.className && element.className.indexOf("slLink") != -1)\n	{	//sponsored links only\n\n		// for alt image\n		if (score == searchshield.SCORE_SS_VERISIGN)\n			return [element.nextSibling\, element.parentNode]\;\n\n		// for verdict image\n		var cN = element.childNodes\;\n		var cnLen = cN.length\;\n		for (var i=0\; i < cnLen\; i++)\n		{\n			if ((cN[i].nodeType == 1) && (cN[i].nodeName == 'SPAN') && (cN[i].className == 'title'))\n				return [cN[i].nextSibling\, cN[i].parentNode]\;\n		}\n	}\n	else\n	{\n		var parent = searchshield.SearchEngine.prototype.insertNodes\;\n		return parent.call(this\, node\, doc)\;\n	}\n}\;\n///////////////    AOL SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    ASK SEARCH ENGINE    ///////////////\nsearchshield.AskSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.AskSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AskSearchEngine.prototype.constructor = searchshield.AskSearchEngine\;\nsearchshield.AskSearchEngine.prototype.name = "ask"\;\nsearchshield.AskSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if ("www.ask.com" == domain)\n	{\n		if (path.indexOf("web?") == 0)\n			return true\;\n	}\n\n	return false\;\n}\;\nsearchshield.AskSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref	= ""\;\n	var findStr	= ""\;\n\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n	\n	if ((tag.className) && (tag.className.indexOf("nu") != -1) && (tag.className.indexOf("info") == -1)) \n	{\n		// exclude green links\n		if ((tag.firstChild) &&\n			(tag.firstChild.className) &&\n			(tag.firstChild.className.indexOf('attrib') == 0))\n		{\n			return false\;\n		}\n\n		// ads link to google with class nu\n		findStr = "www.google.com"\;\n		if (tag.href.indexOf(findStr) != 0)\n		{\n			if (tag.href.indexOf(findStr + "/aclk?sa=") != -1)\n			{	\n				findStr = "&adurl=http"\;\n				var pos = tag.href.indexOf(findStr)\;\n				if (pos != -1)\n				{\n					pos += 7\;\n					outHref = tag.href.substring(pos)\;\n					outHref = unescape(outHref)\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n							return false\;\n					return outHref\;\n				}\n			}\n		}\n		else\n		{	// ad not to google just use href\n			outHref = tag.href\;\n			if (searchshield.FilterUrl(outHref\, this.filter_urls))\n				return false\;\n			return outHref\;\n		}\n	}\n	// primary results have class containing title or L2 ( Wikipedia links )\n	else if ((tag.className) && ((tag.className.indexOf("title") != -1) || (tag.className.toLowerCase() == "l2")))\n	{\n		outHref = tag.href\;\n		if (searchshield.FilterUrl(outHref\, this.filter_urls))\n			return false\;\n		return outHref\;\n	}\n	\n	return false\;\n}\;\n///////////////    ASK SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    ALTAVISTA SEARCH ENGINE    ///////////////\nsearchshield.AltaVistaSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.AltaVistaSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.AltaVistaSearchEngine.prototype.constructor = searchshield.AltaVistaSearchEngine\;\nsearchshield.AltaVistaSearchEngine.prototype.name = "altavista"\;\nsearchshield.AltaVistaSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	// www.atlavista.com ---> now http://us.yhs4.search.yahoo.com/yhs/search?fr=altavista&fr=altavista&itag=ody&q=warez&kgs=1&kls=0\n	// xx.altavista.com where xx is a country code\n	var hostMatch = false\;\n	if ("www.altavista.com" == domain)\n	{\n		hostMatch = true\;\n	}\n	else\n	{\n		// xx.altavista.com\n		var pDest = domain.indexOf(".altavista.com")\;\n		if ((pDest != -1 ) && ((domain.length - pDest) == 14))\n		{\n			hostMatch = true\;\n		}\n		else\n		{\n			// a reference to altavista must be present in yahoo search url\n			var pRef = (uri.qsArray.fr && uri.qsArray.fr == 'altavista')\;\n			pDest = domain.indexOf("search.yahoo.com")\;\n			if (pDest != -1 && pRef)\n				hostMatch = true\;\n		}\n	}\n\n	if (hostMatch)\n	{\n		//path must start with web/results?\n		if ((path.indexOf("yhs/search?") == 0)	||\n			(path.indexOf("search\;") == 0)		||\n			(path.indexOf("yhs/search\;") == 0)	||\n			(path.indexOf("web/results?") == 0)||\n			(path.indexOf("fr=altavista") != -1))\n		{\n			return true\;\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.AltaVistaSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref	= ""\;\n	var findStr	= ""\;\n\n	// initial checks\n	if ((!tag.href)	|| \n		(tag.href.charAt(0) == '#') ||\n		(tag.href.indexOf("javascript:") == 0))\n	{\n		return false\;\n	}\n		\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n		\n	if ((tag.className == "spt") || \n		(tag.className == "res") ||\n		(tag.className == "yschttl spt"))\n	{\n		findStr = "/**"\;\n		var pos = tag.href.indexOf(findStr)\;\n		if (pos != -1)\n		{\n			pos += 3\;\n			outHref = tag.href.substring(pos)\;\n			outHref = unescape(outHref)\;\n			\n			// no results for overture.com & no yahoo domains\n			chkHref = outHref.toLowerCase()\;\n			if (chkHref.indexOf("overture.") != -1)\n				return false\;\n\n			// split the url based on '/'\n			var parts = outHref.split('/')\;\n\n			// only need a domain\n			if ((parts != null) && (parts[2] != null))\n			{\n				var domain = parts[2]\;\n				if ((domain.indexOf("rdrjp.yahoo.com") != -1)	||\n					(domain.indexOf("rdrkrs.yahoo.com") != -1)	||\n					(domain.indexOf("rdrtpe.yahoo.com") != -1)	||\n					(domain.indexOf("rdrird.yahoo.com") != -1)	||\n					(domain.indexOf("rdrhk2.yahoo.com") != -1)	||\n					(domain.indexOf("rdrsg1.yahoo.com") != -1)	||\n					(domain.indexOf("rdrin2.yahoo.com") != -1)	||\n					(domain.indexOf("rdre1.yahoo.com") != -1)	||\n					(domain.indexOf("rdrw1.yahoo.com") != -1)		)\n				{\n					return false\n				}\n			}\n\n			return outHref\;\n		}\n		else\n		{\n			return tag.href\;\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.AltaVistaSearchEngine.prototype.getImgElement = function (element)\n{\n	while (element != null) \n	{\n		element = element.nextSibling\;\n		if (element != null)\n		{\n			if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1))\n			{   // not our id but hit another anchor no verdict\n				if (element.tagName == "A")\n				{\n					element = null\;\n					break\;\n				}\n			}\n			else if (element.tagName == "A")\n				break\;\n		}\n 	}\n		\n	var rtnElem = !!element ? element.firstChild : element\;\n	return rtnElem\;\n}\;\n///////////////    ALTAVISTA SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    YANDEX SEARCH ENGINE    ///////////////\nsearchshield.YandexSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.YandexSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.YandexSearchEngine.prototype.constructor = searchshield.YandexSearchEngine\;\nsearchshield.YandexSearchEngine.prototype.name = "yandex"\;\nsearchshield.YandexSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if (((domain.indexOf("yandex.ru") > -1) ||\n		(domain.indexOf("yandex.com") > -1)) &&\n		(path.indexOf("yandsearch?") == 0))\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.YandexSearchEngine.prototype.includeLink = function(tag)\n{\n	if (tag.href.indexOf("/search") != -1)\n	{\n		return false\;\n	}\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host)	||\n		searchshield.DoesURLContain(tag.href\, ".yandex.net")		||\n		searchshield.DoesURLContain(tag.href\, ".yandex.ru")			||\n		searchshield.DoesURLContain(tag.href\, "moikrug.ru")			||\n		searchshield.DoesURLContain(tag.href\, "ya.ru")				||\n		searchshield.DoesURLContain(tag.href\, ".yandex.com")		||\n		searchshield.DoesURLContain(tag.href\, "yandex.st"))\n	{\n		return false\;\n	}\n		\n	parentNode = tag.parentNode\;\n	if ((tag.parentNode)			&& \n		(tag.parentNode.parentNode)	&&\n		(tag.parentNode.parentNode.className.toLowerCase() == "moreinfo"))\n	{\n		return false\;\n	}\n	\n	return tag.href\;\n}\;\nsearchshield.YandexSearchEngine.prototype.getImgElement = function (element)\n{\n	while (element != null) \n	{\n		element = element.nextSibling\;\n		if (element != null)\n		{\n			if ((element.id == null) || (element.id.indexOf("LXPLSS_") == -1))\n			{   // not our id but hit another anchor no verdict\n				if (element.tagName == "A")\n				{\n					element = null\;\n					break\;\n				}\n			}\n			else if (element.tagName == "A")\n				break\;\n		}\n 	}\n		\n	var rtnElem = !!element ? element.firstChild : element\;\n	return rtnElem\;\n}\;\n///////////////    YANDEX SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    SEZNAM SEARCH ENGINE    ///////////////\nsearchshield.SeznamSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.SeznamSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.SeznamSearchEngine.prototype.constructor = searchshield.SeznamSearchEngine\;\nsearchshield.SeznamSearchEngine.prototype.name = "seznam"\;\nsearchshield.SeznamSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if ((domain.indexOf("search.seznam.cz") > -1)	&&\n		((path.indexOf("?") == 0) || (path.indexOf("svet") == 0)))\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.SeznamSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n	\n	var parentNode = tag.parentNode\;\n	if (parentNode)\n	{\n		var grandParentNode = tag.parentNode.parentNode\;\n		if ((parentNode.tagName == "SPAN") && \n			((parentNode.className.toLowerCase() == "sklik-url") ||\n			(parentNode.className.toLowerCase() == "sklik-title")))\n		{	// locate the real url and unencode it\n			var urlPos = tag.href.indexOf("&url=http")\;\n\n			if (urlPos != -1)\n			{\n				urlPos += 5\;	\n				outHref = tag.href.substring(urlPos)\;\n				outHref = unescape(outHref)\;\n\n				return outHref\;\n			}\n		}\n		else if (grandParentNode) \n		{\n			var greatGrandParentNode = tag.parentNode.parentNode.parentNode\;\n			if ((grandParentNode.tagName == "DIV") &&\n				((grandParentNode.className.toLowerCase() == "text") || (grandParentNode.className.toLowerCase() == "hlasky otz")))\n			{	// standard link\n				return tag.href\;\n			}\n			else if (greatGrandParentNode && greatGrandParentNode.tagName == "DIV" &&\n					(greatGrandParentNode.className.toLowerCase() == "hotlinks")) \n			{	// hint link\n				return tag.href\;\n			}\n			\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.SeznamSearchEngine.prototype.updateImage = function (hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\n{\n	this.elementAttribute = {\n		width: "18"\,\n		height: "18"\n	}\;\n\n	this.updateImageStyle = {\n		width: "18px"\,\n		height: "18px"\n	}\;\n	\n	var parent = searchshield.SearchEngine.prototype.updateImage\;\n	return parent.call(this\, hash\, search\, score\, image\, alt_image\, flyover\, click_thru\, altClick_thru)\;\n}\;\n///////////////    SEZNAM SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    WEBHLEDANI SEARCH ENGINE    ///////////////\nsearchshield.WebhledaniSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.WebhledaniSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.WebhledaniSearchEngine.prototype.constructor = searchshield.WebhledaniSearchEngine\;\nsearchshield.WebhledaniSearchEngine.prototype.name = "webhledani"\;\nsearchshield.WebhledaniSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if ((domain.indexOf("webhledani.cz") > -1)	&&\n		(path.indexOf("results.aspx?") == 0))\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.WebhledaniSearchEngine.prototype.includeLink = function(tag)\n{\n	var parentNode = tag.parentNode\;\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n	{\n		if ( tag.href.indexOf("/redir.aspx?") != -1)\n		{\n			attrNode = tag.attributes\;\n			if ( attrNode == null )\n				return false\;\n\n			var outHref = attrNode.getNamedItem("onmouseover").nodeValue\;\n			if ( outHref == null )\n				return false\;\n	\n			var findStr = "window.status="\;\n			if (outHref.indexOf(findStr)!= -1)\n			{\n				// get text before first semicolon\n				var semicolon = outHref.indexOf("\;")\;\n				if (semicolon > -1)\n					outHref = outHref.substring(findStr.length\, semicolon)\;\n\n				// strip quotation marks\n				outHref = outHref.replace(/['"]/g\, "")\;\n\n				var space = outHref.indexOf(" ")\;\n				var firstDot = outHref.indexOf(".")\;\n\n				if ((space > -1) && (space < firstDot))\n					outHref = outHref.substring(space+1)\;\n\n				outHref = searchshield.checkUrl(outHref)\;\n				return outHref\;\n			}\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.WebhledaniSearchEngine.prototype.insertNodes = function(node\, doc)\n{\n	var element = node.element\;\n	var score = node.score\;\n\n	// for alt image\n	if (score == searchshield.SCORE_SS_VERISIGN)\n		return [element.nextSibling\, element.parentNode]\;\n\n	// for verdict image\n	var cN = element.childNodes\;\n	var cnLen = cN.length\;\n	for (var i=0\; i < cnLen\; i++)\n	{\n		if (cN[i].nodeType == 1 && cN[i].nodeName == 'SPAN' && cN[i].className == 'sl')\n		{\n			if (!this.cssUpdated)\n			{\n				this.cssUpdated = true\;\n\n				// need to add style to make verdicts display inline\n				var docStyle = doc.styleSheets[0]\;\n				if (docStyle && docStyle.addRule)\n				{	//IE\n					docStyle.addRule('#s a'\,'display:inline')\;\n					docStyle.addRule('#s p a .sl'\,'display:inline')\;\n				}\n				else if (docStyle && docStyle.insertRule)\n				{\n					docStyle.insertRule('#s a {display:inline}'\, docStyle.cssRules.length)\;\n					docStyle.insertRule('#s p a .sl {display:inline}'\, docStyle.cssRules.length)\;\n				}\n			}\n\n			return [cN[i].nextSibling\, cN[i].parentNode]\;\n		}\n	}\n\n	// don't display anything\n	return [null\, null]\;\n}\;\n///////////////    WEBHLEDANI SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    EBAY SEARCH ENGINE    ///////////////\nsearchshield.eBaySearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n}\;\nsearchshield.eBaySearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.eBaySearchEngine.prototype.constructor = searchshield.eBaySearchEngine\;\nsearchshield.eBaySearchEngine.prototype.name = "ebay"\;\nsearchshield.eBaySearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// shop.ebay.xx\n	// shop.xxxx.ebay.xx	like shop.benl.ebay.be\n	// search.auction.co.kr \n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if ((domain.indexOf("shop.ebay") > -1)	||\n		(domain.indexOf("shop.benl.ebay") > -1))\n	{\n		if ((path.indexOf("?_from=") == 0)	||\n			(path.indexOf("i.html") > -1))\n		{\n			return true\;\n		}\n	}\n	\n	// ebay.se\n	if ((domain.indexOf("search.eim.ebay") > -1) &&\n		((path.indexOf("?kw=") > -1) || (path.indexOf("?ev=") > -1)))\n	{\n		return true\;\n	}\n	\n	if ((domain.indexOf("search.auction.co.kr") > -1 ) &&\n		((path.indexOf("?keyword=") > -1)))\n	{\n		// would normally set these properties in the constructor or in an\n		// overriding function but they're only required for this domain\n		 \n		// links are in iframes\n		this.processFrames = true\;\n		\n		// must downsize verdicts for proper display\n		this.elementAttribute = {\n			width: "16"\,\n			height: "16"\n		}\;\n		this.updateImageStyle = {\n			width: "16px"\,\n			height: "16px"\n		}\;\n		\n		return true\;\n	}\n\n	// latin america ebay\n	// listado.mercadolibre.com.xx or listado.mercadolibre.co.xx\n	//   or listado.mercadolibre.xx or\n	//   category.mercadolibre.com.xx or listado.mercadolibre.xx/category\n	// lista.mercadolivre.com.xx or lista.mercadolivre.com.xx/category\n	if ((domain.indexOf("www.") == -1) &&\n		((domain.indexOf(".mercadolibre.") > -1 ) ||\n		 (domain.indexOf(".mercadolivre.") > -1 ))) \n	{\n		return true\;\n	}\n	return false\;\n}\;\nsearchshield.eBaySearchEngine.prototype.includeLink = function(tag)\n{\n	var parentNode = null\;\n	var outHref = false\;\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n	\n	if ( tag.href.indexOf(".ebayrtm.com/clk?") > -1 )\n	{\n		if ( tag.title == null || tag.title.length < 0 )\n			return false\;\n					\n		outHref = searchshield.removeHtmlTags(tag.title)\;\n		if (outHref.indexOf(" ") == -1)\n		{	// no spaces\n			if (outHref.indexOf(".") > -1)\n			{	// at least one dot \n				if (outHref.indexOf(this.search.uri.host) == -1)\n				{	// no host\n					if (outHref.toLowerCase().indexOf("ebay.com") == -1)\n					{\n						return outHref\;\n					}\n				}\n			}\n		}			\n	}\n	// ebay.se - Google ads\n	parentNode = tag.parentNode\;\n	if (parentNode && (parentNode.className.toLowerCase() == "google-ad-link"))\n	{\n		if (tag.href.indexOf("/aclk?sa=") != -1)\n		{	\n			findStr = "&adurl=http"\;\n			var urlPos	= tag.href.indexOf(findStr)\;\n			if (urlPos != -1)\n			{\n				urlPos += 7\; // puts it on the http\n				outHref = tag.href.substring(urlPos)\;\n				\n				// extract any fragment text\, shouldn't be unescaped\n				var pound = outHref.indexOf("#")\;	\n				if (pound != -1)\n				{\n					var fragment = outHref.substring(pound)\;\n					outHref = outHref.substring(0\, pound)\;\n					outHref = unescape(outHref)\;\n					outHref += fragment\;\n					if (searchshield.FilterUrl(outHref\, this.filter_urls))\n						return false\;\n\n					return outHref\;\n				}\n\n				outHref = unescape(outHref)\;\n				if (outHref.indexOf("?") == -1)\n				{\n					var ampPos = outHref.indexOf("&")\;\n					if (ampPos != -1)\n						outHref = outHref.substring(0\, ampPos)\;\n				}\n				\n				if (searchshield.FilterUrl(outHref\, this.filter_urls))\n					return false\;\n				return outHref\;\n			}\n		}\n	}\n	\n	// auction.co.kr\n	parentNode = tag.parentNode\;\n	if (parentNode && (parentNode.className.toLowerCase() == "link"))\n	{\n		if (tag.href.indexOf("adcr.naver.com") > -1)\n		{\n			outHref = tag.innerText\;\n			if ((outHref == null) || (outHref.length < 0))\n				return false\;\n				\n			return outHref\;\n		}\n	}\n	\n	// latin america ebay\n	if ( tag.href.toLowerCase().indexOf("clickcounter?") > -1 )\n	{\n		var spanElements = tag.getElementsByTagName("span")\;\n		if ((spanElements != null)				&& \n			(spanElements.length > 0))\n		{\n			if ( spanElements[0].className.toLowerCase() == "mclics-url" )\n			{\n				outHref = spanElements[0].innerHTML\;\n				if ( outHref == null || outHref.length < 0 )\n					return false\;\n				outHref = searchshield.removeHtmlTags(outHref)\;\n				if (outHref.indexOf(" ") == -1)\n				{	// no spaces\n					if (outHref.indexOf(".") > -1)\n					{	// at least one dot \n						if (outHref.toLowerCase().indexOf("mercado") == -1)\n						{\n							return outHref\;\n						}\n					}\n				}\n			}\n		}\n	}\n	\n	return false\;\n}\;\n///////////////    EBAY SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    DIGG SEARCH ENGINE    ///////////////\nsearchshield.DiggSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.new_links	= false\;\n}\;\nsearchshield.DiggSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.DiggSearchEngine.prototype.constructor = searchshield.DiggSearchEngine\;\nsearchshield.DiggSearchEngine.prototype.name = "digg"\;\nsearchshield.DiggSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if ((domain.indexOf("digg.com") > -1)	&&\n		(path.indexOf("/ad") == -1))\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.DiggSearchEngine.prototype.includeLink = function(tag)\n{\n	var outHref = false\;\n	var findStr = ""\;\n	\n	if ((tag.parentNode) &&\n		(tag.parentNode.className.toLowerCase() == "digg-count"))\n	{\n		return false\;\n	}\n	\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n	{\n		if (tag.className && tag.className.indexOf('source') != -1)\n		{\n			findStr = "/search?q=site:"\;\n			var urlPos = tag.href.indexOf(findStr)\;\n			if (urlPos != -1)\n			{\n				urlPos += 15\;\n				outHref = tag.href.substring(urlPos)\;\n				return outHref\;\n			}\n		}\n	}\n	\n	return false\;\n}\;\nsearchshield.DiggSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	// remove style that is set when alt image is applied\n	this.addAnchorStyle = {\n		background: "none"\n	}\;\n		\n	var parent = searchshield.SearchEngine.prototype.addImage\;\n	return parent.call(this\, node\, image\, hidden)\;\n}\;\n///////////////    DIGG SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    SLASHDOT SEARCH ENGINE    ///////////////\nsearchshield.SlashdotSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n	this.new_links = false\;\n	this.type = 'inline'\;\n}\;\nsearchshield.SlashdotSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.SlashdotSearchEngine.prototype.constructor = searchshield.SlashdotSearchEngine\;\nsearchshield.SlashdotSearchEngine.prototype.name = "slashdot"\;\nsearchshield.SlashdotSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n	// re stitch the uri path and query elements\n	// to use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n	\n	if (domain.indexOf("slashdot.org") != -1)\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.SlashdotSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n		\n	if ( tag.href.indexOf("mailto:") != -1 )\n		return false\;\n		\n	if ( tag.href.indexOf("slashdot.org") != -1 )\n		return false\;\n		\n	if (tag.parentNode && (tag.parentNode.tagName == "DIV"))\n	{\n		if (tag.parentNode.id.indexOf("text-") != -1)\n		{\n			return tag.href\;\n		}\n	}\n	else if ( tag.parentNode && tag.parentNode.parentNode && tag.parentNode.parentNode.tagName == "DIV" )\n	{\n		if ( tag.parentNode.parentNode.id.indexOf("text-") != -1 )\n		{\n			return tag.href\;\n		}\n	}\n\n	return false\;\n}\;\nsearchshield.SlashdotSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	var doc			= this.search.doc\;\n	\n	this.init_inline_ratings(doc)\;\n	this.show_inline_ratings(doc\, node\, image)\;\n}\;\n///////////////    SLASHDOT SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    TWITTER SEARCH ENGINE    ///////////////\nsearchshield.TwitterSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n	this.new_links = false\;\n	this.type = 'inline'\;\n}\;\nsearchshield.TwitterSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.TwitterSearchEngine.prototype.constructor = searchshield.TwitterSearchEngine\;\nsearchshield.TwitterSearchEngine.prototype.name = "twitter"\;\nsearchshield.TwitterSearchEngine.prototype.twitter_filter_urls = ["twitpic.com"\, "twitterfeed.com"\, "twitter.peoplebrowsr.com"]\;\nsearchshield.TwitterSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n	\n	var domain= uri.host\;\n\n	if (domain.indexOf("twitter.com") != -1)\n	{\n		return true\;\n	}\n	\n	return false\;\n}\;\nsearchshield.TwitterSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n		\n	if (tag.className.length < 1)\n		return false\;\n	\n	// no verdicts on source of twit for example "from TweetDeck"\n	if ((tag.className.indexOf("tweet-url web") == 0) &&\n		(tag.className.indexOf("url") == 0 ))\n	{\n		return false\;\n	}\n		\n	if (searchshield.FilterUrl(tag.href\, this.twitter_filter_urls))\n	{\n		return false\;\n	}\n	\n	return tag.href\;\n}\;\nsearchshield.TwitterSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	var doc			= this.search.doc\;\n		\n	this.init_inline_ratings(doc)\;\n	this.show_inline_ratings(doc\, node\, image)\;\n}\;\n///////////////    TWITTER SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    GMAIL SEARCH ENGINE    ///////////////\nsearchshield.GMailSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.processFrames = true\;\n	this.showCleanVerdicts		= false\;\n	this.type = 'inline'\;\n}\;\nsearchshield.GMailSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.GMailSearchEngine.prototype.constructor = searchshield.GMailSearchEngine\;\nsearchshield.GMailSearchEngine.prototype.name = "gmail"\;	// the name by which the search engine is known (always lowercase)\nsearchshield.GMailSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	var domain		= uri.host\;\n	\n	// re stitch the uri path and query elements to\n	// use existing logic\n	var path = uri.path + uri.delimiter + uri.query\;\n\n	if ((domain.indexOf("mail.google.") != -1) || \n		(domain.indexOf("gmail.") != -1))\n	{\n		return true\;\n	}\n\n	return false\;\n}\;\nsearchshield.GMailSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host))\n		return false\;\n\n	// don't mark anything but http://\n	if (tag.href.indexOf("mailto") == 0)\n		return false\;\n\n	var parentDiv = searchshield.getParentNodeByTagName("DIV"\, tag\, "className")\;\n	if ((parentDiv) &&\n		((parentDiv.className == "ii gt") || // mail message body\n		 (parentDiv.className == "mv") ||	// top sponsored links\n		 (parentDiv.className == "vb") ||	// right sponsored links\n		 (parentDiv.className == "im") ||	// inside quotes\n		 (parentDiv.className == "gmail_quote") ||	// quote\n		 (parentDiv.className == "msg")	// basic html mode\n		 ))	// right ads\n	{\n		// parse for any ads\n		var newHref = this.parseAdUrl(tag.href)\;\n		return newHref\;\n	}\n	\n	return false\;\n}\;\nsearchshield.GMailSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	var doc			= this.search.doc\;\n		\n	this.init_inline_ratings(doc)\;\n	this.show_inline_ratings(doc\, node\, image)\;\n}\;\nsearchshield.GMailSearchEngine.prototype.parseAdUrl = function(href)\n{\n	if (!href)\n		return href\;\n\n	// check for google ad\n	var regex = "^http(s)?\\:\\/\\/([a-zA-Z0-9]+)\\.googlesyndication\\.com.+\\&adurl\\=(.+)"\;\n	var re = new RegExp(regex)\;\n	var matches = href.match(re)\;\n	if (matches && (matches.length >= 4))\n	{\n		// else we want the fourth value\n		var match = matches[3]\;\n		if (match && (match.length > 0))\n			return match\n	}\n\n	return href\;\n}\;\n///////////////    GMAIL SEARCH ENGINE    ///////////////\n\n\n\n\n///////////////    FACEBOOK SEARCH ENGINE    ///////////////\nsearchshield.FacebookSearchEngine = function(search)\n{\n	searchshield.SearchEngine.call(this\, search)\;\n	this.showCleanVerdicts = false\;\n	this.type = 'inline'\n}\;\nsearchshield.FacebookSearchEngine.prototype = new searchshield.SearchEngine()\;\nsearchshield.FacebookSearchEngine.prototype.constructor = searchshield.FacebookSearchEngine\;\nsearchshield.FacebookSearchEngine.prototype.name = "facebook"\;	// the name by which the search engine is known (always lowercase)\nsearchshield.FacebookSearchEngine.prototype.validSearch = function(href)\n{\n	var uri\;\n	if (typeof(this.search) === 'undefined' || null === this.search)\n		uri = searchshield.parseLink(href)\;\n	else\n		uri = this.search.uri\;\n\n	if(!uri || !uri.host)\n		return false\;\n\n	if (uri.host.indexOf("www.facebook.com") != -1) \n		return true\;\n\n	return false\;\n}\;\nsearchshield.FacebookSearchEngine.prototype.includeLink = function(tag)\n{\n	if (searchshield.DoesURLContain(tag.href\, this.search.uri.host) ||\n		(searchshield.DoesURLContain(tag.href\, 'static.ak.fbcdn.net')))\n	{\n		return false\;\n	}\n		\n	// don't put verdicts in areas where typing is going on\n	if (tag.parentNode) \n	{\n		var parentDiv = searchshield.getParentNodeByTagName("DIV"\, tag\, "className")\;\n		if (parentDiv &&\n			(parentDiv.className == "Mentions_Input") ||\n			(parentDiv.className.indexOf('UIThumbPager_') != -1))\n		{\n			return false\;\n		}\n	}\n	\n	return tag.href\n}\;\nsearchshield.FacebookSearchEngine.prototype.addImage = function(node\, image\, hidden)\n{\n	var doc			= this.search.doc\;\n		\n	this.init_inline_ratings(doc)\;\n	this.show_inline_ratings(doc\, node\, image)\;\n}\;\n///////////////    FACEBOOK SEARCH ENGINE    ///////////////\n\n\n\n///////////////    AVG TOOLBAR REPORTING    ///////////////\nvar avgreport = {\n	BLOCK_SEVERITY: 3\,\n	scanResult: function (doc\, url\, foundUrl\, ip) {\n		// report scan end only if surf enabled\n		if ('1' != searchshield.avgCallFunc(doc\, 'GetSurfEnabled'))\n			return\;\n		\n		// for now native is handling the interstitial	\n		var results = searchshield.avgCallFunc(doc\, 'MalsiteCheck'\, url)\;\n		if ( results == null )\n			return\;\n		\n		var parts = results.split('::')\;\n		\n		// need at least severity\n		if (parts == null)\n			return\;\n\n		if (!ip)\n			ip = ""\;\n			\n		// use a block severity if foundUrl is given\n		var severity = !!foundUrl ? avgreport.BLOCK_SEVERITY : parseInt(parts[0]\, 10)\;\n		var category = ""\;\n		var threat	 = ""\;\n\n		// fill in the category and threat if something was found\n		if (severity > 0)\n		{\n			category = parts[2]\;\n			threat	 = parts[4]\;\n		}\n		\n		var scan_result = searchshield.avgCallFunc(doc\, 'ReportScanResult'\, url\, url\, threat\, category\, ip\, severity)\;\n		var scan_end = avgreport.scanEnd(doc\, url)\;\n		\n		return (scan_result && scan_end)\;\n	}\,\n	scanEnd: function (doc\, url) {\n		return searchshield.avgCallFunc(doc\, 'ReportScanEnd'\, url)\;\n	}\,\n	GetInterstitialIP: function (interstitial) {\n		// simple regex to pull the IP address\n		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)/\;\n		var match = regex.exec(interstitial)\;\n		if (!match)\n			return ''\;\n\n		return match[0]\;\n	}\n}\n///////////////    AVG TOOLBAR REPORTING    ///////////////\n\n\n///////////////    FLYOVERS    ///////////////\nvar avglsflyover = {\n	count: 0\,\n	poppedUp: false\,\n	poppedElement: null\,\n	orig_onmousemove: null\,\n	reset: function () {\n		avglsflyover.count = 0\;\n		avglsflyover.poppedUp = false\;\n		avglsflyover.poppedElement = null\;\n		avglsflyover.orig_onmousemove = null\;\n	}\,\n	popup: function (event\, hash\, search\, flyover) {\n		if (!event)\n			event = window.event\;\n\n		var div = document.getElementById("XPLSS_Flyover")\;\n		if (div == null)\n			return\;\n\n		// establish target element and get its containing document object\n		// in case verdict is inside a frame\n		var eventTarget = event.srcElement || event.currentTarget\;\n		var frameDoc = eventTarget.ownerDocument\;\n\n		// if the element is the clock\, don't pop over it\n		if ((eventTarget.src != null) && (eventTarget.src.indexOf("clock.gif") != -1))\n			return\;\n		\n		// save the element we popped over\n		avglsflyover.poppedElement = eventTarget\;\n\n		// if no flyover get it\n		if ((flyover == null) || (flyover == ""))\n		{\n			flyover = searchshield.avgCallFunc(frameDoc\, 'BuildFlyover'\, hash)\;\n\n			if (!flyover)\n				return\;\n\n			// cleanup flyover\, replace any new lines\n			flyover = flyover.replace(/\\r/g\, "")\;\n			flyover = flyover.replace(/\\n/g\, "")\;\n			// escape any single quotes\n			flyover = flyover.replace(/'/g\, "&#39\;")\;\n		}\n\n		// set the html in the layer\n		div.innerHTML = flyover\;\n\n		// there is an unwanted text node that causes vertical misalignment of flyover\n		if (div.firstChild.nodeType == 3)\n			div.removeChild(div.firstChild)\;\n		\n		avglsflyover.poppedUp = true\;\n\n		// reset display count\n		avglsflyover.count = 0\;\n\n		div.onmouseout = avglsflyover.hide\;\n\n		// if an onmousemove is already set and it isn't us\, save it and restore later\n		if ((frameDoc.onmousemove != null) && (frameDoc.onmousemove != avglsflyover.position))\n			avglsflyover.orig_onmousemove = frameDoc.onmousemove\;\n		frameDoc.onmousemove = avglsflyover.position\;\n	}\,\n	hide: function (event\, force) {\n		var div = document.getElementById("XPLSS_Flyover")\;\n		if ((div == null) || (div.style == null) || (div.style.visibility == "hidden"))\n			return\;\n\n		var trans_div = document.getElementById("XPLSS_Trans")\;\n		if ((trans_div == null) || (trans_div.style == null) || (trans_div.style.visibility == "hidden"))\n			return\;\n\n		if (!!force)\n			return setFlyoverStyle(div\, trans_div)\;\n\n		if (!event)\n			event = window.event\;\n		\n		// establish target element and get its containing document object\n		// in case verdict is inside a frame\n		var eventTarget = event.srcElement || event.currentTarget\;\n		var frameDoc = eventTarget.ownerDocument\;\n\n		// restore onmousemove\n		if (avglsflyover.orig_onmousemove != null)\n			frameDoc.onmousemove = avglsflyover.orig_onmousemove\;\n\n		if (avglsflyover.poppedElement)\n			avglsflyover.poppedElement.style.border = ""\;\n\n		var relatedElement = event.toElement\;\n		if (!relatedElement)\n		{	//this happens on mouseout when verdict and flyover are on different frames/docs\n			window.top.document.detachEvent('onmouseout'\, avglsflyover.hide)\;\n			window.top.document.attachEvent('onmouseout'\, avglsflyover.hide)\;\n			return\;\n		}\n\n		// make sure we aren't still over the popped image or our layer\n		if (searchshield.containedIn(avglsflyover.poppedElement\, relatedElement) ||\n			searchshield.containedIn(div\, relatedElement) ||\n			searchshield.containedIn(trans_div\, relatedElement))\n		{\n			return\;\n		}\n\n		setFlyoverStyle()\;\n\n		// hide and move somewhere off screen (negative offsets)\n		function setFlyoverStyle()\n		{\n			div.style.visibility = "hidden"\;\n			div.style.left = "-2100px"\;\n			div.style.top  = "-2100px"\;\n			trans_div.style.visibility = "hidden"\;\n			trans_div.style.left = "-2100px"\;\n			trans_div.style.top  = "-2100px"\;\n\n			return true\;\n		}\n	}\,\n	position: function () {\n		if (!avglsflyover.poppedUp || (avglsflyover.poppedElement == null))\n			return\;\n\n		var flyover = document.getElementById("XPLSS_Flyover")\;\n		if (flyover == null)\n			return\;\n\n\n		// relative position of flyover in relation to icon\n		var locateX = 0\;  // 0=left\, 1=right\n		var locateY = 0\;  // 0=above\, 1=below\, 2=beside icon\n	\n		// get window sizes\n		var winSize		= searchshield.viewPortSize()\;\n		var windowX		= winSize[0]\;\n		var windowY		= winSize[1]\;\n\n		// get the exact size of the flyover\n		var flyoverSize	 = searchshield.elementSize(flyover)\;\n		var flyoverX	 = flyoverSize[0]\;\n		var flyoverY	 = flyoverSize[1]\;\n\n		var verdictWidth = 0\;\n		if (avglsflyover.poppedElement && avglsflyover.poppedElement.width)\n			verdictWidth = avglsflyover.poppedElement.width\;\n		\n		// get the bounding rect for image(s)\n		var imgRect = searchshield.GetFullBoundingRect(avglsflyover.poppedElement)\;\n\n		// half width/height of element bounding rect\n		var halfX = (imgRect.right - imgRect.left) / 2\;\n		var halfY = (imgRect.bottom- imgRect.top) / 2\;\n\n		// element the mouse is over\, get the center position\n		var posX = searchshield.offsetLeft(avglsflyover.poppedElement) + halfX\;\n		var posY = searchshield.offsetTop(avglsflyover.poppedElement) + halfY\;\n\n		// if a verdict is inside a frame must get offsets for the frame element\n		var docFrames = document.frames\;\n		if (docFrames)\n		{\n			for (var i=0\; i < docFrames.length\; i++)\n			{\n				try {\n					var frameElem = docFrames[i].frameElement\;\n					if (frameElem.contentWindow.document.getElementById(avglsflyover.poppedElement.id))\n					{\n						posX += searchshield.offsetLeft(frameElem)\;\n						posY += searchshield.offsetTop(frameElem)\;\n						break\;\n					}\n				}\n				catch(frmErr){}\n			}\n		}\n\n		var transXOffset = 0\;\n		if (imgRect.mid == undefined)\n			transXOffset = -1 * halfX\;\n		else\n			transXOffset = ((imgRect.right + imgRect.left) / 2) - imgRect.mid\;\n		\n		// normalize pos to 0  -- get amount of scrolling in browser window\n		var scroll		 = searchshield.scrollSize()\;\n		var pageOffsetX	 = scroll[0]\;\n		var pageOffsetY	 = scroll[1]\;\n\n		posX -= pageOffsetX\;\n		posY -= pageOffsetY\;\n\n		// setup the offsets\n		var offsetX = posX\;\n		var offsetY = posY\;\n\n		// calc where to display on page\n		if ((windowX - posX) > posX)\n		{\n			// right\n			offsetX += halfX\;\n			locateX = 1\;\n		}\n		else\n		{\n			//left\n			offsetX -= (flyoverX + halfX)\;\n		}\n		if ((windowY - posY) > posY)\n		{\n			// below\n			if (posY < (windowY/4))\n			{\n				offsetY -= halfY\;\n				locateY = 1\;\n			}\n			else\n			{\n				offsetY -= (flyoverY / 2)\;\n				locateY = 2\;\n			}\n		}\n		else\n		{\n			// above\n			if ((windowY - posY) < (windowY/4))\n			{\n				offsetY -= (flyoverY - halfY)\;\n			}\n			else\n			{\n				offsetY -= (flyoverY / 2)\;\n				locateY = 2\;\n			}\n		}\n		// make sure we aren't off the screen\n		if (offsetY < 0)\n			offsetY = 0\;\n\n		if ((offsetY + flyoverY) > windowY)\n			offsetY = windowY - flyoverY\;\n\n		// add page offsets back\n		offsetX += pageOffsetX\;\n		offsetY += pageOffsetY\;\n		posX += pageOffsetX\;\n		posY += pageOffsetY\;\n\n		var paddedOffsetX = 0\; //provide space between icon and flyover\n		var padX = 3\;\n		if (locateX == 0)\n			paddedOffsetX = offsetX - padX\;\n		else\n			paddedOffsetX = offsetX + padX\;\n\n\n		// set where to put the flyover\n		flyover.style.top = offsetY + "px"\;\n		flyover.style.left = paddedOffsetX + "px"\;\n\n\n		// set where to put the transparent layer\n		var trans = document.getElementById("XPLSS_Trans")\;\n		if (trans != null)\n		{\n			var trans_left = 0\;\n			var trans_top  = 0\;\n			var trans_width= 0\;\n			var trans_height = 0\;\n\n			// transparent layer should overlap verdict image\n			if (locateX == 0)\n				trans_left = posX - flyoverX - halfX\;  // left \n			else\n				trans_left = posX - transXOffset - verdictWidth\; // right\n\n			trans.style.left	= trans_left + "px"\;\n			trans.style.top		= offsetY + "px"\;\n\n			trans.style.width	= flyoverX + "px"\;\n			trans.style.height	= flyoverY + "px"\;\n		}\n\n		avglsflyover.display()\;\n	}\,\n	display: function () {\n		avglsflyover.count++\;\n		if (avglsflyover.count == 1)\n		{\n			var flyover = document.getElementById("XPLSS_Flyover")\;\n			if (flyover == null)\n				return\;\n\n			// show the flyover\, must use a little count to tell\, crazy stuff\n			flyover.style.visibility = "visible"\;\n\n			// show the transparent layer\n			var trans_div = document.getElementById("XPLSS_Trans")\;\n			if (trans_div == null)\n				return\;\n\n			trans_div.style.visibility = "visible"\;\n\n			avglsflyover.poppedUp = false\;\n		}\n	}\,\n	show: function () {\n		var div = document.getElementById("XPLSS_Flyover")\;\n		if (div == null)\n			return\;\n\n		div.style.visibility = "visible"\;\n\n		var trans_div = document.getElementById("XPLSS_Trans")\;\n		if (trans_div == null)\n			return\;\n		trans_div.style.visible = "visible"\;\n	}\n}\;\n\nvar avglsinlineflyover = {\n	build: function (riskCategory\, riskName\, bgColor\, borderColor) {\n		var html = ''\;\n		html += "<div style=background-color:" + bgColor\;\n		html += "border-color:" + borderColor + "\;"\;\n		html += "border-style:solid\;"\;\n		html += "border-width:3px\;"\;\n		html += "padding:3px\;"\;\n		html += "padding-left:8px\;"\;\n		html += "padding-right:8px\;"\;\n		html += "-moz-border-radius:5px\;>"\;\n		html += "<img src=linkscanner://LS_Logo_Results.gif /><br />"\;\n		html += riskCategory + "<br />"\;\n		html += riskName + "<br /></div>"\;\n\n		return html\;\n	}\,\n	popup: function (event\, flyover\, blUrl) {\n		//set verdict info\n		var div = document.getElementById('XPLSS_InlineFlyover')\;\n		if (div == null)\n			return\;\n		\n		// blUrl is an object for a blacklisted short url\n		// when it is passed get the final url \n		if (blUrl != undefined)\n		{\n			var finalUrl = searchshield.avgCallFunc(document\, 'GetFinalUrl'\, blUrl.sUrl)\;\n			var uri = searchshield.parseLink(unescape(finalUrl))\;\n			if (uri.source != null)\n			{	// regexp failed so used split to parse url\n				var qsUrl = uri.source.indexOf("?url=")\;\n				if (qsUrl != -1)\n					riskName = blUrl.riskNameLabel + uri.source.substring(qsUrl + 5)\;\n				else\n					riskName = blUrl.riskNameLabel + uri.source\;\n			}\n			else if ((uri.qsArray.url != null) && (uri.qsArray.url.length > 0))\n			{\n				riskName = blUrl.riskNameLabel + uri.qsArray.url\;\n			}\n			else\n				riskName = blUrl.riskNameLabel + blUrl.sUrl\n\n			flyover = avglsinlineflyover.build(blUrl.riskCategory\, riskName\, blUrl.bgColor\, blUrl.borderColor)\;\n		}\n\n		div.innerHTML = flyover\;\n		div.style.width = "auto"\;  //reset width\n		div.style.position = "absolute"\;\n\n		if (!event)\n			event = window.event\;\n			\n		var eventTarget = event.srcElement\;\n		avglsinlineflyover.position(eventTarget)\;\n	}\,\n	hide: function (event) {\n		if (!event)\n			event = window.event\;\n			\n		var div = document.getElementById("XPLSS_InlineFlyover")\;\n		if (div == null)\n			return\;\n			\n		div.visibility = "hidden"\;	//invisible\n		div.style.left = "-5000px"\;\n	}\,\n	position: function (imageElem) {\n		var flyover = document.getElementById('XPLSS_InlineFlyover')\;\n		if (flyover == null)\n			return\;\n			\n		// relative position of flyover in relation to icon\n		var locateX = 0\;  // 0=left\, 1=right\n		var locateY = 0\;  // 0=above\, 1=below\, 2=beside icon\n		\n		\n		\n		// get window sizes\n		var winSize	 = searchshield.viewPortSize()\;\n		var windowX	 = winSize[0]\;\n		var windowY	 = winSize[1]\;\n\n		// Must know if there is a horizontal scroll bar for Firefox\n		// for proper flyover positioning near bottom edge\n		var scrollYWidth	 = winSize[2]\;\n		var scrollBarX	 = winSize[2] > 0 ? true : false\;\n\n		// get the exact size of the flyover\n		var flyoverSize	 = searchshield.elementSize(flyover)\;\n		var flyoverX	 = flyoverSize[0]\;\n		var flyoverY	 = flyoverSize[1]\;\n		\n		flyover.style.width = flyoverX + "px"\;\n		\n		// get the bounding rect for image(s)\n		var imgRect = imageElem.getBoundingClientRect()\;\n\n		// half width/height (center) of element bounding rect\n		var halfX = (imgRect.right - imgRect.left) / 2\;\n		var halfY = (imgRect.bottom- imgRect.top) / 2\;\n\n		// element the mouse is over\, get the center position\n		var posX = searchshield.offsetLeft(imageElem) + halfX\;\n		var posY = searchshield.offsetTop(imageElem) + halfY\;\n		\n		var pageOffsetX = 0\;\n		var pageOffsetY = 0\;\n\n		// normalize pos to 0  -- get amount of scrolling in browser window\n		var scroll		 = searchshield.scrollSize(imageElem)\;\n		var pageOffsetX	 = scroll[0]\;\n		var pageOffsetY	 = scroll[1]\;\n		var hasParentFrame = scroll[2]\;\n		\n		posX -= pageOffsetX\;\n		posY -= pageOffsetY\;\n\n		//compensate for Firefox 3\n		if (posX < imgRect.left)\n			posX = imgRect.left+halfX\;\n\n		// setup the offsets\n		var offsetX = posX\;\n		var offsetY = posY\;\n\n		// calc where to display on page\n		if ((windowX - posX) > posX)\n		{\n			// right\n			offsetX += halfX\;\n			locateX = 1\;\n		}\n		else\n		{\n			//left\n			offsetX -= (flyoverX + halfX)\;\n		}\n		if ((windowY - posY) > posY)\n		{\n			// below\n			if (posY < (windowY/4))\n			{\n				offsetY -= halfY\;\n				locateY = 1\;\n			}\n			else\n			{\n				offsetY -= (flyoverY / 2) - halfY\;\n				locateY = 2\;\n			}\n		}\n		else\n		{\n			// above\n			if ((windowY - posY) < (windowY/4))\n			{\n				offsetY -= (flyoverY - halfY)\;\n			}\n			else\n			{\n				offsetY -= (flyoverY / 2) + halfY\;\n				locateY = 2\;\n			}\n		}\n		// make sure we aren't off the screen\n		if (offsetY < 0)\n			offsetY = 0\;\n\n		if ((offsetY + flyoverY) > windowY)\n		{\n			offsetY = windowY - flyoverY\;\n		}\n		else if (scrollBarX && ((windowY - (posY + halfY)) < scrollYWidth))\n		{	//verdict overlaps the horizontal scrollbar\n			offsetY = windowY - (flyoverY + scrollYWidth)\;\n		}\n\n		// add page offsets back - if not in frame\n		if (!hasParentFrame)\n		{\n			offsetX += pageOffsetX\;\n			offsetY += pageOffsetY\;\n		}\n		posX += pageOffsetX\;\n		posY += pageOffsetY\;\n\n		var paddedOffsetX = 0\; //provide space between icon and flyover\n		var padX = 3\;\n		if (locateX == 0)\n			paddedOffsetX = offsetX - padX\;\n		else\n			paddedOffsetX = offsetX + padX\;\n\n\n		// set where to put the flyover\n		flyover.style.top = offsetY + "px"\;\n		flyover.style.left = paddedOffsetX + "px"\;\n\n		avglsinlineflyover.display()\;\n	}\,\n	display: function () {\n		var div = document.getElementById('XPLSS_InlineFlyover')\;\n		if (div == null)\n			return\;\n		\n		// show the flyover\n		div.style.visibility = "visible"\;\n	}\,\n	imageExists: function(element) {\n		if (element)\n		{\n			// check next siblings children\n			var sibling = element.nextSibling\;\n			\n			if ((sibling == null) || (sibling.getElementsByTagName == null))\n				return false\;\n			\n			var images = sibling.getElementsByTagName("IMG")\;\n			if (images == null)\n				return false\;\n\n			for (var i = 0\; i < images.length\; i++)\n			{\n				if (images[i].id == "avg_ls_image")\n					return true\;\n			}\n		}\n\n		return false\;\n	}\,\n	getImage: function (anchor) {\n		if (anchor)\n		{\n			var imageElem = null\;\n			var images = anchor.getElementsByTagName("img")\;\n			if (images == null)\n				return imageElem\;\n\n			for (var i = 0\; i < images.length\; i++)\n			{\n				if (images[i].id == "avg_ls_image")\n				{\n					imageElem = images[i]\;\n					break\;  \n				}				\n			}\n			return imageElem\;\n		}  \n	}\,\n	mouseOverHandler: function (e\, doc\, engine) {\n		if (e && e.srcElement && e.srcElement.href)\n		{\n			// need to keep a reference to the function registered \n			// by the listener to be able to remove it.\n			var handlerFunc = arguments.callee\;\n			var element = e.srcElement\;\n			var href = e.srcElement.href\;\n\n			// need an engine			\n			if (!engine)\n				return\;\n\n			// check if it has an image already\n			if (avglsinlineflyover.imageExists(element))\n				return\;\n\n			// add the image\, returns the anchor not the image\n			var new_element = engine.add_inline_image(doc\, element\, null\, null)\;\n\n			// do the check and update in the background\n			setTimeout(function() {avglsinlineflyover.checkAndUpdate(doc\, element\, new_element\, engine\, handlerFunc)}\, 1)\;\n		}\n	}\,\n	checkAndUpdate: function (doc\, element\, new_element\, engine\, handlerFunc) {\n		if (!engine)\n			return\;\n\n		try {\n			// remove the listener and get final url\n			element.detachEvent("onmouseover"\, handlerFunc\, false)\;\n			var finalUrl = searchshield.avgCallFunc(doc\, 'GetFinalUrl'\, element.href)\;\n		}\n		catch(e) {}\n\n		if (finalUrl)\n		{\n			// update the verdict\n			engine.display_inline(doc\, new_element\, finalUrl\, null\, true)\;\n		}\n	}\n}\;\n///////////////    FLYOVERS    ///////////////	</script>\n	</span></p>\n
LOCATION:Vineyard Steakhouse 1000 Texan Trial Grapevine\, TX
UID:e.770.162356
SEQUENCE:3
DTSTAMP:20260517T212343Z
URL:https://business.grapevinechamber.org/events/details/tamber-bey-vineyards-texas-vintner-dinner-10-29-2011-162356
END:VEVENT

END:VCALENDAR
