function ajaxRequest(method, url, params, response_function_call) {
	if (window.XMLHttpRequest) {
		var request = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		var request = new ActiveXObject("Microsoft.XMLHTTP");
	}

	if (method.toLowerCase() === 'get') {
		request.open('GET', url+'?'+params, true);
	} else {
		request.open('POST', url, true);
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		//request.setRequestHeader("Content-length", params.length); // no longer allowed!
		//request.setRequestHeader("Connection", "close"); // not ok either?
	}
//should be 'new Function' not eval!
    request.onreadystatechange=function() {
		if (request.readyState==4) {
			if (request.status==200) {
				eval(response_function_call+'(request.responseText, request.responseXML)');
			}
		}
	}
	if (method.toLowerCase() == 'get') {
		request.send(null);
	} else {
		request.send(params);
	}
}

//http://www.quirksmode.org/js/cookies.html#script
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

function getAssociativeLength(aa) {
	var count = 0;

	for (var i in aa) {
		count++;
	}

	return count;
}

function getElementValue(id) {
	var element = document.getElementById(id);
	if (element.nodeName.toLowerCase() == 'div') {
		return element.innerHTML;
	} else if (element.nodeName.toLowerCase() == 'select') {
		return element.options[element.selectedIndex].value;
	} else {
		return element.value;
	}
}

function getCurrentTimestamp() {
	var current_date = new Date;
	return Math.floor(current_date.getTime()/1000);
}

function getStyle(el,styleProp)
{
	var x = document.getElementById(el);
	if (x.currentStyle)
		var y = x.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
	return y;
}

function getUrlParameter(name) { //http://www.netlobo.com/url_query_string_javascript.html
	var name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null ) {
		return '';
	} else {
		return results[1];
	}
}

function parseGetStringToHash() {
	var get_parts = window.location.search.substr(1).split('&');
	var get_key_value = new Array();
	for (var x in get_parts) {
		var split_point = get_parts[x].indexOf('=');
		if (split_point > 0) {
			get_key_value[get_parts[x].substr(0, split_point)] = get_parts[x].substr(split_point+1);
		}
	}
	return get_key_value;
}

function setElementValue(id, value) {
	var element = document.getElementById(id);
	if (element.nodeName.toLowerCase() == 'div') {
		element.innerHTML = value;
	} else if (element.nodeName.toLowerCase() == 'select') {
		var index = null;
		for (var option_index in element.options) {
			if (element.options[option_index].value == value) {
				element.selectedIndex = option_index;
				break;
			}
		}
	} else {
		element.value = value;
	}
}


