function createRequestObject() {
	var req;
	if (window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		req = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert('Problem creating the XMLHttpRequest object');
	}
	return req;
}

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		};
	}
}

function ppr(obj, recursed) {
	document.write('<pre style="margin: 1em;">' + obj);
	if (typeof(recursed) != 'object') {
		recursed = [];
	} else {
		for (var i = 0; i < recursed.length; i++) {
			if (recursed[i] == obj) {
				document.write(" <b>recursion</b></pre>");
				return false;
			}
		}
	}
	if (typeof(obj) == 'object') {
		recursed.push(obj);
		document.write('{<pre style="margin: 1em;">');
		for (var mem in obj) {
			document.write(mem + ' => ');
			ppr(obj[mem], recursed)
		}
		document.write('</pre>}');
	}
	document.write('</pre>');
	return true;
}

function getCookie(cookie_name) {
	var cookie_value = undefined;
	var cookie_start = document.cookie.indexOf(cookie_name + '='); 
	if (cookie_start != -1) {
		var cookie_end = document.cookie.indexOf(';', cookie_start);
		if (cookie_end == -1) {
			cookie_end = document.cookie.length;
		}	   
		cookie_value = document.cookie.substring(cookie_start + cookie_name.length + 1,
				cookie_end);
		try {   
			cookie_value = eval(cookie_value);
		} catch (e) {
			//just leave the value as a string if it doesn't eval
		}	   
	}
	return cookie_value;
}

function setCookie(cookie_name, cookie_value, expire_date) {
	document.cookie = cookie_name + '=' + escape(cookie_value)
			+ ';expires=' + expire_date.toGMTString()
			+ ';path=/';
	return true;
}

