
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

/**
 * @author	Marcel Werk
 * @copyright	2001-2007 WoltLab GmbH
 * @license	GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
 */
function AjaxRequest() {
	this.xmlHttpRequest = null;
	this.response = null;
	
	/**
	 * Starts a new post ajax request.
	 */
	this.openPost = function(url, postData, callbackFunction) {
		url = fixURL(url);
		if (this.openXMLHttpRequest(callbackFunction)) {
			this.xmlHttpRequest.open('POST', url, true);
			this.xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			this.xmlHttpRequest.send(postData);
			return true;
		}
		return false;
	}
	
	/**
	 * Starts a new get ajax request.
	 */
	this.openGet = function(url, callbackFunction) {
		url = fixURL(url);
		if (this.openXMLHttpRequest(callbackFunction)) {
			this.xmlHttpRequest.open('GET', url, true);
			this.xmlHttpRequest.send(null);
			return true;
		}
		return false;
	}
	
	/**
	 * Opens a new XMLHttpRequest.
	 */
	this.openXMLHttpRequest = function(callbackFunction) {
		if (this.xmlHttpRequest) {
			if (this.xmlHttpRequest.readyState != 0 && this.xmlHttpRequest.readyState != 4) {
				return false;
			}
		
			this.xmlHttpRequest.abort();
		}
		
		// Internet Explorer
		try {
			this.xmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch (e) {
			try {
				this.xmlHttpRequest = new ActiveXObject('Microsoft.XMLHTTP');
			} 
			catch (e) {
				this.xmlHttpRequest  = null;
			}
		}
		
		// Mozilla, Opera und Safari
		if (!this.xmlHttpRequest) {
			if (typeof XMLHttpRequest != 'undefined') {
				this.xmlHttpRequest = new XMLHttpRequest();
				if (this.xmlHttpRequest.overrideMimeType) {
					this.xmlHttpRequest.overrideMimeType('text/xml');
				}
			}
			else {
				return false;
			}
		}
		
		// add event listener
		if (callbackFunction) {
			this.xmlHttpRequest.onreadystatechange = callbackFunction;
		}
		else {
			this.xmlHttpRequest.onreadystatechange = this.handleResponse;
			if (this.xmlHttpRequest.overrideMimeType) {               
				this.xmlHttpRequest.overrideMimeType('text/plain');
			}
		}
		
		return true;
	}

	/**
	 * Handles the response of the called script.
	 */
	this.handleResponse = function() {
		if (this.readyState == 4) {
			if (this.status != 200) {
				// throw an exception
				//alert('ajax request http error '+this.status);
			}
			else if (this.responseText != '') {
				// debug output
				//alert(this.responseText);
			}
		}
	}
}
