var globalError = false;

function AutoAjax() {
  //alert('1');
  //Eigenschaften deklarieren und initialisieren
  this.url="";
  this.params="";
  this.method="GET";
  this.onSuccess=null;
  this.onError=function (msg) {
    alert(msg);
  }
}

AutoAjax.prototype.doRequest=function() {
  //Ueberpruefen der Angaben
  if (!this.url) {
    this.onError("Es wurde kein URL angegeben. Der Request wird abgebrochen.");
    return false;
  }

  if (!this.method) {
    this.method="GET";
  } else {
    this.method=this.method.toUpperCase();
  }

  //Zugriff auf Klasse für readyStateHandler ermoeglichen  
  var _this = this;
  
  //XMLHttpRequest-Objekt erstellen
  var xmlHttpRequest=getXMLHttpRequest();
  if (!xmlHttpRequest) {
    this.onError("Es konnte kein XMLHttpRequest-Objekt erstellt werden.");
    return false;
  }
  
  //Fallunterscheidung nach Uebertragungsmethode
  switch (this.method) {
    case "GET": xmlHttpRequest.open(this.method, this.url+"?"+this.params, true);
                xmlHttpRequest.onreadystatechange = readyStateHandler;
                xmlHttpRequest.send(null);
                break;
    case "POST": xmlHttpRequest.open(this.method, this.url, true);
                 xmlHttpRequest.onreadystatechange = readyStateHandler;
                 xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
				 xmlHttpRequest.setRequestHeader('Content-Length', this.params.length);
				 //xmlHttpRequest.setRequestHeader('Content-Type', 'text/xml');
                 xmlHttpRequest.send(this.params);
                 break;
  }  

  //Private Methode zur Verarbeitung der erhaltenen Daten
  function readyStateHandler() {
	if(xmlHttpRequest != null) {
      if (xmlHttpRequest.readyState < 4) {
        return false;
      }
      if (xmlHttpRequest.status == 200 || xmlHttpRequest.status==304) {
        if (_this.onSuccess) {
          _this.onSuccess(xmlHttpRequest.responseText, xmlHttpRequest.responseXML);		
        }
      } else {
        if (_this.onError) {
          _this.onError("["+xmlHttpRequest.status+" "+xmlHttpRequest.statusText+"] Es trat ein Fehler bei der Datenbertragung auf.");
		  return false;
        }
      }
	  return true;
	}

	return false;
  }

  return true;
}

function getXMLHttpRequest() 
{
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {   
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {	  
      try {     
        return new ActiveXObject("Microsoft.XMLHTTP");  
      } catch (e) {
        return null;
      }
    }
  }
  return false;
}

function autoHasError(msg) {
  if(!msg)  return false;
  
  if(msg.indexOf("ERROR:") == 0)  return true;
  else                            return false;
}

function autoGetError(msg) {
  return msg.replace(/ERROR:/,"");
}





function autoTrim(s) {
  while (s.substring(0,1) == ' ') {
    s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ') {
    s = s.substring(0,s.length-1);
  }
  return s;
}

function getAutoMatches( searchString, field, modul ) {
  if(trim(searchString).length > 1) {
	  if(autoTrim(document.getElementById('auto_'+field).value) == "")
		document.getElementById('autovalue_'+field).value = "empty";

	  var ajax = new AutoAjax();
	  ajax.method = 'POST';
	  ajax.url = 'index.php';
	  ajax.params  = 'pageID=105&field='+field+'&modul='+modul+'&search='+encodeURIComponent(searchString)+'&fwd=true';
	  //document.write(ajax.params);
	  var content = document.getElementById('autobox_'+field);

	  ajax.onSuccess = function(txt,xml) {   
		if(autoHasError(autoTrim(txt))) {	  
		  ajax.onError(autoGetError(txt));
		  return false;
		}
		else {	  
		  content.innerHTML = autoTrim(txt);
		  content.style.display = '';
		  return false;
		}
	  }

	  ajax.doRequest();
  }
  else
	hideAutoMatches( field );

  return false;
}

function hideAutoMatches( field ) {
  if(document.getElementById('autobox_'+field) != null) {
	document.getElementById('autobox_'+field).style.display = 'none';
  }

  return false;
}

function setAutoMatch( field, data, value ) {
  document.getElementById('auto_'+field).value = data;  
  document.getElementById('autovalue_'+field).value = value;
  //alert(document.getElementsByName(field)[0].value);

/*  if(document.registration != null)
	eval("document.registration."+field+".value = value;");
  else if(document.update != null)
	eval("document.update."+field+".value = value;");
  else
	return false;*/

  if(document.getElementById('autovalue_'+field).value == value && document.getElementById('auto_'+field).value == data) {
    hideAutoMatches( field );
  }
  else
	return setAutoMatch( field, data, value );

  return false;
}

function checkAutoComplete( usedForm ) {
  for( var i=0; i<usedForm.elements.length; i++ ) {
	if(usedForm.elements[i].name.match(/autoname\_/)) {
	  var objectName = usedForm.elements[i].name.replace(/autoname\_/g, '');	  
	  var objectValue = trim(usedForm.elements[i].value);
	  var objectModul = document.getElementById('automodul_'+objectName).value;
	  //alert(objectName+', '+objectValue+', '+objectModul);
	  checkAuto(objectValue, objectName, objectModul);

	  if(trim(usedForm.elements[i].value) != '' && trim(document.getElementById('autovalue_'+objectName).value) == 'empty')
		return false;
	}
  }

  return true;
}

function checkAuto( searchString, field, modul ) {
  if(document.getElementById('auto_'+field) != null) {
	var regionValue = '';

	if(trim(document.getElementById('auto_'+field).value) != "")
	  regionValue = trim(document.getElementById('auto_'+field).value);
		
	if(trim(regionValue) == '') {
	  document.getElementById('autovalue_'+field).value = "empty";
	  return true;
	}

	var ajax = new AutoAjax();
	ajax.method = 'POST';
	ajax.url = 'index.php';
	ajax.params  = 'pageID=105&field='+field+'&modul='+modul+'&search='+encodeURIComponent(searchString)+'&mode=check&fwd=true';

	ajax.onSuccess = function(txt,xml) {   
	  if(autoHasError(trim(txt))) {	  	
		ajax.onError(autoGetError(txt));
		document.getElementById('autovalue_'+field).value = "empty";
		//document.getElementById('auto_'+field).value = "";		
		return false;
	  }
	  else {	  			  
		document.getElementById('autovalue_'+field).value = trim(txt);		
		return false;
	  }
	}

	ajax.doRequest();
	return false;
  }
  else
	return true;
}