
var KEYUP_TIMEOUT = 500;

var request = null;
var error_handler = '';

var AJAX_OP_COMPLETED = 0;
var AJAX_ERROR = 1;
var AJAX_CRITICAL_ERROR = 2;

var AJAX_DEBUG_RESULTS = 0;
var AJAX_DEBUG_REQUEST_ERRORS = 0;
var AJAX_DEBUG_HTML_ERRORS = 0;

if (window.XMLHttpRequest)
{
	var tempvar = new XMLHttpRequest();
	ajax_core_defined = (tempvar == null) ? 0 : 1;
	delete(tempvar);
}

else if (window.ActiveXObject)
{
	var tempvar= new ActiveXObject("Microsoft.XMLHTTP");
	ajax_core_defined = (tempvar == null) ? 0 : 1;
	delete(tempvar);
}
else
{
	ajax_core_defined = 0;
}

function loadXMLDoc(url, params, submitmethod, changehandler)
{
	if ((submitmethod != 'GET') && (submitmethod != 'POST'))
	{
		submitmethod = 'GET';
	}
	
	if (window.XMLHttpRequest)
	{
		request = new XMLHttpRequest();
		var is_activex = false;
	}

	else if (window.ActiveXObject)
	{
		request = new ActiveXObject("Microsoft.XMLHTTP");
		var is_activex = true;
	}
	
	if (!request)
	{
		return false;
	}
	
	eval("request.onreadystatechange = "+changehandler);
	if (submitmethod == 'POST')
	{
		request.open(submitmethod, url, true);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-1');
		request.send(params);
	}
	else
	{
		request.open(submitmethod, url + '?' + params, true);
		request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=iso-8859-1');
		if (is_activex)
		{
			request.send();
		}
		else
		{
			request.send(null);
		}
	}
	
	return true;
}

function getTagValues(tagname, haystack)
{
	var tag_array = haystack.getElementsByTagName(tagname);
	var result_array = Array();
	for (i = 0; i < tag_array.length; i++)
	{
		result_array[i] = (tag_array[i].firstChild && tag_array[i].firstChild.data) ? tag_array[i].firstChild.data : '';
	}
	return result_array;
}

function getFirstTagValue(tagname, haystack)
{
	var tag_array = haystack.getElementsByTagName(tagname);
	if ((tag_array.length > 0) && (tag_array[0].firstChild))
	{
		return (tag_array[0].firstChild.data) ? tag_array[0].firstChild.data : '';
	}
	return '';
}

function error_req_change()
{
	if (request.readyState == 4)
	{
		var result_code = AJAX_OP_COMPLETED;
		var error_msg = '';

		if (request.status == 200)
		{
			var response = request.responseXML.documentElement;
			if (AJAX_DEBUG_RESULTS)
			{
				alert(request.responseText);
			}

			if (response != null)
			{
				result_code = getFirstTagValue('result', response);
				error_msg = getFirstTagValue('error_msg', response);
			}
		}
		
		eval(error_handler+"(result_code, error_msg);");
		delete request;
	}
}

function sprintf(text, replacements)
{
	var i = 0;

	if ((typeof replacements) != 'object')
	{
		var repl = Array(1);
		repl[0] = replacements;
	}
	else
	{
		var repl = replacements;
	}
	
	while (((charindex = text.indexOf('%s')) >= 0) && (i < repl.length))
	{
		var temptext = text.substr(0, charindex);
		text = temptext + repl[i] + text.substr(charindex+2, text.length);
		i++;
	}
	
	return text;
}

function getElementById(ElementId)
{
	if (document.documentElement)
	{
		return document.getElementById(ElementId);
	}
	else
	{
		return document.all[ElementId];
	}
}

function rtrim(text)
{
	if (text == '')
	{
		return '';
	}
	
	var part = '';
	var i = text.length;
	do
	{
		part = text.substring(i-1, i);
		i--;
	} while ((part == ' ') || (part == '\n') || (part == '\r'));
	text = text.substring(0, i+1);
	
	return text;
}
	
function ltrim(text)
{
	if (text == '')
	{
		return '';
	}
	
	var part = '';
	var i = 0;
	do
	{
		part = text.substring(i, i+1);
		i++;
	} while ((part == ' ') || (part == '\n') || (part == '\r'));
	text = text.substring(i-1, text.length);
	
	return text;
}

function trim(text)
{
	return ltrim(rtrim(text));
}

function strim(text)
{
	text.replace(/(^\s+|\s+$)/, "");
	text.replace(/( ){2,}/, " ");
	return text;
}

function setClickEventHandler(obj, handler)
{
	if (obj.onclick)
	{
		eval('obj.onclick = function() { '+handler+' }');
	}
	else
	{
		obj.setAttribute('onclick', handler, 'false');
	}
}

function setInnerText(obj, newtext)
{
	if (newtext == '')
	{
		newtext = '&nbsp;';
	}
	
	if (obj.innerText)
	{
		obj.innerText = newtext;
	}
	else if (obj.firstChild)
	{
		obj.firstChild.nodeValue = newtext;
	}
	else
	{
		obj.innerHTML = newtext;
	}
}

function setInnerHTML(obj, newtext)
{
	if (newtext == '')
	{
		newtext = '&nbsp;';
	}
	
	if (obj.innerHTML)
	{
		obj.innerHTML = newtext;
	}
	else if (obj.firstChild)
	{
		obj.firstChild.nodeValue = newtext;
	}
	else
	{
		obj.innerText = newtext;
	}
}

// Separate escaping function to fix bug with + signs in QuickEdit and QuickPreview
function ajax_escape(text)
{
	return escape(text).replace(/(\+)/g, "%2b");
}

// This function is a workaround for long posts being truncated in PITA browsers
function parseResult(response)
{
	var res = response.match(/\<response\>((.|\s)+?)\<\/response\>/gm);
	var fields = new Array();
	if (res != null)
	{
		contents = RegExp.$1;
		res = contents.match(/\<.+?\>((.|\s)+?)\<\/.+?\>/gm);
		if (res == null)
		{
			return fields;
		}
		
		for (var i = 0; i < res.length; i++)
		{
			var field = new Array();
			res[i].match(/^\<(.+?)\>/g);
			field.push(RegExp.$1);
			res[i].match(/\<.+?\>((.|\s)+)\<\/.+?\>/gm);
			field.push(unhtmlspecialchars(RegExp.$1));
			
			fields.push(field)
		}
	}
	
	return fields;
}

function unhtmlspecialchars(text)
{
	text = text.replace(/&quot;/g, '"');
	text = text.replace(/&lt;/g, '<');
	text = text.replace(/&gt;/g, '>');
	text = text.replace(/&amp;/g, '&');
	
	return text;
}

function utf8_decode(text)
{
	while (res = text.match(/&#(\d{1,4});/))
	{
		num = res[0];
		pos = text.indexOf(num);
		if (pos == -1)
		{
			return text;
		}
		
		text = text.substring(0, pos) + unescape('%u' + parseInt(num.substring(2, num.length-1)).toString(16)) + text.substring(pos+num.length, text.length);
	}
	
	return text;
}

