widgetConfig={
	prScriptUrl:"http://www.rankjit.com/widget/pgr_checker.php"		
}				 

function Timer() {
	this.timer = null;
}
Timer.prototype.later = function(callback, delay, self) {
	var params = Array.prototype.slice.apply(arguments, [3]);
		
	function notify() {
		callback.apply(self,params);
	}		
	if (window.restrictedSetTimeout) {
		this.timer=window.restrictedSetTimeout(notify, delay)
	} else {
		this.timer=window.setTimeout(notify, delay)
	}			
	return this;
}

Timer.prototype.cancel = function() {
	if(this.timer!=null){
		clearTimeout(this.timer);		
	}
}
function TimerFactory(){
}

TimerFactory.prototype.createInstance=function(){
	return new Timer();
}


function PageRank_Checker() {
	
}

PageRank_Checker.prototype.check = function(id, url, callback) {
	var src=widgetConfig.prScriptUrl;
	src+="?id="+id;
	src+="&url="+encodeURIComponent(url);
	src+="&callback="+callback;
	src+="&owner="+encodeURIComponent(document.location.href);	
	
	var body = document.getElementsByTagName("body")[0];
	var script= document.createElement("script");
	script.src = src;
	script.type="text/javascript";
	script.language="javascript";
	body.insertBefore(script,body.lastChild);
				
	
	
	//document.write('<script type="text/javascript" language="javascript" src="'+src+'"></script>');	
}
var pageRankChecker= new PageRank_Checker();
var timerFactory =new TimerFactory();
config={
	checker:pageRankChecker,
	timer:timerFactory,
	isWebWidget:true,
	show_internal :rankjit_int,
	show_pin:rankjit_pin,
	show_external:rankjit_ext
}







if (typeof Rank_JIT == "undefined") {
	Rank_JIT = {};
}
Rank_JIT.config = {

	version : config.version ? config.version : "1.0",

	key : config.key ? config.key : "AAAAAAAAAAAAAAAAAAAAAAAAA",

	base_url : "http://www.rankjit.com/widget/",

	rank_checker : config.checker ? config.checker : null,

	timer : config.timer ? config.timer : null,

	logging_image : "t.php?",

	main_id : "rank_jit_com_main",

	partial_check : {
		delay : 2000,
		attempts : 5
	},

	img : {
		point : "images/pointer.gif",
		loader : "images/loader.gif",
		pin : "images/pin.gif",
		unpin : "images/unpin.gif"

	},

	delay : {
		show : 125,
		show_sli : 125,
		hide : 500,
		move : 200,
		prefetch : 50
	},

	show_internal : config.show_internal!=0 ? true : false,
	
	show_external : config.show_external!=0 ? true : false,
	
	show_pin: config.show_pin !=0 ? true : false,
	
	show_link_icon : false,

	preview_trigger : "link",
	
	isWebWidget :config.isWebWidget 
}

Rank_JIT.rank_jit_object = function() {

	var A = {};
	A = {
		other_widgets : new Array,

		page_rank : null,

		timer_id : null,

		body_loaded : false,

		div : null,

		widgets : null,

		widgetId : 0,

		current_element : null,

		current_activated_id : null,

		pin_state : null,

		thumbnail_precrawl_list : new Array,

		is_internal_link : function(D) {
			var B, C;
			if (D.href.match(this.is_internal_re)) {
				return true;
			} else {
				return false
			}
		},
		el_prop : function(element, key, value) {
			if (value !== undefined) {
				element.setAttribute(key, value);
			}
			try {
				return element.getAttribute(key);
			} catch (e) {
				return null;
			}
		},
		init : function() {

			this.widgetId = 0;

			this.page_rank = Rank_JIT.page_rank;

			this.page_rank.init(this);

			this.div = {};

			this.widgets = {};

			this.pin_state = "pin";

			this.timer_id = {
				show : null,
				partial : null,
				prefetch : null,
				tok : null
			};

			if (Rank_JIT.window_loaded) {
				this.onload();
				return
			};

			this.observe(window, "load", this.onload);

			this.cfg = Rank_JIT.config;

			B = document.location.href
					.match(/^(http|file)s?:\/\/(www\.)?(.*?)\//);

			this.is_internal_re = new RegExp("^(http|file)s?://(www.)?" + B[3]
					+ "/")

		},

		isFirefox : (navigator.userAgent.match(/firefox/i)),
		
		mousemove : function(ev) {
			this.current_ex = this.getPageX(ev);
			this.current_ey = this.getPageY(ev);
		},

		move : function(widget, x, y) {
			// var div=this.get_active_div(_90);
			// var cfg=this.get_active_cfg(_90);
			
			
			var left=x;
			var top=y;
			if(!this.isFirefox){
				left = x
						+ document.documentElement.scrollLeft;
				
				top = y
						+  document.documentElement.scrollTop;
			}
			//	alert(" document.documentElement.scrollTop="+document.body.scrollTop || document.documentElement.scrollTop)		
			
			
			widget.style.left = left + "px";
			widget.style.top = top + "px";
		},
		
		
		

		/*
		 * isFirefox : (navigator.userAgent.match(/firefox/i)), isSafari :
		 * (/Safari|Konqueror|KHTML/gi).test(navigator.userAgent), isIE :
		 * (!this.isSafari && !navigator.userAgent.match(/opera/gi) &&
		 * navigator.userAgent .match(/msie/gi)), isOpera :
		 * (navigator.userAgent.match(/Opera/gi)), isWin :
		 * (navigator.appVersion.match(/win/gi)),
		 */
		isIE : false,

		getPageX : function(C) {
			var B = C.pageX;
			if (!B && 0 !== B) {
				B = C.clientX || 0;
				if (this.isIE) {
					B += this._getScrollLeft();
					if (document.body.clientLeft) {
						B -= document.body.clientLeft
					}
				}
			}
			return B
		},
		getPageY : function(B) {
			var C = B.pageY;
			if (C && document.body.style
					&& this.getStyle(document.body, "position") == "relative") {
				C -= 10
			}
			if (!C && 0 !== C) {
				C = B.clientY || 0;
				if (this.isIE) {
					C += this._getScrollTop();
					if (document.body.clientTop) {
						C -= document.body.clientTop
					}
				}
			}
			return C
		},

		_getScrollLeft : function() {
			return this._getScroll()[1]
		},
		_getScrollTop : function() {
			return this._getScroll()[0]
		},
		_getScroll : function() {
			var B = document.documentElement, C = document.body;
			if (B && (B.scrollTop || B.scrollLeft)) {
				return [B.scrollTop, B.scrollLeft]
			} else {
				if (C) {
					return [C.scrollTop, C.scrollLeft]
				} else {
					return [0, 0]
				}
			}
		},
		getStyle : function(el, _1bf) {
			return el.style[_1bf];
		},

		add_link_icon : function(element) {
			if (this.div.link_icon) {
				var B = this.div.link_icon.cloneNode(false);
				B.style.verticalAlign = "top";
				B.style.display = "inline";
				B.style.visibility = "visible";
				B.style.zIndex = element.style.zIndex;
				this.el_prop(B, "activated", true);
				this.el_prop(B, "is_link_icon", true);
				this.el_prop(B, "shot_parent", element);
				this.el_prop(element, "link_icon", B);
				if (this.el_prop(element, "markup")
						&& (element.style.visibility == "hidden" || element.style.display == "none")) {
					element.parentNode.insertBefore(B, element.nextSibling)
				} else {
					element.appendChild(B)
				}
				return B
			}
		},
		get_element_data : function(element) {
			var data = {
				tag : "",
				url : "",
				target : "",
				element : element,
				trigger : ""
			};
			data.element = element;
			data.url = element.href;
			data.target = element.target;
			return data;
		},

		activate : function(element) {
			var childNodes, activatedElement, F;
			if (this.el_prop(element, "done")) {
				return
			}
			childNodes = element.childNodes;
			var showIcon = false;
			for (var i = 0; i < childNodes.length; i++) {
				var item = childNodes[i];
				if (item.nodeType == 3) {
					var nodeValue = item.nodeValue;
					nodeValue = nodeValue.replace(/[ \t\r\n]/g, "");
					if (nodeValue.length == 0) {
						showIcon = true
					}
				} else {
					if (item.tagName == "IMG") {
						showIcon = true
					}
				}
			}
			if (element.tagName.match(/^AREA$/i) || showIcon) {
				this.el_prop(element, "trigger", "link")
			}
			switch (this.el_prop(element, "trigger")) {
				case "both" :
					activatedElement = element;
					this.add_link_icon(element);
					break;
				case "icon" :
					activatedElement = this.add_link_icon(element);
					break;
				default :
					activatedElement = element;
					break
			}
			this.widgetId += 1;
			this.el_prop(activatedElement, "activated", true);
			this.el_prop(activatedElement, "url", element.href);

			this.observe(activatedElement, "mouseover", this.show_delay,
					this.cfg.delay.show, this.cfg.delay.move, this.widgetId);
			this.observe(activatedElement, "mouseout", this.hide_delay,
					this.cfg.delay.hide);
			this.observe(activatedElement, "click", this.hide_delay, 0)

			// this.current_activated_id=this.widgetId;

			this.el_prop(element, "done", true)
		},

		add_main_div : function() {
			var htmlElement = document.getElementsByTagName("html")[0];
			htmlElement.style.position = "static";
			this.div.main = document.createElement("div");

			var mainTableBorder="";
			var rankJitPinImg="<div>&nbsp</div>";
			var pinLeftAndTopBorder="";
			var resultRightBordr='border-right:1px solid #E0E0E0;';
			var pinBackgroundColor="transparent"
			
			if(this.cfg.show_pin){
				mainTableBorder="border-right: 1px solid #E0E0E0;";	
				rankJitPinImg='<img id="rank_jit_pin"  style="padding:0px;margin:0px;border: 0px none;display:inline;cursor:pointer;cursor:hand;width:16px;height:16px;vertical-align:bottom;visibility:inherit;background-color:transparent;" src="'
					+ this.cfg.base_url
					+ this.cfg.img.pin
					+ '" />';
					
				pinLeftAndTopBorder='border-left:1px solid #E0E0E0;border-top:1px solid #E0E0E0;';
				resultRightBordr="border-right:0px;";
				pinBackgroundColor="white";						
			}
			
			
			this.div.main.innerHTML += ''
					+ '<div style="visibility:inherit;">'
					+ '<table cellspacing="0" cellpadding="0" style="padding:0px;margin:0;border-left:0px;border-top:0px;border-bottom: 1px solid #E0E0E0;width:70px;height:36px;background-color:transparent;font-family:Lucida Grande,sans-serif; font-size:9px;z-index:200000;border-collapse:separate;visibility:inherit;'+mainTableBorder+'">'
					+ '<tr style="background-color:transparent">'
					+ '<td style="padding:0px;margin:0px;border-left:0px;border-top:0px;border-right:0px;border-bottom:1px solid #E0E0E0;height:16px;background-color:transparent;text-align:center;vertical-align:middle;visibility:inherit;"><div style="line-height:1px;border: 0pt none ; margin: 0pt; padding: 0pt;background-color:transparent">&nbsp</div></td>'
				
					+ '<td align="center" style="padding:0px;margin:0px;border-right:0px;border-bottom:1px solid #E0E0E0;width:20px;height:16px;text-align:center;vertical-align:middle;background-color:'+pinBackgroundColor+';visibility:inherit;'+pinLeftAndTopBorder+'" colspan="2">'
					
					+rankJitPinImg
					
					+ '</td>'
					+ '</tr>'
					+ '<tr style="padding:0px;margin:0px;border-left:0px;border-top: 1px solid #E0E0E0;border-right:0px;border-bottom:0px; background-color:white;visibility:inherit;">'
					+ '<td style="padding:0px;margin:0px;border-left:1px solid #E0E0E0;border-top:0px;border-right:0px;border-bottom:0px;font-family:Lucida Grande,sans-serif;color:#000000;font-size:9px;font-weight:normal;text-align:center;vertical-align:middle;height:10px;widht:50px; background-color:white;visibility:inherit;" align="center" >Page rank</td>'
					+ '<td	align="center"  style="padding:0px;margin:0px; border-left:1px solid #E0E0E0; border-top:0px;border-bottom:0px;font-family:Lucida Grande,sans-serif;text-align:center;vertical-align:middle;background-color:white;border-spacing: 1px;font-size:14px;width:20px;height:20px;color:white;visibility:inherit;'+resultRightBordr+'" valign="middle"  rowspan="2">'
					+ '<div	style="padding:0px;margin-bottom:1px;margin-left:1px;margin-right:1px;margin-top:1px;border:0px none;width:20px;height:20px;background-color:#848484;visibility: inherit;">'
					+ '<div id="rank_jit_resultContainer" style="padding:0px;margin:0px;border:0px none;background-color:transparent;width:20px;height:20px;line-height:20px;vertical-align:middle;color:white;visibility: inherit;text-align:center;">5</div>'
					+ '</div>'
					+ '</td>'
					+ '</tr>'
					+ '<tr>'
					+ '<td style="vertical-align:middle !important;padding:0px;margin:0px;border-left:1px solid #E0E0E0;border-top:0px;border-right:0px;border-bottom:0px;height:10px;widht:50px;vertical-align:middle;background-color:white;text-align:none;visibility: inherit;" align="center">'
					+ '<div style="font-size:1px;line-height:0px;padding:0px;margin-bottom:1px;margin-top:0px;margin-right:0px;margin-left:1px;border: 1px solid #E0E0E0;width:38px;height:4px;visibility: inherit;">'
					+ '<div id="rank_jit_gradientContainer" style="font-size:1px;line-height:0px;margin:0px;padding:0px;border: 0px none;width:19px;height:4px;float:left;background-color:#009933;visibility: inherit;">'
					+ '</div>' + '</div>' + '</td>' + '</tr>'
					+ '</table></div>';

			var pointerTop="";		
			if(this.isFirefox){	
				if(this.cfg.show_pin){
					pointerTop="39.5px";
				
				}else{
					pointerTop="38px";
				}
			}else{
				if(this.cfg.show_pin){
					pointerTop="41px";
				}else{
					pointerTop="40px";
				}
			}
			
			this.div.main.innerHTML += '<div style="border: 0pt none ; margin: 0pt; padding: 0pt; overflow: hidden; z-index: 9999;  font-style: normal; font-weight: normal; font-family: trebuchet ms,arial,helvetica,sans-serif; float: none; position: absolute; left: auto; top:'+pointerTop+'; line-height: normal;  background-color: transparent; visibility: inherit; width: 10px; height: 10px; right: 50px"><img style=" border: 0pt none ; margin: 0pt; padding: 0pt;  font-style: normal; font-weight: normal; font-family: trebuchet ms,arial,helvetica,sans-serif; float: none; position: absolute; left: 0px; top: 0px; line-height: normal;  background-color: transparent; visibility: inherit; z-index: 99999;" src="_POINT_IMAGE_SRC_"></div>'
					.replace(/_POINT_IMAGE_SRC_/g, this.cfg.base_url
							+ this.cfg.img.point);

			this.div.main.id = this.cfg.main_id;
			this.div.main.style.border = "0px none";
			this.div.main.style.margin = "0px";
			this.div.main.style.padding = "0px";
			this.div.main.style.position = "absolute";
			this.div.main.style.top = "126px";
			// this.div.main.style.fontStyle = "normal; font-weight: normal;
			// font-family: trebuchet ms,arial,helvetica,sans-serif";

			this.div.main.style.float = "none";
			this.div.main.style.left = "519px";
			this.div.main.style.lineHeight = "normal";
			this.div.main.style.backgroundColor = "transparent";
			this.div.main.style.zIndex = "99999";
			this.div.main.style.width = "70px";
			this.div.main.style.height = "46px";
			this.div.main.style.visibility = "hidden";
			this.get_all_rank_jit_nodes(this.div.main, this.div);

			if(this.cfg.show_pin){
				this.observe(this.div.pin, "click", this.pin);
			}

			var body = document.getElementsByTagName("body")[0];

			body.insertBefore(this.div.main, body.firstChild);

			this.observe(this.div.main, "mouseover", this.show_delay,
					this.cfg.delay.show, this.cfg.delay.move);
			this.observe(this.div.main, "mouseout", this.hide_delay,
					this.cfg.delay.hide);
			this.observe(document, "mousemove", this.mousemove);

		},

		pin : function() {
			var index = this.clone_widget();

			this.other_widgets[index].pin.src = this.cfg.base_url
					+ this.cfg.img.unpin;

			this.unobserve(this.other_widgets[index].pin, "click", this.pin);
			this.observe(this.other_widgets[index].pin, "click", this.unpin,
					index);
			this.hide();			
		},

		unpin : function(event, index) {
			this.destroy_widget(index);
		},

		destroy_widget : function(index) {
			if (this.other_widgets[index]) {
				this.other_widgets[index].current_url = null;
				this.other_widgets[index].current_tag = null;
				this.other_widgets[index].main.style.display = "none";
				this.other_widgets[index].main.parentNode
						.removeChild(this.other_widgets[index].main)
			}
		},

		clone_widget : function() {

			var new_main = this.div.main.cloneNode(true);

			var body = document.getElementsByTagName("body")[0];
			body.insertBefore(new_main, this.div.main);

			this.div["resultContainer"].id = "resultContainer";
			this.div["gradientContainer"].id = "gradientContainer";

			this.div.main.style.visibility = "hidden";

			var index = this.other_widgets.length;

			this.other_widgets[index] = new Object();
			this.other_widgets[index].main = new_main;
			this.get_all_rank_jit_nodes(this.other_widgets[index].main,
					this.other_widgets[index]);

			this.other_widgets[index].current_url = this.current_url;
			this.other_widgets[index].current_tag = this.current_tag;
			this.other_widgets[index].current_element = this.current_element;

			return index;
		},

		show1 : function(e) {
			this.clear_timer("show");
		},
		later : function(D, E) {

			var C = this;
			var B = Array.prototype.slice.apply(arguments, [2]);
			return this.sto(function() {
				E.apply(C, B)
			}, D)
		},

		get_activated_element : function(D) {
			var C, B;
			if (D.srcElement) {
				B = D.srcElement
			} else {
				if (D.target) {
					B = D.target
				}
			}
			for (var C = 0; (C < 5) && B; C++) {
				if (this.el_prop(B, "activated")) {
					return B
				}
				try {
					B = B.parentNode
				} catch (E) {
				}
			}
			return B;
		},
		show : function(argsOrElement,id) {

			if(this.cfg.isWebWidget){
				element=argsOrElement;
			}else{
				element = argsOrElement[0];
				id = argsOrElement[1];
			}
						
			var data = this.get_element_data(element);

			if (this.other_widgets) {
				for (var i = 0; i < this.other_widgets.length; i++) {
					if (data.url == this.other_widgets[i].current_url) {
						return
					}
				}
			}
			this.div.id = id;

			this.div["resultContainer"].innerHTML = '<img style="border :0px none; padding:0px;margin-bottom:0px;margin-right:0px;margin-left:0px;margin-top:2px;line-height:20px;width:16px;height:16px;display:inline;background-color:transparent;" src="'
					+ this.cfg.base_url + this.cfg.img.loader + '">';

			this.current_element = this.div;

			this.div["gradientContainer"].style.width = "0px";

			this.div.main.style.visibility = "visible";
			ex = this.current_ex - 10;
			ey = this.current_ey - 50;
			this.move(this.div.main, ex, ey);
			this.current_url = data.url;
			this.div["resultContainer"].id = "resultContainer" + id;
			this.div["gradientContainer"].id = "gradientContainer" + id;
			this.page_rank.check(id, data.url);
		},
		activated_id:null,
	
		show_delay : function(e, show_delay, move_delay, id) {
			this.clear_timer("show");
			
			
			if(id==undefined&&this.div.main.style.visibility != "visible"){
				return;
			}

			if (!(id != undefined && this.activated_id != id)
					&& this.div.main.style.visibility == "visible") {					
				return;
			} else {
				// this.show(this.get_activated_element(e),id);
				this.timer_id.show = this.cfg.timer.createInstance();				
				this.timer_id.show = this.timer_id.show.later(this.show, 300,
						this, this.get_activated_element(e), id);

				/*
				 * this.timer_id.show = this.later(300, this.show, this
				 * .get_activated_element(e), id);
				 */

				this.activated_id = id;
			}

		},
		sto : function(C, B) {
			if (window.restrictedSetTimeout) {
				return window.restrictedSetTimeout(C, B);
			} else {
				return window.setTimeout(C, B);
			}
		},
		hide_delay : function(ev, delay) {
			/*
			 * if ((ev !== null && !this.get_activated_element(ev))) { return; }
			 */

			// window.alert("hide_delay0000");
			this.clear_timer("show");

			// window.alert("hide_delay");
			// window.alert("this.cfg.timer.createInstance="+this.cfg.timer.createInstance)
			this.timer_id.show = this.cfg.timer.createInstance();
			this.timer_id.show = this.timer_id.show.later(this.hide, delay,
					this);
			// this.hide();
			// this.timer_id.show = this.later(delay, this.hide);
			// this.sto(this.hide,800);
			// document.getElementById("rank").src = "1.gif";
		},
		hide : function() {
			this.div.main.style.visibility = "hidden";
		},

		onload : function() {

			this.add_main_div();
			this.scan_tree(document);
			// this.partial_check();

			/*
			 * this.clear_timer("partial"); this.cfg.partial_check.attempts = 0;
			 * this.body_loaded = true; if (this.cfg.rescan_after_load) {
			 * this.partial_check() } if (!this.div_added) { this.add_main_div() }
			 * this.shot_scan(); this.sample()
			 */
		},
		conditional_activate : function(el) {
			/*if (this.cfg.show_internal || !this.is_internal_link(el)) {
				this.activate(el);
			}*/
			if(this.cfg.show_internal && this.is_internal_link(el)){
				this.activate(el);
			}
			if(this.cfg.show_external && !this.is_internal_link(el)){
				this.activate(el);
			}			
		},
		/*
		 * activate : function(el) { trigger = el; this.observe(trigger,
		 * "mouseover", this.show_delay, 300, 500); this.observe(trigger,
		 * "mouseout", this.hide_delay, 200); this.observe(trigger, "click",
		 * this.hide_delay, 0); },
		 */
		i : 0,
		observe : function(E, C, H) {
			var D = this;
			var B = Array.prototype.slice.apply(arguments, [3]);
			B.unshift(undefined);
			var G = function(I) {
				B[0] = I;
				H.apply(D, B)
			};
			var F;
			if (E.addEventListener) {
				if (C == "mousewheel") {
					C = "DOMMouseScroll"
				}
				E.addEventListener(C, G, false)
			} else {
				if (E.attachEvent) {
					E.attachEvent("on" + C, G)
				}
			}
		},
		unobserve : function(element, type, listener) {
			if (element.removeEventListener) {
				element.removeEventListener(type, listener, false)
			} else {
				if (element.detachEvent) {
					element.detachEvent("on" + type, listener)
				}
			}
		},
		clear_timer : function(B) {
			/*
			 * try { this.cfg.timer.cancel(); } catch (e) { }
			 */
			if (this.timer_id != null)
				if (this.timer_id[B]) {
					//alert("this.timer_id[B]="+B);
					if (this.timer_id[B].cancel) {
						this.timer_id[B].cancel();
					}
				}
		},

		partial_check : function() {
			this.clear_timer("partial");
			if (this.cfg.partial_check.attempts <= 0) {
				return
			}
			E = document.getElementsByTagName("*").length;
			if (E !== this.last_partial_check_count) {
				this.scan_tree(document);
				this.last_partial_check_count = E;

			}
			this.cfg.timer.later(this.partial_check,
					this.cfg.partial_check.delay, this);
			this.cfg.partial_check.attempts--;

		},

		scan_tree : function(el) {
			var matchs, length, m, i, len, is_markup = false, is_link, nn, tn, nv, am, re, textnode_parent, prop = {}, next_node;
			var element = el;

			if (element && element.tagName) {

				var manualConfig = element.className.match(/(rank_jit_\w+)/ig);
				// check if element is manually configured
				/*
				 * if(manualConfig){ var length=manualConfig.length; for(i=0;i<length;i++){
				 * switch(manualConfig[i].toLowerCase()){ case "no_icon": break;
				 * case "trigger_icon" : break; case "trigger_both" : break; } } }
				 */

				/*
				 * if (this.cfg.show_link_icon) { this.el_prop(element,
				 * "trigger", this.cfg.preview_trigger); } else {
				 * this.el_prop(element, "trigger", "link"); }
				 */

				is_link = element.tagName.match(/^(A|AREA)$/i) ? true : false;
				if (is_link) {
					this.conditional_activate(element);

				}
			}

			element = element.firstChild;

			while (element) {
				next_node = element.nextSibling;
				if (element.nodeType == 3 && element.parentNode) {

				} else {
					this.scan_tree(element);
				}
				element = next_node;

			}
		},

		get_all_rank_jit_nodes : function(rank_jit, container) {
			var childs = rank_jit.getElementsByTagName("*");
			for (var i = 0; i < childs.length; i++) {
				if (childs[i].id) {
					var id_part = childs[i].id.match(/^rank_jit_(\w+)/);
					if (id_part) {
						container[id_part[1]] = childs[i];
					}
				}
			}
			return container;
		}

	}
	A.init();
	return A

}

Rank_JIT.cache = {
	cache : {},
	setRank : function(url, rank) {
		this.cache[url] = rank;
	},

	getRank : function(url) {
		if (this.cache[url]) {
			return this.cache[url];
		}
		return null;
	}

};

Rank_JIT.log = {
	ERROR : "error",
	INFO : "info",
	log : function(obj, type) {

		var url = Rank_JIT.config.base_url + Rank_JIT.config.logging_image;

		var id = "rank_jit_logging_img"

		for (key in obj) {
			url += key + "=" + encodeURIComponent(obj[key]) + "&";
		}
		url += "type=" + type;

		// var img=new Image();
		// img.src=url;

		var body = document.getElementsByTagName("body")[0];
		var logging_img = document.getElementById(id);
		if (!logging_img) {
			logging_img = document.createElement("img");
			logging_img.id = id;
			logging_img.style.position = "absolute";
			logging_img.style.visibility = "hidden";
			logging_img.style.zIndex = "0";
			logging_img.src = url;
			body.insertBefore(logging_img, body.lastChild);
		} else {
			logging_img.src = url;
		}
	},
	logObj : {
		url : null,
		rank : null,
		real_url : "",
		owner_host : document.location.href,
		key : Rank_JIT.config.key
	}
};

Rank_JIT.page_rank = {
	cache : null,
	log : null,
	rank_jit_object : null,
	init : function(rank_jit_object) {
		this.cache = Rank_JIT.cache;
		this.rank_jit_object = rank_jit_object;
	},

	check : function(id, url) {

		var page_data = this.cache.getRank(url);
		if (page_data) {
			this.show_rank(id, page_data);
		} else {
			// window.alert("url="+url)
			if(Rank_JIT.config.isWebWidget){
				Rank_JIT.config.rank_checker.check(id, url, "Rank_JIT.page_rank.show_rank");
			}else{
				Rank_JIT.config.rank_checker.check(id, url, this.show_rank);
			}
		}

	},

	show_rank : function(id, page_data) {
		// window.alert("id111===="+id)
		var resultContainer = document.getElementById("resultContainer" + id);
		var gradientContainer = document.getElementById("gradientContainer"
				+ id);

		if (gradientContainer && resultContainer) {
			if (page_data.rank != "-1") {
				resultContainer.innerHTML = "" + page_data.rank;
				gradientContainer.style.width = (parseInt(page_data.rank) * 38 / 10)
						+ "px";
				resultContainer.style.fontSize = "14px";
			} else {
				resultContainer.innerHTML = "n/a";
				gradientContainer.style.width = "0px";
				resultContainer.style.fontSize = "11px";
			}
		}
		if(!Rank_JIT.config.isWebWidget){
			try {
				Rank_JIT.log.logObj["rank"] = page_data.rank;
				Rank_JIT.log.logObj["url"] = page_data.url;
				Rank_JIT.log.logObj["real_url"] = page_data.real_url;
				Rank_JIT.log.log(Rank_JIT.log.logObj, Rank_JIT.log.INFO);
			} catch (e) {
				//window.alert(e);
			}
		}
	}
};

Rank_JIT.Exception = {
	handle : function(ex) {
		/*
		 * In FF exception can be a string if it happens when opening the
		 * xmlHttpRequest. Gah!
		 */
		if (typeof ex == 'string')
			ex = new Error(ex)
		try {
			/*
			 * Don't use exception.toString since the JS spec does not require
			 * it to provide the error name or message (haven't tested to see if
			 * it matters though across browsers)
			 */

			this.exception["name"] = ex.name;
			this.exception["message"] = ex.message;
			this.exception["fileName"] = ex.fileName;
			this.exception["stack"] = ex.stack;
			this.exception["lineNumber"] = ex.lineNumber;

			Rank_JIT.log.log(this.exception, Rank_JIT.log.ERROR);

		} catch (e) {
		}

	},
	exception : {
		name : "",
		message : "",
		fileName : "",
		stack : "",
		lineNumber : "",
		owner_host : document.location.href,
		key : Rank_JIT.config.key
	}

}
try {
	Rank_JIT.obj = Rank_JIT.rank_jit_object();
} catch (ex) {
	Rank_JIT.Exception.handle(ex);
}
