	// global xmlhttprequest object
	var xmlHttp = false;
	var objectname;
	/** AJAX functions **/
	var maincat;	
	// constants
	var REQUEST_GET        = 0;
	var REQEST_POST        = 2;
	var REQUEST_HEAD    = 1;
	var REQUEST_XML        = 3;
	
	var merkewarensort;
	var processdata;
	var initval;
	
	/**
	 * instantiates a new xmlhttprequest object
	 *
	 * @return xmlhttprequest object or false
	 */
	function getXMLRequester( )
	{
	    var xmlHttp = false;
	            
	    // try to create a new instance of the xmlhttprequest object        
	    try
	    {
	        // Internet Explorer
	        if( window.ActiveXObject )
	        {
	            for( var i = 5; i; i-- )
	            {
	                try
	                {
	                    // loading of a newer version of msxml dll (msxml3 - msxml5) failed
	                    // use fallback solution
	                    // old style msxml version independent, deprecated
	                    if( i == 2 )
	                    {
	                        xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );    
	                    }
	                    // try to use the latest msxml dll
	                    else
	                    {
	                        
	                        xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" );
	                    }  
	                    break;
	                }
	                catch( excNotLoadable )
	                {                        
	                    xmlHttp = false;
	                }
	            }
	        }
	        // Mozilla, Opera und Safari
	        else if( window.XMLHttpRequest )
	        {
	            xmlHttp = new XMLHttpRequest();
	        }
	    }
	    // loading of xmlhttp object failed
	    catch( excNotLoadable )
	    {
	        xmlHttp = false;
	    }
	    return xmlHttp ;
	}
	
	function sendRequest( strSource, strData, intType, intID )
	{

	    if( !strData )
	        strData = '';

	    // default type (0 = GET, 1 = xml, 2 = POST )
	    if( isNaN( intType ) )
	        intType = 0; // GET
	
	    // previous request not finished yet, abort it before sending a new request
	    if( xmlHttp && xmlHttp.readyState )
	    {
	        xmlHttp.abort( );
	        xmlHttp = false;
	    }
	    if( !xmlHttp )
	    {
	        xmlHttp = getXMLRequester( );
	        if( !xmlHttp )
	            return;
	    }

	    // parse query string
	    if( intType != 1 && ( strData && strData.substr( 0, 1 ) == '&' || strData.substr( 0, 1 ) == '?' ) )
	        strData = strData.substring( 1, strData.length );
	
	    // data to send using POST
	    var dataReturn = strData ? strData : strSource;
	    
	    switch( intType )
	    {
	        case 1:    // xml
	            strData = "xml=" + strData;
	        case 2: // POST
	            // open the connection
	            xmlHttp.open( "POST", strSource, true );
	            xmlHttp.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
	            xmlHttp.setRequestHeader( 'Content-length', strData.length );
	            break;
	        case 3: // HEAD
	            // open the connection 
            	xmlHttp.open( "HEAD", strSource, true );
	            strData = null;
	            break;
	        default: // GET
	            // open the connection 
				var curdate = new Date();
	            var strDataFile = strSource + (strData ? '?' + strData : '' );
				//Albert - fix for refreshing
				strDataFile =  strDataFile + (strData ? '?' : '&' ) + 'bustcache=' + curdate.getTime();
	            xmlHttp.open( "GET", strDataFile, true );
		            strData = null;
	    }
	    
	    // set onload data event-handler
	    xmlHttp.onreadystatechange = new Function( "", "processResponse(" + intID + ")" ); ;
	    // send request to serve
	    xmlHttp.send( strData );    // param = POST data
	    return dataReturn;
	}
	    
	
	/**
	 * process the response data from server
	 *
	 * @param intID, Integer, ID of this response
	 */
	function processResponse( intID )
	{
	    switch( xmlHttp.readyState )
	    {
	        // uninitialized
	      
	        case 4:    
	            // check http status
	            if( xmlHttp.status == 200)    // success
	            {
	                processData( xmlHttp, intID);
	            }
	    	        // loading not successfull, e.g. page not available
	            else
	            {
	                if( window.handleAJAXError )
	                    handleAJAXError( xmlHttp, intID );
	    	     //       else
				 //			processData( xmlHttp, intID);
                      //alert( "ERROR\n HTTP status = " + xmlHttp.status + "\n" + xmlHttp.statusText ) ;
	            }
			default:
				break;
	    }
	}
	
	/** 	End AJAX functions **/
	
