function getXhr() {
	var xhr;
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try { xhr = new XMLHttpRequest(); }
    	catch(e) {
   	    	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
   		}
    } else if(window.ActiveXObject) {
       	try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); }
       	catch(e) {
       	    try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
       	    catch(e) {
       	    	alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
       	    	xhr = false;
      	   	}
		}
    }
    return xhr;
}

function sendAjaxCommand(url, params, oncomplete) {
	var xhr = getXhr();
	if (xhr) {
		xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					if (oncomplete) {
						if (xhr.responseXML) {
							oncomplete(xhr.responseXML, url, params);
						} else {
							oncomplete(xhr.responseText, url, params);
						}
					}
				} else if (xhr.readyState == 4) {
					alert("Error " + xhr.status + ", please try again!");
				}
			}
     	xhr.open("POST", url, true);
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xhr.setRequestHeader("Content-Length", params.length);
		xhr.setRequestHeader("Connection", "close");
		xhr.send(params);
	}
}

function sendAjaxCommandB(url, params, oncomplete) {
	var xhr = getXhr();
	if (xhr) {
		xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					if (oncomplete) {
						oncomplete(eval("(" + xhr.responseText + ")"), url, params);
					}
				} else if (xhr.readyState == 4) {
					alert("Error " + xhr.status + ", please try again!");
				}
			}
			
		params = encodeData(params);
     	xhr.open("POST", url, true);
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xhr.setRequestHeader("Content-Length", params.length);
		xhr.setRequestHeader("Connection", "close");
		xhr.send(params);
	}
}

function sendAjaxCommandC(url, params, oncomplete) {
	var xhr = getXhr();
	if (xhr) {
		xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					if (oncomplete) {
						oncomplete(xhr.responseText, url, params);
					}
				} else if (xhr.readyState == 4) {
					alert("Error " + xhr.status + ", please try again!");
				}
			}
     	xhr.open("POST", url, true);
		xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xhr.setRequestHeader("Content-Length", params.length);
		xhr.setRequestHeader("Connection", "close");
		xhr.send(params);
	}
}

function encodeData(params) {
	var str = "";
	for (var key in params) {
		str += "&" + key + "=" + encodeURIComponent(params[key]);
	}
	return str.substring(1);
}

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

function find(obj, member) {
	var res;
	if (typeof(obj) == 'object') {
		for (var key in obj) {
			if (key == member) {
				return obj[key];
			} else if (typeof(obj[key]) == 'object') {
				res = find(obj[key], member);
				if (res) {
					return res;
				}
			}
		}
		return false;
	} else {
		return false;
	}
}

function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;

//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += "        ";

if(typeof(arr) == 'object') { //Array/Hashes/Objects
 for(var item in arr) {
  var value = arr[item];
 
  if(typeof(value) == 'object') { //If it is an array,
   dumped_text += level_padding + "'" + item + "' ...\n";
   dumped_text += dump(value,level+1);
  } else {
   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
  }
 }
} else { //Stings/Chars/Numbers etc.
 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
} 

function doNothing(nothing) {}
function donothing(nothing) {}
