// Variable zum Zwischenspeichern der letzten fehlerhaften Felder
var last_invalid_fields = null; 
// Variable zum Zwischenspeichern der letzten Class des 'loginname'-Feldes
var last_loginname_field_class = null;

//Register ID aus Step 1 zwischenspeichern
var register_id = null;

//AGB aus Step 1 zwischenspeichern
var agb = null;

//email aus Step 1 zwischenspeichern
var email = null;

// Zusatzfunktionen
function resetLoginnameField() {
	var loginname_field = document.getElementById('loginname');
	
	if (typeof(loginname_field) != 'undefined') {
		if (last_loginname_field_class != null && last_loginname_field_class['loginname'] != null) {
			loginname_field.className = last_loginname_field_class['loginname'];
			last_loginname_field_class = null;
		} else if (last_invalid_fields != null && last_invalid_fields['loginname'] != null ) {
			loginname_field.className = last_invalid_fields['loginname'];
		}
	}						
}

function resetInvalidFields() {
	var counter = 0;
	if (last_invalid_fields != null) {		
		for (var idx in last_invalid_fields) {
			var invalid_field = document.getElementById(idx);
			if (invalid_field) {
				invalid_field.className = last_invalid_fields[idx];
				counter++;
			}
		}
		last_invalid_fields = null;		
	}	
	
	return counter;
}

/**
 * Funktion zum Zuruecksetzen der einzelnen Button- und DIV-Elemente
 */
function resetSubmitButtons() {
	// Holen der einzelnen Button- und DIV-Elemente
	var submitButtonStep1 = document.getElementById('submitButtonStep1');
	var step1Waiting = document.getElementById('step1Waiting');
	var submitButtonStep2 = document.getElementById('submitButtonStep2');
	var step2Waiting = document.getElementById('step2Waiting');
	
	// Ausblenden der WaitingDIVs
	if (step1Waiting != null && typeof(step1Waiting) != 'undefined') {
		step1Waiting.style.display = 'none';
	}
	if (step2Waiting != null && typeof(step2Waiting) != 'undefined') {
		step2Waiting.style.display = 'none';
	}
	
	// die Buttons vom loader zuruecksetzen
	if (submitButtonStep1 != null && typeof(submitButtonStep1) != 'undefined') {
		if (smileyButton && typeof(smileyButton) != 'undefined') {
			submitButtonStep1.src = smileyButton;
		}
		submitButtonStep1.style.display = 'block';
	}
	if (submitButtonStep2 != null && typeof(submitButtonStep2) != 'undefined') {
		if (buttonStep2 && typeof(buttonStep2) != 'undefined') {
			submitButtonStep2.src = buttonStep2;
		}
		submitButtonStep2.style.display = 'block';
	}
}

/**
 * Funktion zum Ausblenden der einzelnen Button-Elemente und Einblenden der einzelnen DIV-Elemente
 */
function hideSubmitButtons() {
	// Holen der einzelnen Button- und DIV-Elemente
	var submitButtonStep1 = document.getElementById('submitButtonStep1');
	var step1Waiting = document.getElementById('step1Waiting');
	var submitButtonStep2 = document.getElementById('submitButtonStep2');
	var step2Waiting = document.getElementById('step2Waiting');

	// die Buttons vom loader zuruecksetzen
	if (submitButtonStep1 != null && typeof(submitButtonStep1) != 'undefined') {
		if (smileyButton && typeof(smileyButton) != 'undefined') {
			submitButtonStep1.src = smileyButton;
		}
		submitButtonStep1.style.display = 'none';
	}
	if (submitButtonStep2 != null && typeof(submitButtonStep2) != 'undefined') {
		if (buttonStep2 && typeof(buttonStep2) != 'undefined') {
			submitButtonStep2.src = buttonStep2;
		}
		submitButtonStep2.style.display = 'none';
	}
	
	// Einblenden der WaitingDIVs
	if (step1Waiting != null && typeof(step1Waiting) != 'undefined') {
		step1Waiting.style.display = 'block';
	}
	if (step2Waiting != null && typeof(step2Waiting) != 'undefined') {
		step2Waiting.style.display = 'block';
	}	
}

/**
 * Wrapperfunction zum Ausblenden der layered Registrierungen
 */
function confirmHideLayeredRegistration(show_step1) {
	var doHideLayer = true;
	if (closeRegistrationLayerConfirmTxt != null && typeof(closeRegistrationLayerConfirmTxt) != 'undefined' && closeRegistrationLayerConfirmTxt != 'close_registration_layer_confirm') {
		doHideLayer = confirm(closeRegistrationLayerConfirmTxt);
	}
	if (doHideLayer != false) {
		return hideLayeredRegistration(show_step1)
	}
	return false;
}

// Funktionen fuer die Ajax-Funktionalitaet

// Funktionen fuer die Registrierung (Step1 und Step2)
function on_registration_response(responseText, responseXML) {
	// Festlegung des Elements fuer Fehler- und Hinweistexte
	var twoStepForm_element = document.getElementById('twoStepRegistration');
	var step1Form_element   = document.getElementById('step1');
	var step1Shade_element  = document.getElementById('Step1Shade');
	var step2Form_element   = document.getElementById('step2');
	var error2Wrap_element   = document.getElementById('error2Wrap');
	var error2Substitute_element  = document.getElementById('error2Substitute');
	var registration_success  = document.getElementById('registration_success');
	var error_element  = document.getElementById('registerTiny2stepFormError');
	var notice_element = document.getElementById('registerTiny2stepFormNotice');
	
	try {
		// Zuruecksetzen der SubmitButtons und WaitingDIVs
		resetSubmitButtons();
		
		eval("var response="+responseText+";");
		if(typeof(response) == 'object') {
			var registrationStatus = response['status'];
			
			// Zuruecksetzen der fehlerhaften Felder
			resetInvalidFields();
			
			//Registration-ID zwischenspeichern
			if(response['register_id']){
				registerIdField = document.getElementById("register_id2");
				if(registerIdField){
					registerIdField.value = response['register_id'];	
				}
			}
			
			if(response['agb']){
				agbField = document.getElementById("agb2");
				if(agbField){
					agbField.value = response['agb'];						
				}
			}
			
			if(response['user_email']){
				emailField = document.getElementById("email2");
				if(emailField){
					emailField.value = response['user_email'];
				}
				
				// Eingegebene E-Mail in step2 wieder ausgeben:
				var entered_email = response['user_email'];
				var spans = new Array('user_email_1', 'user_email_2');
				if(entered_email != '') {
					for(var i=0; i<=spans.length; i++) {
						var span = document.getElementById(spans[i]);
						if(span != null) {
							span.innerHTML = entered_email; 
						}
					}
				}
			}
			
			if (registrationStatus == 'success' || registrationStatus == 'ok') {
				// Wenn die Registrierung noch nicht abgeschlossen, dann Step1 ausblenden und Step2 einblenden
				if (response['registration_finished'] == false) {					
					if (typeof(step1Form_element) != 'undefined') {
						step1Shade_element.style.display = 'block';
					}
					if (typeof(step2Form_element) != 'undefined') {						
						// Fuer SKv3 den Step1Overlayer ausblenden
						var step1OverlayRegWrap = document.getElementById('step1OverlayRegWrap');
						if(step1OverlayRegWrap) {
							step1OverlayRegWrap.style.display = 'none';
						}
						step2Form_element.style.display = 'block';						
					}
					
					//Ein- und Ausblenden innerhalb des TRY/CATCH-Blocks, um Fehler abzufangen
					try {
						// Fehlermeldungen aus step1 in step2 schieben
						if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
							error2Substitute_element.style.display = 'block';
						}
						
						if (error_element != null && typeof(error_element) != 'undefined') {							
							error_element.style.display = 'none';
						}

						if (notice_element != null && typeof(notice_element) != 'undefined') {
							notice_element.style.display = 'none';
						}
						
						if (error2Wrap_element != null && typeof(error2Wrap_element) != 'undefined') {
							error2Wrap_element.appendChild(error_element);
							error2Wrap_element.appendChild(notice_element);
						}
						
						if (step1Form_element != null && typeof(step1Form_element) != 'undefined') {
							step1Form_element.removeChild(error_element);
							step1Form_element.removeChild(notice_element);
						}
						
						var error_element  = document.getElementById('registerTiny2stepFormError');
						var notice_element = document.getElementById('registerTiny2stepFormNotice');
					} catch (e){
					}
				} else { // Registrierung abgeschlossen. Statusmeldung einblenden, Divs ausblenden und ggf Weiterleitung
					//Ein- und Ausblenden innerhalb des TRY/CATCH-Blocks, um Fehler abzufangen

					try {
						// Einblenden des DIVs zur Meldung der erfolgreichen Registrierung
						if (notice_element != null && typeof(notice_element) != 'undefined') {
							notice_element.innerHTML = response['status_message'];
							notice_element.style.display = 'block';
						}
						
						// platz fuer die error/notice divs machen
						if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
							error2Substitute_element.style.display = 'none';
						}
						
						// Ausblenden des DIVs des Registrierungsformulars
						if (twoStepForm_element != null && typeof(twoStepForm_element) != 'undefined') {
							twoStepForm_element.style.display = 'none';
						}
	
						// Ausblenden des zweiten Schritts
						if (step2Form_element != null && typeof(step2Form_element) != 'undefined') {
							step2Form_element.style.display = 'none';
						}
						
						// Einblenden der Success-meldung
						if (registration_success != null && typeof(registration_success) != 'undefined') {
							registration_success.style.display = 'block';
						}
						
						// Ausblenden des ersten Schritts
						if (step1Form_element != null && typeof(step1Form_element) != 'undefined') {
							step1Form_element.style.display = 'none';
						}

						// Ausblenden des abgedunkelten divs
						if (step1Shade_element != null && typeof(step1Shade_element) != 'undefined') {
							step1Shade_element.style.display = 'none';
						}
					} catch (e) {
					}
					
					// Wenn eine 'redirect_url' angegeben, dann an diese Weiterleiten/Umleiten
					if (response['redirect_url'] != null) {
						self.location.href = response['redirect_url'];
					}
				}
			} else if (registrationStatus == 'error') {
				last_invalid_fields = new Object;				

				if (error_element != null && typeof(error_element) != 'undefined' && (response['status_message'] != null && response['status_message'] != false && response['status_message'] != 'false')) {
					error_element.innerHTML = response['status_message'];
					error_element.style.display = 'block';
				}

				// platz fuer die error/notice divs machen
				if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
					error2Substitute_element.style.display = 'none';
				}
					
				var errorfields = response['errorfields'];
				
				if(response['sentdata']['form_page']) {
					var formName = response['sentdata']['form_page'];
				} else if (response['sentdata']['page'] && response['sentdata']['page'].match(/^seite/i)) {
					var formName = response['sentdata']['page'];
				}
				
				for (var idx in errorfields) {
					errorfield = errorfields[idx];
					
					var invalid_field = document.forms[formName].elements[errorfield];
					
					if (typeof(invalid_field) != 'undefined') {
						if (invalid_field.className != 'error') {
							last_invalid_fields[errorfield] = invalid_field.className;
						}
						invalid_field.className = 'error';
						invalid_field.style.display = 'block';
						
						// Wenn das Fehlerhafte Feld das Email-Feld ist, dann dieses ggf. wieder fuellen
						if (errorfield == 'user_email') {
							if (invalid_field.value == '' || invalid_field.value.length == 0) {
								if (typeof(EMAIL_DEFAULT_VALUE) != 'undefined') {
									invalid_field.value = EMAIL_DEFAULT_VALUE;
								}
							}
						}
					}	
				}
			} else {
				// Falls irgendwas anderes, als das erwartetet zurueckkam, dann Fehlermeldung
				if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
					error2Substitute_element.style.display = 'none';
				}
				if (error_element != null && typeof(error_element) != 'undefined' && typeof(registrationFailedMsg) != 'undefined' && registrationFailedMsg != 'undefined') {
					error_element.innerHTML = registrationFailedMsg;
					trackErrorViaMail(registrationFailedMsg);

					error_element.style.display = 'block';
				}
			}
		} else {
			// Falls irgendwas anderes, als das erwartetet zurueckkam, dann Fehlermeldung
			if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
				error2Substitute_element.style.display = 'none';
			}
			if (error_element != null && typeof(error_element) != 'undefined' && typeof(registrationFailedMsg) != 'undefined' && registrationFailedMsg != 'undefined') {
				error_element.innerHTML = registrationFailedMsg;
				trackErrorViaMail(registrationFailedMsg);
				
				error_element.style.display = 'block';
			}
		}
	} catch (exception) {
		// Falls irgendwas anderes, als das erwartetet zurueckkam, dann Fehlermeldung
		if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
			error2Substitute_element.style.display = 'none';
		}
		if (error_element != null && typeof(error_element) != 'undefined' && typeof(registrationFailedMsg) != 'undefined' && registrationFailedMsg != 'undefined') {
			error_element.innerHTML = registrationFailedMsg;
			trackErrorViaMail(registrationFailedMsg);
			
			error_element.style.display = 'block';
		}
	}		
}

function on_registration_error(msg) {
	var error_element  = document.getElementById('registerTiny2stepFormError');
	var notice_element = document.getElementById('registerTiny2stepFormNotice');
	var error2Substitute_element  = document.getElementById('error2Substitute');
	
	// Zuruecksetzen der SubmitButtons und WaitingDIVs
	resetSubmitButtons();
	
	// platz fuer die error/notice divs machen
	if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
		error2Substitute_element.style.display = 'none';
	}
		
	if (error_element != null && typeof(error_element) != 'undefined') {	
		error_element.style.display = 'block';
//		error_element.innerHTML = msg;
		error_element.innerHTML = registrationFailedMsg;
		trackErrorViaMail(registrationFailedMsg);
		
	} else {
//		alert(msg);
	}
}

function on_registration_submit() {
	var error_element  = document.getElementById('registerTiny2stepFormError');
	var notice_element = document.getElementById('registerTiny2stepFormNotice');
	var error2Substitute_element   = document.getElementById('error2Substitute');
	
	// Sicherstellen, dass einige Elemente ausgeblendet sind.
	var usernameExistsBubble = document.getElementById('usernameExistsBubble');
	if (usernameExistsBubble != null && typeof(usernameExistsBubble) != 'undefined') {
		usernameExistsBubble.style.display = 'none';
	}

	// platzhalter fuer die error/notice divs einblenden
	if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {		
		error2Substitute_element.style.display = 'block';
	}
	
	if (error_element != null && typeof(error_element) != 'undefined') {
		error_element.style.display = 'none';
	}

	if (notice_element != null && typeof(notice_element) != 'undefined') {
		notice_element.style.display = 'none';
	}
	
	// Alle ungueltigen Felder zuruecksetzen
	resetInvalidFields();
	// Nochmals das Loginnamensfeld resetten
	resetLoginnameField();
	// Ausblenden der SubmitButtons und Einblenden der WaitingDIVs
	hideSubmitButtons();		
}

function submitTwoStepRegistration(formname, submit_btn) {	
//	if (typeof(submit_btn) != 'undefined' && typeof(loaderButtonStep2) != 'undefined') {
//		submit_btn.src = loaderButtonStep2;
//	}

//	if (typeof(submit_btn) != 'undefined') {
//		submit_btn.style.display = 'none';
//	}	
	
	var url = twoStepRegistrationUrl;
	var params = get_form_params_by_id(formname);
	var form = document.getElementById(formname);
	
    var request = new XMLRPC();
    requests[requests.length] = request;
    request.params		= params;
    
    request.onStart		= on_registration_submit;
	request.onError		= on_registration_error;
	request.onComplete	= on_registration_response;
	
	//BA: Standard Callbacks uerberschreiben
	if(typeof submitTwoStepRegistration.arguments[2] == 'function') {
		request.onStart = submitTwoStepRegistration.arguments[2]; 
	}
	
	if(typeof submitTwoStepRegistration.arguments[3] == 'function') {
		request.onError = submitTwoStepRegistration.arguments[3]; 
	}
	
	if(typeof submitTwoStepRegistration.arguments[4] == 'function') {
		request.onComplete = submitTwoStepRegistration.arguments[4]; 
	}	
	//Ende BA:
	
    if (params) {
        request.post(url, params);
    } else {
	    request.get(url);
    }
	
//    if (formname == "register_tiny_2step_page_0") {
//		if (document.getElementById('step1Waiting')) {
//			document.getElementById('step1Waiting').style.display = 'block';
//		}    	
//    	if (document.getElementById('submitButtonStep1')) {
////	    	document.getElementById('submitButtonStep1').src = loaderButton;
//    		document.getElementById('submitButtonStep1').style.display = 'none';
//    	}
//    }
}

// Funktionen zur Ueberpruefung des Loginnamens
function checkLoginname() {
	var url = checkLoginnameUrl;
	var params = new Object();
	
	var paramName = 'loginname';
	
	if(typeof checkLoginname.arguments[3] == 'string') {
		paramName = checkLoginname.arguments[3]; 
	}
	
	params['loginname'] = document.getElementById(paramName).value;
	
    var request = new XMLRPC();
    requests[requests.length] = request;
    request.params            = params;
    request.onStart           = on_checkloginname_submit;
	request.onError           = on_checkloginname_error;
	request.onComplete        = on_checkloginname_response;
	
	//BA: Standard Callbacks uerberschreiben
	if(typeof checkLoginname.arguments[0] == 'function') {
		request.onStart = checkLoginname.arguments[0]; 
	}
	
	if(typeof checkLoginname.arguments[1] == 'function') {
		request.onError = checkLoginname.arguments[1]; 
	}
	
	if(typeof checkLoginname.arguments[2] == 'function') {
		request.onComplete = checkLoginname.arguments[2]; 
	}	
	//Ende BA:
	
	
    if (params) {
        request.post(url, params);
    } else {
	    request.get(url);
    }
}

function on_checkloginname_submit() {
	var error2Substitute_element   = document.getElementById('error2Substitute');
	var error_element  = document.getElementById('registerTiny2stepFormError');
	var notice_element = document.getElementById('registerTiny2stepFormNotice');
	var error2Substitute_element   = document.getElementById('error2Substitute');

	if (error_element != null && typeof(error_element) != 'undefined') {
		error_element.style.display = 'none';
	}

	if (notice_element != null && typeof(notice_element) != 'undefined') {
		notice_element.style.display = 'none';
	}
	
	if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
		error2Substitute_element.style.display = 'block';
	}
	
	resetLoginnameField();
}

function on_checkloginname_error(msg) {
//	alert(msg);	
}

function on_checkloginname_response(responseText, responseXML) {
	var error_element  = document.getElementById('registerTiny2stepFormError');
	var notice_element = document.getElementById('registerTiny2stepFormNotice');
	var error2Substitute_element   = document.getElementById('error2Substitute');
	
	try {
		eval("var response="+responseText+";");
		if(typeof(response) == 'object') {
			// Festlegung des Elements fuer Fehler- und Hinweistexte
			var loginname_field = document.getElementById('loginname');
			
			if (response['status'] == 'success' || response['status'] == 'ok') {
				if (error_element != null && typeof(error_element) != 'undefined') {
					error_element.style.display = 'none';
				}
				resetLoginnameField();
				
			
				if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
					error2Substitute_element.style.display = 'block';
				}
				
				last_invalid_fields = null;
			} else if (response['status'] == 'error') {
				last_loginname_field_class = new Object;
				last_invalid_fields = new Object;

				if ((response['status_message'] != null && response['status_message'] != false && response['status_message'] != 'false')) {
					error_element.innerHTML = response['status_message'];					
					error_element.style.display = 'block';
				}

				if (typeof(loginname_field) != 'undefined') {
					if (loginname_field.className != 'error') { 
						last_loginname_field_class['loginname'] = loginname_field.className;
						last_invalid_fields['loginname'] = loginname_field.className;
					}
					loginname_field.className = 'error';
					loginname_field.style.display = 'block';
				}
				
				if (error2Substitute_element != null && typeof(error2Substitute_element) != 'undefined') {
					error2Substitute_element.style.display = 'none';
				}
			} else {
				
			} 
		} else {
			// Falls irgendwas anderes, als das erwartetet zurueckkam, dann Fehlermeldung
		}
	} catch (exception) {

	}	
}

function trackErrorViaMailCallback(json_data) {
	//Hier machen wir erstmal nichts. Es geht uns nur darum den Aufruf der Seite zu tracken.
	//alert('Is saved: ' + json_data['saved']);
}

function trackErrorViaMail(error) {
	var checkpoint = 0;
	
	var trackUrl = 'http://stat.wpextern.de/jsontrack/index.php';
	trackUrl = trackUrl + '?noCacheIE=' + (new Date()).getTime();
	trackUrl = trackUrl + '&track=' + encodeURI(error);
	trackUrl = trackUrl + '&callback=trackErrorViaMailCallback';
	if(document.referrer) {
		trackUrl = trackUrl + '&referrer=' + encodeURI(document.referrer);
	}
	
    // Create the script tag
    var scriptObj = document.createElement("script");

    // Add script object attributes
    scriptObj.setAttribute("type", "text/javascript");
    scriptObj.setAttribute("charset", "utf-8");
    scriptObj.setAttribute("src", trackUrl);

    //Append the new Script Tag.
	var headLoc = document.getElementsByTagName("head").item(0);
    headLoc.appendChild(scriptObj);
}