var uploadInProgress = false;

$(document).ready(function() {

	$(".scrollto").each(function() {
		$(this).click(function(e) {
			e.preventDefault();
			$("html, body").animate({scrollTop: $($(this).attr("href")).offset().top-35}, 600);
		});
	});

	$("#btn-showcodeform").click(function(e) {
		e.preventDefault();
		$(".codeform").show(200);
	});

	$("#uploadobject").on("change", function() {
		uploadFile();
	});

	$("input[data-removespaces='true']").on({
		keydown: function(e) {
			if (e.which===32) {
				return false;
			}
		},
		change: function() {
			this.value = this.value.replace(/\s/g, "");
		},
		paste: function(e) {
			setTimeout(function() {
				$("#"+e.currentTarget.id).val($("#"+e.currentTarget.id).val().replace(/\s/g, ""));
				if (validateInputField(e.currentTarget.id)) {
					$("#"+e.currentTarget.id).removeClass("error");
				}
			}, 1);
		}
	});

	$("#btn-upload").click(function() {
		if (!uploadInProgress) {
			$.magnificPopup.open({
				items: {
					src: '<div class=\"white-popup-block\"><h3>Upload Foto mit Aktionscode?</h3><p>Bitte achten Sie beim Upload darauf, dass der vollständige Aktionscode u sehen ist. Unvollständige Fotos können nicht berücksichtigt werden. Sollte die Erkennung nicht erfolgreich sein, geben Sie den Code einfach manuell ein.</p><button onClick=\"triggerUpload();\" class=\"default\">Jetzt hochladen</button></div>',
					type: 'inline',
					modal: true,
					preloader: false
				}
			});
		}
	});

	$("input").on("input", function() {
		if ($(this).hasClass("error")&&$(this).attr("data-regexp")) {
			if (validateInputField($(this).attr("id"))) {
				$(this).removeClass("error");
			}
		}
	});

	$("#btn-submit").click(function() {
		var err = false;
		var scrollto = "";

		if (!$("#acceptterms").is(":checked")) {
			err = true;
			notifyInputError("labelforacceptterms");
			scrollto = "acceptterms";
		}

		if (!validateInputField("code")) { err = true; scrollto = "code"; notifyInputError("code"); }
		$("#email").val($("#email").val().trim());
		if (!validateInputField("email")) { err = true; scrollto = "email"; notifyInputError("email"); }
		if (!validateInputField("lastname")) { err = true; scrollto = "lastname"; notifyInputError("lastname"); }
		if (!validateInputField("firstname")) { err = true; scrollto = "firstname"; notifyInputError("firstname"); }

		if (scrollto!=""&&!$("#"+scrollto).visible(true)) {
			$("html, body").animate({scrollTop: $("#"+scrollto).offset().top-35}, 600);
		}

		if (!err) {
			$.ajax({
				url: "/assets/servlets/ajax.do",
				data: {"do": "participate", "code": $("#code").val(), "firstname": $("#firstname").val(), "lastname": $("#lastname").val(), "email": $("#email").val(), "acceptterms": ($("#acceptterms").is(":checked")?1:0), "newsletter": ($("#newsletter").is(":checked")?1:0)},
				dataType: "json",
				method: "POST",
				success: function(data) {
					uploadInProgress = false;
					if (data.result==1) {
						$(".result").html(data.form);
						initPost();
					} else {
						if (data.errors.indexOf("firstname")!=-1) { notifyInputError("firstname"); }
						if (data.errors.indexOf("lastname")!=-1) { notifyInputError("lastname"); }
						if (data.errors.indexOf("email")!=-1) { notifyInputError("email"); }
						if (data.errors.indexOf("code")!=-1) { notifyInputError("code"); }
						if (data.errors.indexOf("acceptterms")!=-1) { shakeObject("labelforacceptterms"); }
					}
				},
				error: function(xhr, ajaxOptions, thrownError) {
					uploadInProgress = false;
					showPopupMessage("Ihre Teilnahme", "Bei der Verarbeitung Ihrer Teilnahme ist ein Fehler aufgetreten. Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut oder kontaktieren Sie den aktionsgebundenen Verbraucher-Service (<a href='mailto:mail@lindor-75jahre.de'>mail@lindor-75jahre.de</a>)!", ["schließen"]);			
				}
			});
		}

	});

});

function notifyInputError(obj, duration) {
	if (!duration) {
		duration = 1000;
	}
	if (!$("#"+obj).hasClass("error")) {
		$("#"+obj).addClass("error");
	}
	shakeObject(obj, duration, Array("shake-horizontal"));
}

function shakeObject(obj, shakeDuration, shakeTypes) {
	if (!$("#"+obj).hasClass("shaking")) {
		$("#"+obj).addClass("shaking");
		$("#"+obj).addClass("shake-constant");
		shakeTypes.forEach(function(shakeType) {
			$("#"+obj).addClass((shakeType));
		});
		setTimeout(function() {
			$("#"+obj).removeClass("shaking");
			$("#"+obj).removeClass("shake-constant");
			shakeTypes.forEach(function(shakeType) {
				$("#"+obj).removeClass(shakeType);
			});
		}, shakeDuration);
	}
}

function uploadFile() {
	uploadInProgress = true;
	var file_data = $("#uploadobject").prop('files')[0];   
	var form_data = new FormData();                  
	form_data.append("image", file_data);
	form_data.append("do", "upload.image");
	$("#btn-upload").addClass("inprogress");

	$.magnificPopup.open({
		items: {
			src: '<div class=\"white-popup-block\"><h3>Einen Moment bitte.</h3><p class=\"processinfo\">Die Datei wird übertragen...</p><img src=\"/assets/gfx/uploadprocess.jpg\" alt=\"\" class=\"process\"></div>',
			type: 'inline',
			modal: true,
			preloader: false,
			closeOnBgClick: false,
			enableEscapeKey: false
		}
	});

	$.ajax({
		url: "/assets/servlets/ajax.do",
		dataType: "json",
		cache: false,
		contentType: false,
		processData: false,
		data: form_data,
		type: "post",
		xhr: function() {
			var appXhr = $.ajaxSettings.xhr();
			if(appXhr.upload) {
				appXhr.upload.addEventListener('progress', trackReceiptUploadProgress, false);
			}
			return appXhr;
		},
		success: function(data) {
			uploadInProgress = false;
			if (data.result==1) {
				$("#code").val(data.code);
				hidePopupMessage();
			} else if (data.result==0) {
				$(".uploadform").hide(200);
				switch (data.error) {
					case "nocode":
						showPopupMessage("Foto-Upload", "Ihr Teilnahmecode konnte auf dem Foto nicht erkannt werden. Bitte geben Sie diesen einfach manuell ein.", ["schließen"]);
						break;
					case "filetype":
						showPopupMessage("Foto-Upload", "Die Fotodatei muss im Format PNG oder JPG vorliegen. Andere Dateiformate können nicht berücksichtigt werden!", ["schließen"]);
						break;
					case "filesize":
						showPopupMessage("Foto-Upload", "Die Fotodatei überschreitet die maximal erlaubte Größe von 6 MB!", ["schließen"]);
						break;
					default:
						showPopupMessage("Foto-Upload", "Bei der Übertragung Ihres Fotos ist ein Fehler aufgetreten. Bitte versuchen Sie es zu einem späteren Zeitpunkt erneut oder geben Sie den Aktionscode manuell ein!", ["schließen"]);			
				}
			}
		},
		error: function(xhr, ajaxOptions, thrownError) {
			uploadInProgress = false;
			$(".uploadform").hide(200);
			showPopupMessage("Foto-Upload", "Ihr Teilnahmecode konnte auf dem Foto nicht erkannt werden. Bitte geben Sie diesen einfach manuell ein.", ["schließen"]);
		}
	});
}

function trackReceiptUploadProgress(e) {
	var percentComplete = parseInt((e.loaded/e.total)*100);
	if (percentComplete==100) {
		$(".processinfo").html("Der Aktionscode wird gesucht...");
	} else {
		$(".processinfo").html("Die Datei wird übertragen ("+percentComplete+"%)...");
	}
}

function hidePopupMessage() {
	$.magnificPopup.close();
}

function showPopupMessage(title, message, button, closeCallbackFunction) {

	var popupContent = "";
	if (typeof button !== 'undefined') {

		popupContent = "<div class='white-popup-block text'><h3>"+title+"</h3><p>"+message+"</p>";

		button.forEach(function(i,o) {

			if (typeof i.action !== 'undefined') {

				var actionId = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
				popupContent = popupContent + "<div class=\"button\" onClick=\""+i.action+"\"><div class=\"topline\"></div>"+i.caption+"<div class=\"bottomline\"></div>";

			}

		});

		popupContent = popupContent + "</div>";

	} else {
		popupContent = "<div class='white-popup-block text'><h3>"+title+"</h3><p>"+message+"</p></div>";
	}

	if (typeof closeCallbackFunction !== 'undefined') {
		$.magnificPopup.open({
			items: {
				src: popupContent,
				type: 'inline',
				modal: true,
				preloader: false,
				closeOnBgClick: false,
			},
			callbacks: {
				close: function() {
					closeCallbackFunction();
				}
			}
		});
	} else {
		$.magnificPopup.open({
			items: {
				src: popupContent,
				type: 'inline',
				modal: true,
				preloader: false,
				closeOnBgClick: false
			}
		});
	}
}

function validateInputField(obj) {
	var regExp = new RegExp($("#"+obj).attr("data-regexp"));
	if (!regExp.test($("#"+obj).val())) {
		return false;
	} else {
		return true;
	}
}

function triggerUpload() {
	hidePopupMessage();
	$('#uploadobject').trigger('click');
}