function getElementsByClass( searchClass, domNode, tagName)
{
	if (domNode == null) domNode = document;
	if (tagName == null) tagName = '*';
	var el = new Array();
	var tags = domNode.getElementsByTagName(tagName);
	var tcl = " "+searchClass+" ";
	for(i=0,j=0; i<tags.length; i++) {
		var test = " " + tags[i].className + " ";
		if (test.indexOf(tcl) != -1)
			el[j++] = tags[i];
	}
	return el;
}

function AjaxCall(callback)
{
	this.xmlhttpCreate = function() {
		var req = false;
		if (window.XMLHttpRequest) // if Mozilla, Safari etc
		{ 
			req = new XMLHttpRequest();
			if (req.overrideMimeType) req.overrideMimeType("text/xml");
		}
		else 
		{
			if (window.ActiveXObject)
			{ // if IE
				try 
				{
					req = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch (e)
				{
					try
					{
						req = new ActiveXObject("Microsoft.XMLHTTP");
					}
					catch (e){}
				}
			}
		}
		if (! req)
		{
			alert("XMLHttpRequest could not be created.");
			return false;
		}
		return req;
	}
	this.xmlhttp = this.xmlhttpCreate();
	this.callback = callback;
}
	
	
function AjaxSupport()
{
	this.mainajaxcall = 0;
	this.id = '';

this.post = function(url, callback)
{
	if (this.id)
		url += "&id="+escape(this.id);
	var ajaxcall = new AjaxCall(callback) 
		
	ajaxcall.xmlhttp.open("POST", "/support/process.php", true);
	ajaxcall.xmlhttp.onreadystatechange = function () {anon_req_callback_catch();};
	ajaxcall.xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	ajaxcall.xmlhttp.send(url);
	this.mainajaxcall = ajaxcall;
}

this.req_callback_catch = function()
	{
		var ajaxcall = this.mainajaxcall;
		if (! ajaxcall) return false;
		if (ajaxcall.xmlhttp.readyState != 4) return false;
		if (ajaxcall.xmlhttp.status != 200)
		{
			alert("There was a problem with the request. Status Code: " + ajaxcall.xmlhttp.status);
			return false;
		}
		var doc = unescape(ajaxcall.xmlhttp.responseText);
//		if (ajaxcall.object) ajaxcall.callback.call(ajaxcall.object, doc);
		ajaxcall.callback.call(this, doc);
		
	}

this.interact = function(action, callback)
{
	if (!action)
		action = 'viewall';
	if (!callback)
		callback = function(response) {alert(response);};
	url = "action="+escape(action);
	if (action == "reply")
		url += "&author="+escape(document.getElementById("author").value)+"&message="+escape(document.getElementById("message").value);
	else if (action == "add")
	{
		url += "&author="+escape(document.getElementById("author").value)+"&message="+escape(document.getElementById("message").value)+"&title="+escape(document.getElementById("title").value)+"&email="+escape(document.getElementById("email").value)+"&url="+escape(document.getElementById("url").value);
		departments = document.getElementsByName("Department");
		i = 0;
		while (departments[i])
		{
			if (departments[i].checked)
				url += "&department="+escape(departments[i].value);
			i++;
		}
		priority = document.getElementById("priority");
		url += "&priority="+escape(priority.options[priority.selectedIndex].value);
	}
	else if (action == "login")
		url += "&uname="+escape(document.getElementById("uname").value)+"&pass="+escape(document.getElementById("pass").value);
	else if (action == "userdel")
		url += "&uname="+escape(document.getElementById("uname_del").value);
	else if (action == "register")
	{
		department = document.getElementById("department_reg");
		url += "&uname="+escape(document.getElementById("uname_reg").value)+"&pass="+escape(document.getElementById("pass_reg").value)+"&email="+escape(document.getElementById("email_reg").value)+"&department="+escape(department.options[department.selectedIndex].value);
	}
	else if (action == "solve")	
	{
		var problems = new Array();
		problems = getElementsByClass("problem", document, "input");
		i = 0;
		while (problems[i])
		{
			if (problems[i].checked)
				this.id = problems[i].id;
			i++;
		}
	}
	else if (action == "delete")	
	{
		var problems = new Array();
		problems = getElementsByClass("problem", document, "input");
		i = 0;
		while (problems[i])
		{
			if (problems[i].checked)
				this.id = problems[i].id;
			i++;
		}
	}
	else if (action == "responsible")	
	{
		var problems = new Array();
		problems = getElementsByClass("problem", document, "input");
		i = 0;
		while (problems[i])
		{
			if (problems[i].checked)
				this.id = problems[i].id;
			i++;
		}
	}
	else if (action == "viewmode")	
	{
		mode = document.getElementById("viewmode");
		currentmode = mode.options[mode.selectedIndex].value;
		if (currentmode == "all")
			url = "action="+escape("viewall");
		else
			url += "&mode="+escape(currentmode);
	}
	this.post(url, callback);
}

}

function anon_req_callback_catch()
{
	as.req_callback_catch();
}

var as = new AjaxSupport();
