
$(document).ready(function () {
	
	var data = {types:{}, person: {}, payment: "", payment_info: {}};

	// Insert data in date dropdown
	insertIntegerOptions('#dob_d', 1, 31, true);
	insertIntegerOptions('#dob_m', 1, 12, true);
	insertIntegerOptions('#dob_y', 1940, 2001, true);
	
	
	// Check amount on change
	
	var standardAmountField = $("#type-0-amount");
	
	function checkAmount() {
		var amount = parseInt(standardAmountField.val());
		if (isNaN(amount)) {
			amount = 0;
		}
		if (amount < 2) {
			amount = 2;
			standardAmountField.val(amount);
		}
	}
	
	standardAmountField.change(checkAmount);
	
	
	
	function insertIntegerOptions(container, from, to, insertEmpty) {
		container = $(container).empty();
		
		if (insertEmpty) {
			container.append('<option value="" selected="selected" />');
		}
		
		for (var i=from; i<=to; i++) {
			container.append('<option value="'+i+'">'+i+'</option>');
		}
	}
	
	
	// Add handler for enabling the boxes in first step
	$("#content1 input[type=checkbox]").click(function() {
		var item = checkBoxItem(this.id);	
		item.disabled = !item.disabled;
	});
	
	// Fill dropdowns in first step here
	$("#content1 select").each(function(item) {
		item = $(this).empty();
		for (var i=10; i<=200; i+=10) {
			item.append('<option value="'+i+'">'+i+' €</option>');
		}
	});
	
	// Event for goto step 2
	$("#next1-1,#next1-2").click(function() {
		if (checkStep1() == true) {
			gotoData();
		}
	});

	$("#next2").click(function() {
		if (checkStep2() == true) {
			finalize();
		}
	});
	
	function serializeData() {
		var serializedData = { 
			"data[payment]": data.payment,
			"data[pay_kontonr]": $("#kontonr").val(),
			"data[pay_blz]": $("#blz").val(),
			"data[person][vorname]": data.person.vorname,
			"data[person][nachname]": data.person.nachname,
			"data[person][plz]": data.person.plz,
			"data[person][ort]": data.person.ort,
			"data[person][email]": data.person.email,
			"data[person][title]": data.person.title,
			"data[person][dob]": data.person.dob,
			"data[person][company]": data.person.company,
			"data[person][gender]": data.person.gender,
			"data[person][newsletter]": data.person.newsletter
		};
		for (var e in data.types) {
			var singleType = data.types[e];
			if (!singleType.active) {
				continue;
			}
			serializedData["data[types]["+e+"][active]"] =  singleType.active;
			serializedData["data[types]["+e+"][way]"] =  singleType.way;
			serializedData["data[types]["+e+"][amount]"] =  singleType.amount;
		}


		return serializedData;
	}
	
	function finalize() {
		$.post("index.php?type=43", serializeData(), function(data) {


			if (data.error) {
				gotoHelp();
				return;
			}

			if (!data.redirect && data.hash) {
				top.location.href = data.hash;
				return;
			}

			if (data.redirect && data.form) {
				$("#formcontainer").html(data.form);
				$("#redirect_form")[0].submit();
				return;
			}

			
		}, "json");
	}
	
	function checkStep2() {

		var address = false, method = false, result = false, methodValue="";

		// Check data
		var vorname = clean($("#vorname").val()),
			nachname = clean($("#nachname").val()),
			plz = parseInt(clean($("#plz").val())) || 0,
			ort = clean($("#ort").val()),
			email = clean($("#email").val()),
			addresse = clean($("#company").val());


		if (vorname.length > 2 && nachname.length > 2 && ort.length > 3 && (plz > 999 && plz < 100000) && email.search(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i) != -1 && addresse.length > 3) {

			address = true;

			data.person = {
				vorname: vorname,
				nachname: nachname,
				plz: plz,
				ort: ort,
				email: email,
				gender: ($("#gender_m")[0].checked ? 'm' : 'f'),
				title: $("#title").val(),
				company: $("#company").val(),
				dob: $("#dob_y").val() + '-' + $("#dob_m").val() + '-' + $("#dob_d").val(),
				//newsletter: true
				newsletter: $("#infos")[0].checked ? 1 : 0
			};
			$("#error_address").css("visibility", "hidden");
		} else {
			$("#error_address").css("visibility", "visible");
		}



		// Check method
		$('.payment input[type=radio]').each(function() {
			if (this.checked == true) {
				methodValue = this.value;
			}
		});
		
		
		data.payment_info = {};
		var error_mo = $("#error_mo");
		error_mo.css("visibility", "hidden");

		
		// Check for additional data
		if (methodValue == "moneyorder") {
			var bank = $("#blz").val(), nr = $("#kontonr").val();
			if (clean(bank) == "" || clean(nr) == "") {
				methodValue = "";
				error_mo.css("visibility", "visible");
			} else {
				data.payment_info = {
					blz: bank,
					nr:  nr
				};
			}
		}
		
		
		
		
		if (methodValue != "") {
			method = true;
			$("#error_method").css("visibility", "hidden");
			data.payment = methodValue;
		} else {
			$("#error_method").css("visibility", "visible");
		}
		
		// evaluation of test results
		if (address && method && checkStep1()) { // Step 1 check is just percausion
			$("#error_payment").css("visibility", "hidden");
			result = true;
		} else {
			$("#error_payment").css("visibility", "visible");
		}
		
		return result;
	}
	
	function clean(str) {
		return str.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');
	}

	//// window visibility
	function makeInfoWin(trigger, win, add, left) {

		trigger.hover(
				function() {
					var pos = $(this).position(); 
					add = parseInt(add) || 0;
					left = parseInt(left) || 0;

					win.css({
						display: "block",
						left:pos.left - 16 + left,
						top: pos.top + $(this).height() + 3 + add
					});
				},
				function() {
					win.css("display", "none");
					
				}
		);
		
	}
	
	
	makeInfoWin($("#label-type-0-1"), $("#dauerhaft-info"));
	makeInfoWin($("#patenschaft-hint-1, #patenschaft-hint-2, #patenschaft-hint-3"), $("#patenschaft-info"), 8, 15);
	makeInfoWin($("#moneyorder-hint"), $("#moneyorder-info"));
	
	
	/**
	 * Checks if all infos for step2 are given
	 */
	function checkStep1() {
		
		var result = false;
		
		// Check normale Spende
		var type0=0, amount = parseInt($("#type-0-amount").val()); 
		$("#type-0-amount").val(amount);
		
		type0 = $("#type-0-1")[0].checked ? 1 : ($("#type-0-2")[0].checked ? 2 : 0);
		data.types["type-0"] = {
			active:false,
			way: 0,
			amount: 0
		};

		if (type0 > 0 && amount > 0) {
			result = true;
			data.types["type-0"] = {
				active: true,
				way: type0,
				amount: amount
			};
		}



		// Check Patenschaften
		$("#content1 input[type=checkbox]").each(function() {

			var item = checkBoxItem(this.id), val = 0;

			if (this.checked) {

				switch( item.tagName.toLowerCase() ) {

					case "input":
						val = item.value;
						break;
						
					case "select":
						val = item.options[item.selectedIndex].value;
						break;
				}
			}
			

			data.types[this.id] = {
				active: false,
				amount: 0
			};

			if (parseInt(val) || 0 > 0) {
				result = true;
				// Save data
				data.types[this.id] = {
					active: true,
					amount: val
				};
			}

		});


		$("#content1-warning,#content1-warning-1")[!result ? "removeClass" : "addClass"]("do-not-show");

		return result;
		
	}
	
	/**
	 * Get the input field, belonging to a checkbox with the given infos
	 */
	function checkBoxItem(id) {
		return $("#" + id+ "-amount")[0];
	}
	
	var togglers = $("#donate-tabs .tab-toggle"), elements = $("#donate-tabs .tab-content");
	
	
	/**
	 * Simple accordion function for going between steps
	 */
	function gotoStep(step) {

		step--;

		if (!togglers[step] || !elements[step]) {
			/// throw "invalid Step: " + step;
			return;
		}

		for (var i = 0; i < togglers.length; i++) {
			
			var el = $(elements[i]), tog = $(togglers[i]).removeClass("complete active").unbind("click"), dur = 200,classname = "tab-toggle";
			
			if (step > i) {
				el.hide(dur);
				tog.addClass("complete").bind("click", (i==0 ? gotoHelp : gotoData));
			} else if (step == i) {
				el.show(dur);
				tog.addClass("active");
			} else if (step < i) {
				el.hide(dur); 
			}
		}
	}

	
	/**
	 * Wrapper function for various tabs
	 */
	function gotoHelp() {
		gotoStep(1);
	}
	
	function gotoData() {
		gotoStep(2);
	}
	
	function gotoThanks() {
		gotoStep(3);
	}
	
	gotoHelp();
	
});