var browser=0;
var tetraConfs=new Array;

if  (window.XMLHttpRequest) browser=1;
else if (window.ActiveXObject) {
	browser=2;
	try { req=new ActiveXObject("Microsoft.XMLHTTP"); }
	catch(e) { browser=-1; }
	if (!req) browser=-1;
	req=0;
} else browser=-1;

function TetraMakeConf(name, url, allowUrlChange, origItemCount,
		boxSize, itemSize, gap, direction, itemDelay, stepDelay, stepSize, refreshDelay
) {
	if (!browser) return;
	var sign=0;
	if ((direction=='L2R')||(direction=='T2B')) sign=1;
	else if ((direction=='R2L')||(direction=='B2T')) sign=-1;
	if (sign) {
		if (browser==-1) url='';
		var icount=0;
		var moving=0;
		var ishoriz=(direction.indexOf('T')>-1)?0:1;
		var fullSize=itemSize+gap;
		var iatonce=Math.ceil(boxSize/fullSize)+1;
		var posinc=stepSize*sign;
		var firstpos=fullSize*(0-sign)*((sign==-1)?(iatonce-1):1);
		var lastposinc=(fullSize%stepSize)*sign;
		var lastpos=firstpos+(sign*fullSize*(iatonce-1))-lastposinc;
		var visstopped=0;
		if (origItemCount) {
			icount=origItemCount;
			visstopped=(icount<iatonce)?icount:(iatonce-1);
			moving=new Array;
			var finalpos=lastpos+lastposinc;
			for (i=0;i<visstopped+1;i++)
				moving[i]=new Array(name+'div'+i,finalpos-(i*fullSize*sign),i);
		}
		tetraConfs[tetraConfs.length]=name;
		return new Array(name,url,boxSize,itemSize,gap,direction,itemDelay,stepDelay,stepSize,
			4,iatonce,0,posinc,lastpos,lastposinc,0,moving,0,0,
			icount,refreshDelay,firstpos,ishoriz,0,allowUrlChange,visstopped,icount,0);
	} else return 0;
}

function TetraStart(confName) {
	var s=eval(confName);
	if (s[26]||s[1].length) {
		if (s[26]) {
			s[9]=0;
			if (s[1].length) setTimeout('TetraRequestXML("'+confName+'");',s[20]*1000);
			TetraWaitToScroll(confName,0);
		} else TetraRequestXML(confName);
	}
}

function TetraWaitToScroll(confName,shiftDivs) {
	var s=eval(confName);
	s[9]|=2;
	s[27]=shiftDivs;
	s[15]=setTimeout('TetraStartScroll("'+confName+'");',s[6]*1000);
}

function TetraRequestXML(confName) {
	var s=eval(confName);
	if (browser==1) {
		try { s[17]=new XMLHttpRequest(); }
		catch(e) { browser=-1; }
	} else if (browser==2) {
		try { s[17]=new ActiveXObject("Microsoft.XMLHTTP"); }
		catch(e) { browser=-1; }
	}
	if (s[17]) {
		s[23]=1;
		s[17].onreadystatechange=TetraListenForXML;
		s[17].open("GET",s[1],true);
		s[17].send(null);
	}
}

function TetraListenForXML() {
	for (var ssi=0;ssi<tetraConfs.length;ssi++) {
		var s=eval(tetraConfs[ssi]);
		if (s[17]&&(s[17].readyState==4)) { 
			if ((s[17].status==200)||(s[17].status==304)) {
				s[23]=2;
				if (s[9]&4) TetraProcessXML(s[0],1);
			} else {
				if ((s[17].status==404)||(s[17].status==410))
					s[1]=s[18]=s[16]='';
				s[23]=s[17]=0;
				TetraResume(s[0],0);
			}
		}
	}
}

function TetraProcessXML(confName,waitAfter) {
	var s=eval(confName);
	var olditems=new Array;
	s[11]=s[25];
	if (s[11]) for (i=1;i<s[10];i++) olditems[i-1]=document.getElementById(s[16][i][0]).innerHTML;
	var itemlist=s[17].responseXML.getElementsByTagName('i');
	s[18]=new Array;
	if (s[11]) for (var i=0;i<(s[10]-1);i++) s[18][i]=olditems[i];
	olditems='';
	s[26]=itemlist.length;
	var olditemcount=s[11]?(s[10]-1):0;
	s[19]=s[26]+olditemcount;
	s[25]=(s[10]>s[26])?s[26]:(s[10]-1);
	for (var i=olditemcount;i<s[19];i++)
		s[18][i]=itemlist[i-olditemcount].firstChild.nodeValue;
	var sign=(s[12]>0)?1:-1;
	var thispos;
	var thisname;
	s[16]=new Array;
	var o='';
	var fullSize=s[3]+s[4];
	var finalpos=s[13]+s[14];
	for (var i=0;i<s[19];i++) {
		thisname=s[0]+'div'+i;
		o+='<div id="'+thisname+'" class="'+s[0]+'div"';
		if (i<s[10]) {
			thispos=(finalpos-(i*fullSize*sign));
			s[16][i]=new Array(thisname,thispos,i);
			o+=' style="'+(s[22]?'left':'top')+':'+thispos+'px"';
		}
		o+='>'+s[18][i]+'</div>';
	}
	document.getElementById(s[0]+'case').innerHTML=o;
	if (s[24]) {
		var newURL=s[17].responseXML.getElementsByTagName('url');
		if (newURL.length) {
			newURL=newURL[0].firstChild.nodeValue;
			s[1]=(newURL==':')?'':newURL;
		}
	}
	if (s[1].length) setTimeout('TetraRequestXML("'+s[0]+'");',s[20]*1000);
	s[17]=s[23]=0;
	if (waitAfter) TetraWaitToScroll(s[0],0);
	else TetraResume(s[0],2);
}

function TetraPause(confName) {
	if (!browser) return;
	var s=eval(confName);
	if (!s) return;
	s[9]|=1;
}

function TetraResume(confName,why) {
	if (!browser) return;
	var s=eval(confName);
	if (!s) return;
	if (why) s[9]&=(127-why);
	if (TetraCanScroll(confName)&&!s[15]) {
		if (!s[9]) s[15]=setTimeout('TetraStep("'+confName+'");',s[7]);
		else if ((why==1)&&(s[9]&2)) s[15]=setTimeout('TetraStartScroll("'+confName+'");',s[7]);
	}
}

function TetraStep(confName) {
	var s=eval(confName);
	s[15]=0;
	if (s[9]) return;
	if (s[16][1][1]==s[13]) {
		for (var i=0;i<s[10];i++) {
			s[16][i][1]+=s[14];
			if (s[22]) document.getElementById(s[16][i][0]).style.left=s[16][i][1]+'px';
			else document.getElementById(s[16][i][0]).style.top=s[16][i][1]+'px';
		}
		TetraWaitToScroll(confName,1);
	} else {
		for (var i=0;i<s[10];i++) {
			s[16][i][1]+=s[12];
			if (s[22]) document.getElementById(s[16][i][0]).style.left=s[16][i][1]+'px';
			else document.getElementById(s[16][i][0]).style.top=s[16][i][1]+'px';
		}
		if (!s[9]) s[15]=setTimeout('TetraStep("'+confName+'");',s[7]);
	}
}

function TetraWaitToProcessXML(confName) {
	var s=eval(confName);
	if (s[23]==2) TetraProcessXML(confName,0);
	else setTimeout('TetraWaitToProcessXML("'+confName+'");',250);
}

function TetraCanScroll(confName) {
	var s=eval(confName);
	return (s[26]>=s[10])||(s[19]>=(s[10]+s[16][0][2]+s[27]));
}

function TetraStartScroll(confName) {
	if (!browser) return;
	var s=eval(confName);
	s[15]=0;
	if (s[9]&1) return;
	s[9]&=(127-2);
	if (s[23]) TetraWaitToProcessXML(confName);
	else {
		if (s[27]&&TetraCanScroll(confName)) {
			var nextNum=s[16][s[10]-1][2]+1;
			if (nextNum==s[19]) nextNum=s[11];
			for (var i=1;i<s[10];i++) s[16][i-1]=s[16][i];
			s[16][s[10]-1]=new Array(s[0]+'div'+nextNum,s[21],nextNum);
		} else if (s[9]&4) s[9]&=(127-4);
		TetraResume(confName,0);
	}
	s[27]=1;
}
