var moderate_xreq = false;
var loaded_count = 0;
var lock = false;
var tiles = new Array();
var max_count = 10; //number of tiles to mod before refresh

function img_loaded() {
	while (lock); //primitive locking system to handle multithreaded problems
	lock = true;  //problems can still occur, but are less likely
	loaded_count++;
	lock = false;
	if (loaded_count % 2 == 0) {
		var tile0 = document.getElementById('tile0');
		tile0.style.cursor = 'default';
		for (tile0 = tile0.firstChild; tile0 != null; tile0 = tile0.nextSibling) {
			tile0.style.cursor = 'default';
			new Effect.Opacity(tile0, {duration: 0.5, from: .3, to: 1});
			if (tile0.className == 'tile') {
				tile0.style.cursor = 'pointer';
				tile0.onclick = function() { send_selection(tiles[0], tiles[1]); };
			}
			else if (tile0.className == 'flag_tile') {
				if (tiles[0].get_state() == 'UNFLAGGABLE') {
					tile0.innerHTML = 'unflaggable';
					tile0.style.color = 'gray';
					tile0.onclick = null;
				}
				else {
					tile0.innerHTML = 'flag this image for review';
					tile0.style.color = 'black';
					tile0.style.cursor = 'pointer';
					tile0.onclick = function() { flag_tile(tiles[0]); };
				}
			}
		}
		var tile1 = document.getElementById('tile1');
		tile1.style.cursor = 'default';
		for (tile1 = tile1.firstChild; tile1 != null; tile1 = tile1.nextSibling) {
			tile1.style.cursor = 'default';
			new Effect.Opacity(tile1, {duration: 0.5, from: .3, to: 1});
			if (tile1.className == 'tile') {
				tile1.style.cursor = 'pointer';
				tile1.onclick = function() { send_selection(tiles[1], tiles[0]); };
			}

			else if (tile1.className == 'flag_tile') {
				if (tiles[1].get_state() == 'UNFLAGGABLE') {
					tile1.innerHTML = 'unflaggable';
					tile1.style.color = 'gray';
					tile1.onclick = null;
				}
				else {
					tile1.innerHTML = 'flag this image for review';
					tile1.style.color = 'black';
					tile1.style.cursor = 'pointer';
					tile1.onclick = function() { flag_tile(tiles[1]); };
				}
			}
		}

	}
}

function moderate_load() {
	send_selection();
}

function send_selection(vote_up, vote_down) {

	moderate_xreq = create_xml_request();

	if (moderate_xreq === false) {
	}
	else {
		var tile0 = document.getElementById('tile0');
		tile0.style.cursor = 'wait';
		for (tile0 = tile0.firstChild; tile0 != null; tile0 = tile0.nextSibling) {
			tile0.style.cursor = 'wait';
			new Effect.Opacity(tile0, {duration: 0.5, from: 1, to: .3});
			if (tile0.className == 'tile')
				tile0.onclick = null;
			else if (tile0.className == 'flag_tile')
				tile0.onclick = null;
		}
		var tile1 = document.getElementById('tile1');
		tile1.style.cursor = 'wait';
		for (tile1 = tile1.firstChild; tile1 != null; tile1 = tile1.nextSibling) {
			tile1.style.cursor = 'wait';
			new Effect.Opacity(tile1, {duration: 0.5, from: 1, to: .3});
			if (tile1.className == 'tile')
				tile1.onclick = null;
			else if (tile1.className == 'flag_tile')
				tile1.onclick = null;
		}

		moderate_xreq.onreadystatechange = receive_tiles;
		//if this is our last tile before refreshing, don't send async
		if (loaded_count >= max_count * 2)
			moderate_xreq.open('POST', WWW + '/xml.tile.php', false);
		else
			moderate_xreq.open('POST', WWW + '/xml.tile.php', true);
		moderate_xreq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		if (vote_up == null || vote_down == null)
			moderate_xreq.send('action=2_random');
		else {
			var old_down = vote_down.get_score();
			vote_down.vote_down(vote_up.get_score());
			vote_up.vote_up(old_down);

			createCookie("prev_mod", tiles[0].get_id()+'_'+tiles[0].get_key()+','+tiles[1].get_id()+'_'+tiles[1].get_key());

			moderate_xreq.send('action=moderate&id_up='+vote_up.get_id() + '&key_up='+vote_up.get_key()+'&id_down='+vote_down.get_id()+'&key_down='+vote_down.get_key());
		}

		if (loaded_count >= max_count * 2)
			window.location.reload( false );
	}
}

function flag_tile (tile) {

	moderate_xreq = create_xml_request();

	if (moderate_xreq === false) {
	}
	else {
		var tile0 = document.getElementById('tile0');
		for (tile0 = tile0.firstChild; tile0 != null; tile0 = tile0.nextSibling) {
			new Effect.Opacity(tile0, {duration: 0.5, from: 1, to: .3});
			if (tile0.className == 'tile') {
				tile0.onclick = null;
			}
			else if (tile0.className == 'flag_tile') {
				tile0.onclick = null;
			}
		}
		var tile1 = document.getElementById('tile1');
		for (tile1 = tile1.firstChild; tile1 != null; tile1 = tile1.nextSibling) {
			new Effect.Opacity(tile1, {duration: 0.5, from: 1, to: .3});
			if (tile1.className == 'tile') {
				tile1.onclick = null;
			}
			else if (tile1.className == 'flag_tile') {
				tile1.onclick = null;
			}
		}

		moderate_xreq.onreadystatechange = receive_tiles;
		if (loaded_count >= max_count * 2)
			moderate_xreq.open('POST', WWW + '/xml.tile.php', false);
		else
			moderate_xreq.open('POST', WWW + '/xml.tile.php', true);
		moderate_xreq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		if (tile == null)
			moderate_xreq.send('action=2_random');
		else {
			tile.flag();

			if (tiles[0].get_state() == 'FLAGGED')
				createCookie("prev_mod", 'flagged,' + tiles[1].get_id()+'_'+tiles[1].get_key());
			else
				createCookie("prev_mod", tiles[0].get_id()+'_'+tiles[0].get_key()+',flagged');

			moderate_xreq.send('action=flag&id='+tile.get_id() + '&key='+tile.get_key());
		}

		if (loaded_count >= max_count * 2)
			window.location.reload( false );
	}
}

function receive_tiles() {
	if (moderate_xreq === false)
		return;

	if (moderate_xreq.readyState == 4) {
		if (moderate_xreq.status == 200) {

			var xml = moderate_xreq.responseXML.documentElement;
			if (tiles.length != 0) {
				document.getElementById('prev_tiles').style.display = 'block';

				var tile0 = document.getElementById('prev_tile0');
				if (tiles[0].get_state != 'FLAGGED')
					tile0.style.display = 'block';
				else
					tile0.style.display = 'none';
				for (tile0 = tile0.firstChild; tile0 != null; tile0 = tile0.nextSibling) {
					if (tiles[0].get_state() == 'FLAGGED') {
						if (tile0.className == 'flagged')
							tile0.style.display = 'block';
						else
							tile0.style.display = 'none';
					}
					else {
						if (tile0.className == 'flagged')
							tile0.style.display = 'none';
						else
							tile0.style.display = 'block';

						if (tile0.className == 'prev_tile')
							tile0.src = tiles[0].get_img_url(60);
						else if (tile0.className == 'score')
							tile0.innerHTML = 'score: ' + tiles[0].get_score();
						else if (tile0.className == 'photographer')
							tile0.innerHTML = 'photographer: ' + '<a href="'+WWW+'/tile/'+tiles[0].get_id()+'/'+tiles[0].get_key()+'/">' + tiles[0].get_flickr_user_name() + '</a>';
						else if (tile0.className =='votes')
							tile0.innerHTML = 'votes for: ' + tiles[0].get_votes();
						else if (tile0.className =='total_votes')
							tile0.innerHTML = 'total votes: ' + tiles[0].get_total_votes();
					}
				}

				var tile1 = document.getElementById('prev_tile1');
				if (tiles[0].get_state != 'FLAGGED')
					tile1.style.display = 'block';
				else
					tile1.style.display = 'none';
				for (tile1 = tile1.firstChild; tile1 != null; tile1 = tile1.nextSibling) {
					if (tiles[1].get_state() == 'FLAGGED') {
						if (tile1.className == 'flagged')
							tile1.style.display = 'block';
						else
							tile1.style.display = 'none';
					}
					else {
						if (tile1.className == 'flagged')
							tile1.style.display = 'none';
						else
							tile1.style.display = 'block';

						if (tile1.className == 'prev_tile')
							tile1.src = tiles[1].get_img_url(60);
						else if (tile1.className == 'score')
							tile1.innerHTML = 'score: ' + tiles[1].get_score();
						else if (tile1.className == 'photographer')
							tile1.innerHTML = 'photographer: ' + '<a href="'+WWW+'/tile/'+tiles[1].get_id()+'/'+tiles[1].get_key()+'/">' + tiles[1].get_flickr_user_name() + '</a>';
						else if (tile1.className == 'votes')
							tile1.innerHTML = 'votes for: ' + tiles[1].get_votes();
						else if (tile1.className == 'total_votes')
							tile1.innerHTML = 'total votes: ' + tiles[1].get_total_votes();
					}
				}
			}

			tiles = new Array();
			for (xml = xml.firstChild; xml != null; xml = xml.nextSibling) {
				if (xml.nodeName.toLowerCase() == 'tile') {
					var tile = new Tile();
					tile.init(xml);
					tiles.push(tile);
				}
			}

			if(tiles.length != 2) {
				//error
				return;
			}

			var tile0 = document.getElementById('tile0');
			for (tile0 = tile0.firstChild; tile0 != null; tile0 = tile0.nextSibling) {
				if (tile0.className == 'tile') {
					tile0.src = tiles[0].get_img_url(300);
					document.getElementById('photographer0').innerHTML = '<a href="'+WWW+'/tile/'+tiles[0].get_id()+'/'+tiles[0].get_key()+'/">' + tiles[0].get_flickr_user_name() + '</a>';
					tile0.onload =	img_loaded;
				}
			}

			var tile1 = document.getElementById('tile1');
			for (tile1 = tile1.firstChild; tile1 != null; tile1 = tile1.nextSibling) {
				if (tile1.className == 'tile') {
					tile1.src = tiles[1].get_img_url(300);
					document.getElementById('photographer1').innerHTML = '<a href="'+WWW+'/tile/'+tiles[1].get_id()+'/'+tiles[1].get_key()+'/">' + tiles[1].get_flickr_user_name() + '</a>';
					tile1.onload =	img_loaded;
				}
			}
		}
	}
}

