var http_request 	= false;

function getAjaxUrl(url, functionResult){
	var requestObjectOwn = doAjaxRequest(url, '', functionResult, '')
}

function doAjaxRequest(url, requestName, functionName) {
	requestName = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		try {
			requestName = new XMLHttpRequest();
		} catch (e) {
		}
		if (requestName.overrideMimeType) {
			requestName.overrideMimeType('text/xml');
			// zu dieser Zeile siehe weiter unten
		}
	} else if (window.ActiveXObject) { // IE
		try {
			requestName = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				requestName = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	
	if (!requestName) {
		alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
		return false;
	}
	
	//alert(url)
	requestName.open('GET', url, true);
	
	wShowMessagebox('checkMessageBoxPage', 'Statusmeldung', 'Vorgang läuft, bitte haben Sie einen Moment Geduld!', '', 'install', '');
	
	requestName.onreadystatechange = function () {
		doAjaxRequestResponse(functionName, requestName);
	};
	
	requestName.send(null);
}

function doAjaxRequestResponse(functionName, requestName) {
	if(requestName.readyState == 4) {
		if(requestName.status == 200) {
			setTimeout('hideMessagebox()',500);
			functionName(requestName.responseText);
			//wurde einfach nur ausgeführt
		} else {
			//alert('Bei dem Request ist ein Problem aufgetreten.');
		}
	}
}

function checkMigrationForm(form){
  var isObligation = /\|\w*o\w*$/i;  //Pflichtfeld, wenn Feldname am Schluss |o  enthaelt   (z.B.: "Strasse|o")
  var isEmail      = /\|\w*e\w*$/i;  //Emailfeld wenn Feldname am Schluss |e enthaelt       (z.B.: "eMail|e")
          													 //Pflicht- und Emailfeld, wenn am Schluss |oe oder |eo (z.B.: "eMail|eo") 
  var isUser = /\|\w*u\w*$/i;  			 //Pflichtfeld, mit gültigem Username |u   (z.B.: "username|u")

  var messageObligation = " ist ein Pflichtfeld, "
  var messageEmail 			= " muss eine gültige E-Mail sein, "
  var checkEmail   			= /.*\@.*\.\w+/i;
  var formElement;
  var formElementNameOrig;
  var elementStr;
  var alertStr = "";
  
  var returnStr 		= "";
  var returnErrArr 	= new Array();
  var returnOKArr = new Array();
  
  var radioButtonName 		= "";
  var checkboxButtonName 	= "";

  for(var i = 0; i <= form.elements.length - 1; i++){
    var formElement = form.elements[i];
    var formElementPrev = (i > 0 && form.elements[i-1]) ? form.elements[i-1] : false;
    var formElementNext = (i <= form.elements.length && form.elements[i+1]) ? form.elements[i+1] : false;
    if(formElement){
      formElementNameOrig = formElement.name.replace(/\|\w+/, '');
      //alert(formElementNameOrig);
      if(formElement.title == ""){
        elementStr = formElementNameOrig;
      } else{
        elementStr = formElement.title;
      }
      
      //alert(formElementNameOrig+"\n"+formElement.type+"\n"+formElement.value);

      if(formElement.type == "text" || formElement.type == "textarea" || formElement.type == "select-one" || formElement.type == "password" || formElement.type == "file") {
        var formElementOK = true;
      	if(isObligation.test(formElement.name) == true){  
          if(formElement.value == ""){
            alertStr += elementStr + messageObligation;   
            returnErrArr.push(formElementNameOrig);
            formElementOK = false;
          }
        }
        if(isEmail.test(formElement.name) == true){  
        	//alert(formElement.value);
          if(formElement.value != "" && checkEmail.test(formElement.value) == false){
            alertStr += elementStr + messageEmail;
            returnErrArr.push(formElementNameOrig);
            formElementOK = false;
          }
        }
        if(isUser.test(formElement.name) == true){
          if(formElement.value == ""){
            alertStr += elementStr + messageObligation;   
            returnErrArr.push(formElementNameOrig);
            formElementOK = false;
          } else {
				  	if(jQuery('#'+formElementNameOrig)) {
				  		var newUsername = correctWeblicationUsername(formElement.value);
					  	jQuery('#'+formElementNameOrig).attr('value', newUsername);
				  	}
          }
        }
        if(formElementOK == true){
        	returnStr += ((returnStr != '') ? "&" : "") + formElement.name+"="+encodeURIComponent(formElement.value);
        	//returnStr += ((returnStr != '') ? "&" : "") + formElementNameOrig+"="+encodeURIComponent(formElement.value);
        	returnOKArr.push(formElementNameOrig);
        }
      } else if(formElement.type == "checkbox") {
        formElementNameOrig = formElement.name.replace(/\|\w+/, '');
        formElementNameCheck = formElementNameOrig.replace(/^\d+_/, '');
		    var formElementOK 			= false;
        var formElementMultiple = false;
        if(isObligation.test(formElement.name) == true){
        	var formElementPrevNameCheck = "";
        	var formElementNextNameCheck = "";
        	if(formElementPrev != false) {
        		formElementPrevNameOrig 	= formElementPrev.name.replace(/\|\w+/, '');
        		formElementPrevNameCheck 	= formElementPrevNameOrig.replace(/^\d+_/, '');
        		if(formElementNameCheck == formElementPrevNameCheck) {
        			formElementMultiple = true;
        		}
        	}
        	if(formElementNext != false) {
        		formElementNextNameOrig 	= formElementNext.name.replace(/\|\w+/, '');
        		formElementNextNameCheck 	= formElementNextNameOrig.replace(/^\d+_/, '');
        		if(formElementNameCheck == formElementNextNameCheck) {
        			formElementMultiple = true;
        		}
        	}
        	//alert(formElementNameCheck+"\n"+formElementPrevNameCheck+"\n"+formElementNextNameCheck);

        	//Zusammenhängede Checkboxen prüfen
        	if(formElementMultiple == true) {
        		if(checkboxButtonName != formElementNameCheck) {
        			checkboxButtonName = formElementNameCheck;
	        		for(var k=0; k<=form.elements.length - 1; k++){
	        			var formElementCheckName 	= form.elements[k].name.replace(/\|\w+/, '');
	        			formElementCheckName 			= formElementCheckName.replace(/^\d+_/, '');
	        			if(formElementNameCheck == formElementCheckName) {
	        				if(form.elements[k].checked == true) {
	        					formElementOK = true;
	        				}
	        			}
							}
	        		if(formElementOK == false){
		            alertStr += elementStr + messageObligation;
		            returnErrArr.push(formElementNameCheck);
	        		}
        		}
	        //Einzelne Checkbox prüfen
        	} else {
	          if(formElement.checked == false){
	            alertStr += elementStr + messageObligation;
	            returnErrArr.push(formElementNameOrig);
	          } else {
	          	formElementOK = true;
	          }
        	}
        }
        if(formElementOK == true){
        	returnStr += ((returnStr != '') ? "&" : "") + formElement.name+"="+encodeURIComponent(formElement.value);
        	//returnStr += ((returnStr != '') ? "&" : "") + formElementNameOrig+"="+encodeURIComponent(formElement.value);
        	returnOKArr.push(formElementNameCheck);
        }
	    } else if(formElement.type == "radio") {
        if(radioButtonName != formElement.name){
          radioButtonName = formElement.name;
          var radioButtons = document.getElementsByName(formElement.name);
          formElementNameOrig = formElement.name.replace(/\|\w+/, ''); 	  
          var isChecked = false;
          var radioVal 	= "";
          for(j = 0; j < radioButtons.length; j++){
            if(radioButtons[j].checked == true){
              isChecked = true
              radioVal = radioButtons[j].value;
            }
          }
          if(isObligation.test(formElement.name) == true){ 
            if(isChecked == false){
              alertStr += elementStr + messageObligation;
              returnErrArr.push(formElementNameOrig);
            }
          }
	        if(radioVal != ""){
	        	returnStr += ((returnStr != '') ? "&" : "") + formElement.name+"="+encodeURIComponent(radioVal);
	        	//returnStr += ((returnStr != '') ? "&" : "") + formElementNameOrig+"="+encodeURIComponent(radioVal);
	        	returnOKArr.push(formElementNameOrig);
	        }
        }
	    } else if(formElement.type == "hidden"){
        if(formElement.value != ""){
        	returnStr += ((returnStr != '') ? "&" : "") + formElement.name+"="+encodeURIComponent(formElement.value);
        	//returnStr += ((returnStr != '') ? "&" : "") + formElementNameOrig+"="+encodeURIComponent(formElement.value);
        }
      }
    }
  }

  for(j=0; j<returnOKArr.length; j++){
  	if(jQuery('#label_'+returnOKArr[j])) {
	  	jQuery('#label_'+returnOKArr[j])
	  		.removeClass("red");
  	}
  }

  if(alertStr != ""){
  	//wShowMessagebox('checkMessageBox', 'Fehler', alertStr, 'back', 'wError', '');
    //alert(alertStr);
    returnStr = "";
	  for(j=0; j<returnErrArr.length; j++){
	  	//alert(returnErrArr[j])
	  	if(jQuery('#label_'+returnErrArr[j])) {
		  	jQuery('#label_'+returnErrArr[j])
		  		.addClass("red");
	  	}
	  }
  }
  return returnStr;
}

function correctWeblicationUsername(name) {
	sendBack = trim(name);
	do {
		tmpSendBack = sendBack;
		sendBack = sendBack.replace(/[^a-zA-Z0-9\-_]/, '_');
		sendBack = sendBack.replace(/_+/, '_');
		sendBack = sendBack.replace(/_+$/, '');
		sendBack = sendBack.replace(/^_+/, '');
	} while(tmpSendBack != sendBack);

	return sendBack;
}

function rand(min, max) {
	return Math.floor(Math.random() * (max - min + 1)) + min;
}

function trim(zeichenkette) {
  // Erst führende, dann Abschließende Whitespaces entfernen
  // und das Ergebnis dieser Operationen zurückliefern
  return zeichenkette.replace (/^\s+/, '').replace (/\s+$/, '');
}
