function rando() {
	return (Math.round(Math.random())-0.5);
}

var titleUpdater = {
	onFinish: function () {},
	update: function () {
		if(cst>=specialtitles.length) {
			// rerandomize (I don't care if next set might be the same...)
			specialtitles.sort(rando);
			// start over
			cst = 0;
		}
		var imgs = dojo.query("img",newbooks[current]);
		newbooks[current].title = "More info about "+specialtitles[cst];
		// set link
		// use local cst or else global will be used, which is already updated...
		imgs[0].link = escape(specialtitles[cst]);
		// clean up old event (why?)
		dojo.disconnect(imgs[0].evt);
		imgs[0].evt = dojo.connect(imgs[0],'onclick',imgs[0],function(){
			location.href='t_bookview.cgi?bookid='+this.link;
		});
		// get image props object
		dojo.xhrGet({
			url: "welcome.cgi?rm=title_json;code="+escape(specialtitles[cst]),
			handleAs: "json",
			load: function(respObj, ioArgs) {
				if(!respObj.image3dhi) {
					cst++;
					titleUpdater.update();
					return;
				}
				// preload images into preload list
				preloadImages.onLoaded = function() {
					// after upload connect fisheyeli to img
					// update current for global counter
					var imgs = dojo.query("img",newbooks[current]);
					imgs[0].src = preloadImages.loaded_image.src;
					dojo.fadeIn({
						node:newbooks[current],
						duration:1000,
						onEnd:function(){
							titleUpdater.onFinish();
						}
					}).play();
				}
				preloadImages.queue_images([respObj.image3dhi]);
			}
		});
		// update current specialtitle counter
		cst++;
	}
}
// randomize titles
specialtitles.sort(rando);
var ts;
var init=false;
var n = 0;
var newbooks = [];
var current = 0, cst = 0;
var preimgs = [];
dojo.addOnLoad(function(){
	dojo.require("dojox.timing._base");
	dojo.require("dojox.widget.FisheyeList");
	dojo.require("dojo.parser");
	// parse the dojo for fisheyelist
	dojo.parser.parse();
	// populate fisheyelistitems
	var list = dojo.query("div","newtitleslist");
	for(var i in list) {
		if(list[i].className!="dojoxFisheyeListItem") continue;
		newbooks.push(list[i]);
	}
	// initiate fishlist
	for(var i in newbooks) {
		// quick crossbrowser fadeout
		dojo.fadeOut({node:newbooks[i],duration:1}).play();		
	}
	titleUpdater.onFinish = function() {
		current++;
		if(current<newbooks.length) {
			titleUpdater.update();
		} else {
			// reset
			titleUpdater.onFinish = function() {
				current++;
				if(current>=newbooks.length) current = 0;
			};
			current = 0;
		}
	}
	titleUpdater.update();

	// setup the timer to keep updating list
	ts = new dojox.timing.Timer(7000);
	ts.onTick = function() {
		dojo.fadeOut({
			node:newbooks[current],
			duration:1000,
			onEnd:function() {
				titleUpdater.update();
			}
		}).play();
	}
	setTimeout(function() {
		ts.start();
	}, 2000);
});