var g_tags;
var g_images;
var g_last = -1;
var g_timeout;
var g_num = 9; // number of boxes to swap
var g_lastcombo;
var g_lastbox;
var g_rate;

var g_rateSlow = 1000;
var g_rateFast = 250;

var g_passNumber = 0; // make sure we populate all boxes at first by making 9 passes through

var g_lastComboHash = new Array();


function displayGrid() {
	//alert(this.url + " loaded! content:\n\n" + this.req.responseText);
	
	g_rate = g_rateFast;
	
	var xmlDoc = this.req.responseXML;
	g_tags = xmlDoc.getElementsByTagName("tag");
	g_images = xmlDoc.getElementsByTagName("image");
	


	swapImage();

}

function pickNew(last, count) {

	if (count == 1)
		return 0;

	var ran_unrounded = Math.random() * count;
	var ran_number = Math.floor(ran_unrounded);

	// make sure it wasn't the last one
	if (last == ran_number) {
		return pickNew(last, count);
	} else
		return ran_number;

}

function swapImage() {

	/*
	// randomly choose a box
	var ran_box_unrounded = Math.random()*g_num;
	var ran_box_number = Math.floor(ran_box_unrounded);

	// make sure it wasn't the last one
	if (g_lastbox == ran_box_number) {
		swapImage();
		return;
	} else
		g_lastbox = ran_box_number;
	*/
	
	ran_box_number = pickNew(g_lastbox, g_num);
	g_lastbox = ran_box_number;
	

	// get the corresponding div...
	// ...for anonymous user
	var div = document.getElementById("images" + ran_box_number);
	
	// if it doesn't exist, it's because user is logged in
	if (!div) {
		// reset number of total boxes based on user state
		g_num = 18;
		div = document.getElementById("userimages" + ran_box_number);
	} else {
		g_num = 9;
	}
	
	// initially, we want to make sure every box is populated, before
	// we start the normal random rotation.
	if (g_passNumber < g_num) {
		if (div.innerHTML != "") {
			swapImage();
			return;
		} else {
			g_passNumber++;
		}
		
		// need to reset the rate once all boxes have been filled
		if (g_passNumber == g_num)
			g_rate = g_rateSlow;

	} else {
		// this works, but is one too late.
		g_rate = g_rateSlow;
	}

	// get all image nodes that correspond to the selected tag in the xml
	var images = g_tags[ran_box_number].getElementsByTagName("image");
	
	if (images.length == 1 && g_num == g_passNumber) {
		swapImage();
		return;
	}

	
	/*
	// randomly choose a number
	var ran_unrounded=Math.random()*images.length;
	var ran_number=Math.floor(ran_unrounded);
	*/
	
	
	ran_number = pickNew(g_lastComboHash[ran_box_number], images.length);
	g_lastComboHash[ran_box_number] = ran_number;
	
	
	
	//window.status = g_passNumber + " " + g_num + " box: " + ran_box_number + "     image: " + ran_number;
	
	
	/*
	// make sure that box and image number weren't used last time!
	var last = g_lastComboHash[ran_box_number];
	if (ran_number == last) {
		swapImage();
		return;
	} else {
		g_lastComboHash[ran_box_number] = ran_number;
	}
	*/
	
	/*
	var last = ran_box_number + "|" + ran_number;
	if (g_lastcombo == last) {
		swapImage();
		return;
	}
	else
		g_lastcombo = last;
	*/
	
	
	

	//div.innerHTML = "<img src=\"" + getAttr(g_images[ran_number], "thumbnail") + "\"><br />" + getAttr(g_images[ran_number], "title");
	var tag = g_tags[ran_box_number].getAttribute("name");
	changeOpac(0, div.id);
	div.innerHTML = "<a href=\"SearchByTag.aspx?tag=" + tag + "\"><img border=\"0\" style=\"border: 1px solid #bbbbbb;\" src=\"" + images[ran_number].getAttribute("thumbnail") + "\"></a><br /><a href=\"SearchByTag.aspx?tag=" + tag + "\">" + tag + "</a>";
	div.style.visibility = 'visible'
	opacity(div.id, 0, 100, 1000);
	window.clearTimeout(g_timeout);
	g_timeout = window.setTimeout('swapImage()', g_rate);
}