function elem(id) {
	return document.getElementById(id);
}

function checkbox_checked(id) {
	return document.getElementById(id).checked;
}

function remove(element) {
	element.parentNode.removeChild(element);
}

var isIE = document.all?true:false;
var mouse = new Array(0,0);
document.onmousemove=getMousePosition;
function getMousePosition(mp) {
	var _x;
	var _y;
	if (isIE) {
		_x = 0;
		if(event.clientX) {
			_x += event.clientX;
		}
		if(document.body.scrollLeft) {
			_x += document.body.scrollLeft;
		} else if(document.documentElement.scrollLeft) {
			_x += document.documentElement.scrollLeft;
		}
		_y = 0;
		if(event.clientY) {
			_y += event.clientY;
		}
		if(document.body.scrollTop) {
			_y += document.body.scrollTop;
		} else if(document.documentElement.scrollTop) {
			_y += document.documentElement.scrollTop;
		}
	} else {
		_x = mp.pageX;
		_y = mp.pageY;	
	}
	mouse=new Array(_x,_y);
	return true;
}

var xmlHttp=new Array();
function ajax(script,action,query,on_succes,on_error){
	try {
		var a=0;
		while(xmlHttp[a]!=null) {
			a++;
		}
		if (window.XMLHttpRequest) {
			xmlHttp[a]=new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			xmlHttp[a]=new ActiveXObject('Microsoft.XMLHTTP');
		}
		if(xmlHttp[a]!=null) {
			xmlHttp[a].onreadystatechange=function() {
				if(xmlHttp[a].readyState==4) {
					try {
						eval(xmlHttp[a].responseText);
					} catch(e) {
						if(on_error) {
							try {
								eval(on_error);
							} catch(e) {
								alert('FATAL ERROR:\n\nERROR CATCHING FAILED: '+e.description+'\n\nIn other words:\nA piece of code which should handle the error failed and another error occurred while solving another error.');
							}
						} else {
							alert('CORRUPT RESPONSETEXT:\n\n'+xmlHttp[a].responseText+'\n\nError: '+e+'\nDescription: '+e.description);
						}
					}
					if(on_succes) {
						try {
							eval(on_succes);
						} catch(e) {
							alert('ERROR EXECUTING "ON_SUCCES" STATEMENT.');
						}
					}
					xmlHttp[a]=null;
				}
			}
			var url = 'ajax/';
			if(script) {url+=script+'.php';}
			if(action) {url+='?a='+action;}
			if(query) {
				xmlHttp[a].open('POST',url,true);
				xmlHttp[a].setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlHttp[a].send(query);
			} else {
				xmlHttp[a].open('GET',url,true);
				xmlHttp[a].send(null);
			}
		}
	} catch(e) {
		alert('FATAL ERROR:\n\naJaX communication failed:\nplease update your browser. Error: '+e+'\nDescription: '+e.description);
	}
}

function print_r(array,lfchar,wschar,lvl) {
    if(!wschar) {wschar = '  ';}
    if(!lfchar) {lfchar = '<br/>';}
    if(!lvl) {lvl = 0;}
    var output = '';
    if(typeof(array)=='object') {
        var a=0;
        output += 'array('+lfchar;
        lvl++;
        while(a<array.length) {
            output += str_repeat('  ',lvl)+'['+a+'] = '+print_r(array[a],lfchar,wschar,lvl)+lfchar;
            a++;
        }        
        lvl--;
        output += str_repeat('  ',lvl)+')';
    } else {
        output = array;
    }
    return output;
}

function str_repeat(str,times) {
    var a=0;
    output = '';
    str = str.toString();
    while(a<times) {
        output += str;
        a++;
    }
    return output;
}
