/////////////////////// AJAX CODE

var http_request = false;
var response = "";
var querying = false;

function makeRequest(url, parameters)
{
    http_request = false;
    response = "";
    querying = true;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    { // IE
        try
        {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {}
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }

    http_request.onreadystatechange = alertContents;
    http_request.open('GET', url + parameters, true);
    http_request.send(null);
}

function alertContents() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            response = http_request.responseText;
        }
        else {
            alert('There was a problem with the request.');
        }
    }
}

/////////////////////////////////////////////
			function getElement(id) {
				if(document.getElementById) {
					return document.getElementById(id);
				}
				if(document.layers) {
					return document[id];
				}
				if(document.all) {
					return document.all[id];
				}
			}
/////////////////////////////////////////////

// change the filmrowexcluded CSS rule from display:none <-> display:block
function change() {
	var theRules = new Array();
	if (document.styleSheets[0].cssRules) {
		theRules = document.styleSheets[0].cssRules;
	} else if (document.styleSheets[0].rules) {
		theRules = document.styleSheets[0].rules;
	}

    for(i = 0; i < theRules.length; i++)
    {
        // find "filmrowexcluded" rule
        if(theRules[i].selectorText.toLowerCase() == "div.filmrowexcluded")
        {
            // invert the display property
            if(theRules[i].style.display == "none")
            {
                theRules[i].style.display = "block";
				setExcludeMessage(false);  
            }
            else
            {
                theRules[i].style.display = "none";
				setExcludeMessage(true);  
            }
            return;
        }
    }
}


function setExcludeMessage(exclude)
{
    var message = getElement("excludedTorrentMessage");
	if(exclude)
	{
		message.innerHTML = "<div class=includemessage onClick='change();'>Some torrents that match the search string have been marked not relevant. Click here to see them.</div>";
	}
	else
	{
		message.innerHTML = "<div class=excludemessage onClick='change();'>Some torrents that match the search string have been marked not relevant. Click here to hide them.</div>";
	}
		
}

// include/exclude a torrent from the specified search results
function changeInclusion(torrent, search)
{
		var element = getElement(torrent);
		if(!element) return;
		
		//search = unescape(search);
		
		if(element.className == "filmrow")
		{
				makeRequest("ajax/excludetorrent.php", "?torrent=" + torrent + "&search=" + search);
				var originalContent = element.innerHTML;
				element.innerHTML = "<center><img src=img/load-small.gif height=16 alt=Loading...></center>";
				updateElement(torrent, true, escape(originalContent));
				return;
		}
		else if(element.className == "filmrowexcluded")
		{
				makeRequest("ajax/includetorrent.php", "?torrent=" + torrent + "&search=" + search);
				var originalContent = element.innerHTML;
				element.innerHTML = "<center><img src=img/load-small.gif height=16 alt=Loading...></center>";
				updateElement(torrent, false, escape(originalContent));
				return;
		}

}

// update an element contents after a request comes back
// exclude = true/false 
// originalContent is what we revert to after an error, it must be escaped
function updateElement(element, exclude, originalContent)
{
		var elementObj = getElement(element);
		if(!elementObj) return;
		
		if(response == "")
		{
				// no response yet - try again later
				setTimeout("updateElement('" +element + "', " + exclude + ", '" + originalContent + "')", 100);
				return;
		}
		
		if(response.indexOf("ERROR") == 0)
		{
				elementObj.innerHTML = "<div class=ajaxerror>" + response + "</div>";
				setTimeout("setElement('" + element + "', '" + originalContent + "')", 1000);
				return;
		}
		
		setElement(element, originalContent);
		
		if(exclude)
		{
				elementObj.className = "filmrowexcluded";

				// the exclude message may not have been set yet
				var message = getElement("excludedTorrentMessage");
				if(message.innerHTML == "")
				{
						setExcludeMessage(true);
				}			
		}
		else
		{
				elementObj.className = "filmrow";
		}
}

// content must be escaped
function setElement(element, content)
{
		var elementObj = getElement(element);
		if(!elementObj) return;
		
		elementObj.innerHTML = unescape(content);
}
		