// global xmlhttprequest object
var xmlHttp = false;

// Nur wer Firebug installiert hat, sieht Fehlermeldungen
// Folgender Code dient ausschließlich dazu, eien Fehlermeldung zu verhindern
// falls Firebug nicht installiert ist.
if (!console) {
	var console = {};
	console.debug = function(strMessage) {
		alert(strMessage);
	}
	console.log = console.debug;
	console.info = console.debug;
	console.warn = console.debug;
	console.error = console.debug;
}

/** AJAX functions **/
// constants
var REQUEST_GET		= 0;
var REQEST_POST		= 2;
var REQUEST_HEAD	= 1;
var REQUEST_XML		= 3;

/**
 * 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" );	
					}else{
						// try to use the latest msxml dll
						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 ;
}


/**
 * sends a http request to server
 *
 * @param strSource, String, datasource on server, e.g. data.php
 *
 * @param strData, String, data to send to server, optionally
 *
 * @param intType, Integer,request type, possible values: REQUEST_GET, REQUEST_POST, REQUEST_XML, REQUEST_HEAD default REQUEST_GET
 *
 * @param strData, Integer, ID of this request, will be given to registered event handler onreadystatechange', optionally
 *
 * @return String, request data or data source
 */
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;
	}

	// create a new instance of xmlhttprequest object
	// if it fails, return
	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 strDataFile = strSource + (strData ? '?' + strData : '' );
			xmlHttp.open( "GET", strDataFile, true );
			strData = null;
	}

	// set onload data event-handler
	xmlHttp.onreadystatechange = new Function( "", "processResponse(" + intID + ")" ); ;

	// send request to server
	xmlHttp.send( strData );	// param = POST data

	return dataReturn;
}


/**
 * process the response data from server
 *
 * @param intID, Integer, ID of this response
 */
function processResponse( intID )
{
	// status 0 UNINITIALIZED open() has not been called yet.
	// status 1 LOADING send() has not been called yet.
	// status 2 LOADED send() has been called, headers and status are available.
	// status 3 INTERACTIVE Downloading, responseText holds the partial data.
	// status 4 COMPLETED Finished with all operations.
	switch( xmlHttp.readyState )
	{
		// uninitialized
		case 0:
			// loading
		case 1:
			// loaded
		case 2:
			// interactive
		case 3:
			break;
			// complete
		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
					alert( "ERROR\n HTTP status = " + xmlHttp.status + "\n" + xmlHttp.statusText ) ;
			}
	}
}

/** End AJAX functions **/



/** real application functions **/

var targetId;
var targetType;

// process data from server
function processData( xmlHttp, intID )
{
  //console.debug(xmlHttp.responseText);
	// process text data
	if(targetType){
		if(targetType == "Text" ){
			updateTextNode(targetId, xmlHttp.responseText);
		}
		if(targetType == "Options"){
			updateOptions(targetId, xmlHttp.responseText);
		}
	}else{
		alert("No targetType specified");
	}
	//updateTextNode( xmlHttp.responseText );
}

// create the resulting GET-URL
function createURL( objSelect, xtraParms )
{
	var strURL = "/reifentestcom/cgi-bin/reifen-fill.pl?type=" + targetType + "&" +
        objSelect.id + "=" +
        objSelect.options[ objSelect.options.selectedIndex ].value;
	if( xtraParms )
	{
		strURL = strURL + "&" + xtraParms;
	}
	return strURL;
}

// called via onchange() on a select-box
function setText( objSelect, tId, xtraParms )
{
	targetId = tId;
	targetType = "Text";
	sendRequest( createURL( objSelect, xtraParms ) );
}

// called via onchange() on a select-box
function setOptions( objSelect, tId, xtraParms )
{
	targetId = tId;
	targetType = "Options";
	sendRequest( createURL( objSelect, xtraParms ) );
}

// called via onchange() on a select-box
function setAttrVals( objSelect, tId, xtraParms )
{
	targetId = tId;
	targetType = "Options";
	sendRequest( createURL( objSelect, xtraParms ) );
}

function get_Modell(objForm,objSelect, tId, xtraParms){
 //objForm.fahrzeugtyp2.option[0].value = '';
 setAttrVals( objSelect, tId, xtraParms );
}




function get_Marke(objForm,objSelect, tId, xtraParms){
 //objForm.fahrzeugtyp2.option[0].value = '';
 //if(objForm.sondersuche.value != ''){
  setAttrVals( objSelect, tId, xtraParms );
  objForm.fahrzeugtyp.length = 1;
  objForm.fahrzeugtyp.disabled = 'false';
 //}
}


// process data from server, updates second select menu
function updateTextNode( tId, strData )
{
	if( strData )
	{
		var objDiv = document.getElementById( tId );
		var textObj = document.createTextNode( strData );
		objDiv.appendChild( textObj );
		document.getElementById( tId ).style.visibility = "visible";
	}
}

// data from server comes with this format: value=data&value=data...
function updateOptions( tId, strData )
{
    if(strData == 'ERROR'){
     //document.getElementById( tId ).style.visibility = "visible";
     var objSelect = document.getElementById( tId );
     objSelect.options.length = 0;
     document.getElementById( tId ).disabled = true;
     dobjSelect.options[0] = new Option( '--', '', false, false );  
    }
    else if( strData )
    {
        var arrOptions = strData.split( "\n" );
        var arrOption;
        var objSelect = document.getElementById( tId );
        objSelect.options.length = 0;
        objSelect.options[0] = new Option( '--', '', false, false ); 
       
        for( var i = 0; i < arrOptions.length; i++ )
        {   
            var optionr = i + 1 ;
            arrOption = arrOptions[ i ].split( '=' );
            objSelect.options[ optionr ] = new Option( arrOption[ 1 ], arrOption[ 0 ], false, false );
        }
        
        document.getElementById( tId ).style.visibility = "visible";
        document.getElementById( tId ).disabled = false;
	}
}


