function Nav()
{
	this.isIE=window.ActiveXObject?true:false;
	this.serverRoot;
	this.imgCacheOver=new Array();
	this.imgCacheOut=new Array();
	this.sz=new Array();
	this.cp=new Array();
	this.pq=new Array();
	this.l=new Array();
	this.billboardElements=new Array();
	this.servicePaths=new Array();
	this.init=navInit;
	this.initImgCache=navInitImgCache;
	this.initSize=navInitSize;
	this.idsToElements=navIdsToElements;
	this.addListener=navAddListener;
	this.billboardElementToIndex=navBillboardElementToIndex;
	this.refreshButtonsAndStatus=navRefreshButtonsAndStatus;
	this.refresh=navRefresh;
	this.registerListeners=navRegisterListeners;
	this.mouseOver=navMouseOver;
	this.mouseOut=navMouseOut;
	this.mouseClickPrev=navMouseClickPrev;
	this.mouseClickNext=navMouseClickNext;
	this.visitService=navVisitService;
	this.callService=navCallService;
	this.newXMLHttpObject=navNewXMLHttpObject;
	this.evalString=navEvalString;
	this.replaceContents=navReplaceContents;
	this.extractElementsById=navExtractElementsById;
}

function navInit()
{
	this.serverRoot=window.location.protocol+"//"+window.location.hostname;
	if (window.location.port&&window.location.port!=80)
		this.serverRoot+=":"+window.location.port;
	this.billboardElements=this.idsToElements(new Array("RootCountries","RootTypes","RootDates","RootTopQueries"));
	this.servicePaths=new Array("/services/rootCountries%d.xml","/services/rootTypes%d.xml","/services/rootDates%d.xml","/services/rootTopQueries%d.xml");
	this.initImgCache(new Array("http://image.so.mdbchina.com/images/root.prev.normal.gif", "http://image.so.mdbchina.com/images/root.prev.highlight.gif", "http://image.so.mdbchina.com/images/root.next.normal.gif", "http://image.so.mdbchina.com/images/root.next.highlight.gif"));
	this.initSize();
	this.registerListeners();
	this.visitService(3, parseInt(Math.random()*this.sz[3]));
	window.setTimeout("nav.refresh()", 500);
}

function navInitImgCache(imgNames)
{
	for (var i=0; i<imgNames.length; i+=2)
	{
		var imgObject1=new Image();
		var imgObject2=new Image();
		imgObject1.src=imgNames[i];
		imgObject2.src=imgNames[i+1];
		this.imgCacheOver[imgObject1.src]=imgObject2;
		this.imgCacheOut[imgObject2.src]=imgObject1;
	}
}

function navExtractElementsById(rootElement, tagName, id)
{
	var elements=rootElement.getElementsByTagName(tagName);
	var extractedElements=new Array();
	for (var i=0; i<elements.length; ++i)
	{
		if (elements[i].id==id)
			extractedElements.push(elements[i]);
	}
	return extractedElements;
}

function navInitSize()
{
	for (var i=0; i<this.billboardElements.length; ++i)
	{
		var children=this.extractElementsById(this.billboardElements[i], "div", "ResultSize");
		this.sz.push(parseInt(children[0].title));
		this.cp.push(0);
		this.l.push(new Array());
		this.pq.push(new Array());
	}
}

function navRegisterListeners()
{
	for (key in this.billboardElements)
	{
		var e=this.billboardElements[key];
		this.addListener(e, "onmouseenter", "mouseover", billboardMouseOver);
		this.addListener(e, "onmouseleave", "mouseout", billboardMouseOut);
		var imgs=e.getElementsByTagName("img");
		this.addListener(imgs[0], "onmouseenter", "mouseover", navigatorMouseOver);
		this.addListener(imgs[1], "onmouseenter", "mouseover", navigatorMouseOver);
		this.addListener(imgs[0], "onmouseleave", "mouseout", navigatorMouseOut);
		this.addListener(imgs[1], "onmouseleave", "mouseout", navigatorMouseOut);
		this.addListener(imgs[0], "onclick", "click", navigatorMouseClickPrev);
		this.addListener(imgs[1], "onclick", "click", navigatorMouseClickNext);
		var anchors=e.getElementsByTagName("a");
		for (var i=0; i<anchors.length; ++i)
			this.addListener(anchors[i], "onclick", "click", keywordMouseClick);
	}
}

function keywordMouseClick(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	var keyword=e.innerHTML;
	if (keyword)
	{
		var inputBox=document.forms["s"].q;
		inputBox.value+=(inputBox.value.length==0||inputBox.value.match("/ +$/")?"":" ")+keyword;
	}
	if (!window.ActiveXObject)
		event.preventDefault();
	return false;
}

function navigatorMouseClickPrev(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	e=e.parentNode.parentNode;
	nav.mouseClickPrev(e);
}

function navMouseClickPrev(e)
{
	var index=this.billboardElementToIndex(e);
	if (index<0)
		return;
	if (this.cp[index]>0)
	{
		this.visitService(index, this.cp[index]-1);
	}
}

function navigatorMouseClickNext(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	e=e.parentNode.parentNode;
	nav.mouseClickNext(e);
}

function navMouseClickNext(e)
{
	var index=this.billboardElementToIndex(e);
	if (index<0)
		return;
	if (this.cp[index]<this.sz[index]-1)
	{
		this.visitService(index, this.cp[index]+1);
	}
}

function navigatorMouseOver(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	nav.mouseOver(e);
}

function navMouseOver(e)
{
	var imgObject=this.imgCacheOver[e.src];
	if (imgObject)
		e.src=imgObject.src;
}

function navMouseOut(e)
{
	var imgObject=this.imgCacheOut[e.src];
	if (imgObject)
		e.src=imgObject.src;
}

function navigatorMouseOut(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	nav.mouseOut(e);
}

function navAddListener(targetElement, eventNameIE, eventNameFF, callBack)
{
	if (this.isIE)
		targetElement.attachEvent(eventNameIE, callBack);
	else
		targetElement.addEventListener(eventNameFF, callBack, false);
}

function navIdsToElements(ids)
{
	var elements=new Array();
	for (key in ids)
		elements.push(document.getElementById(ids[key]));
	return elements;
}

function navRefreshButtonsAndStatus(e)
{
	var index=this.billboardElementToIndex(e);
	if (index<0)
		return;
	var imgs=e.getElementsByTagName("img");
	imgs[0].style.display=this.cp[index]>0?"inline":"none";
	imgs[1].style.display=this.cp[index]<this.sz[index]-1?"inline":"none";
	var spans=e.getElementsByTagName("span");
	spans[0].innerHTML="- "+(this.cp[index]+1)+" -";
}

function navBillboardElementToIndex(e)
{
	for (key in this.billboardElements)
		if (e==this.billboardElements[key])
			return key;
	return -1;
}

function billboardMouseOver(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	var imgs=e.getElementsByTagName("img");
	nav.refreshButtonsAndStatus(e);
}

function billboardMouseOut(event)
{
	var e=window.ActiveXObject?event.srcElement:event.currentTarget;
	var imgs=e.getElementsByTagName("img");
	imgs[0].style.display="none";
	imgs[1].style.display="none";
	var spans=e.getElementsByTagName("span");
	spans[0].innerHTML="";
}

function navVisitService(index, currentPage)
{
	var cache=this.l[index][currentPage];
	if (cache)
	{
		this.pq[index].push(currentPage);
	}
	else
	{
		this.callService(this.serverRoot+this.servicePaths[index].replace("%d", currentPage));
	}
}

function navEvalString(jsString)
{
	eval(jsString);
}

function navCallService(serviceURL)
{
	try
	{
		var xmlServiceObject=this.newXMLHttpObject();
		xmlServiceObject.open("GET", serviceURL, true);
		xmlServiceObject.onreadystatechange=function()
			{
				if (xmlServiceObject.readyState==4)
				{
					if (xmlServiceObject.status==200)
					{
						var jsString="";
						if (window.ActiveXObject)
						{
							jsString=xmlServiceObject.responseXML.getElementsByTagName("JavaScript")[0].text;
						}
						else
						{
							jsString=xmlServiceObject.responseXML.getElementsByTagName("JavaScript")[0].textContent;
						}
						nav.evalString(jsString);
					}
					else
					{
					}
				}
			}
		xmlServiceObject.send(null);
		return true;
	}
	catch (e)
	{
		alert(e);
		return false;
	}
}

function navRefresh()
{
	for (var index=0; index<this.pq.length; ++index)
	{
		var currentColumn=this.pq[index];
		var columnLength=currentColumn.length;
		if (columnLength>0)
		{
			var lastPage=currentColumn[columnLength-1];
			var rootElement=this.billboardElements[index];
			this.replaceContents(rootElement, this.l[index][lastPage]);
			for (var i=0; i<columnLength; ++i)
				currentColumn.shift();			
			this.cp[index]=lastPage;
			this.refreshButtonsAndStatus(rootElement);
		}
	}
	window.setTimeout("nav.refresh()", 500);
}

function navReplaceContents(rootElement, contents)
{
	var anchors=rootElement.getElementsByTagName("a");
	var divs=this.extractElementsById(rootElement, "div", "RR");
	for (var i=0; i<contents.length; ++i)
	{
		anchors[i].innerHTML=contents[i][0];
		anchors[i].href="/query/"+encodeURIComponent(contents[i][0]);
		anchors[i].title=contents[i][0];
		anchors[i].style.visibility="visible";
		divs[i].innerHTML=divs[i].innerHTML.replace(/\d+/, contents[i][1]);
		divs[i].style.visibility="visible";
	}
	for (var i=contents.length; i<anchors.length; ++i)
	{
		anchors[i].style.visibility="hidden";
		divs[i].style.visibility="hidden";
	}
}

function navNewXMLHttpObject()
{
	var xmlHttpObject;
	if (this.isIE)
	{
		try
		{
			xmlHttpObject=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlHttpObject=new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (oc)
			{
				xmlHttpObject=null;
			}
		}
	}
	else
	{
		xmlHttpObject=new XMLHttpRequest();
		xmlHttpObject.overrideMimeType("text/xml");
	}
	return xmlHttpObject;
}

var nav;
try
{
	nav=new Nav();
}
catch (e)
{};