function initPayment() {
	
	$(".vatCountry").attr("name", "country");
	
	function setFields(form, hasSupport) {
		var c = $("input[name=custom]", form),
			 json = eval("(" + c.val() + ")");
	
		// custom fields support
		$.each($(".customFields :input, .customInput", form).serializeArray(), function() {
		  var el = $(this);
		  json[el.attr("name")] = el.val();
		});
	
		if (!$(".vat", form).is(":checked")) {
			delete json.eu;
			delete json.companyName;
			delete json.country;
			delete json.vatId;
		}
		
		c.val(flashembed.asString(json));
		
		// include support in item name
		c = $("input[name=item_name]", form);
		c.val(c.val().replace(" + Support", "").replace(" + ALV", ""));
		if (hasSupport) { c.val(c.val() + " + Support"); }				
		
		// alv
		var amField = $("input[name=amount]", form);
		if ($(".vatCountry", form).val() == 'FI') {
			amField.val(round(1.22 * amField.val()));
			c.val(c.val() + " + ALV")
		}
	
		$(".vatCountry").attr("name", "CC");
	}
	
	function round(am) {
		return Math.round(parseFloat(am) * 100) / 100;	
	}
	
	/**** commercial ****/
	$("form.commercial").submit(function() {
		var form = $(this),
			 opt = $(".currency:visible option:selected", form),
			 price = parseInt(opt.val(), 10),
			 am = parseInt(opt.text(), 10) || 1,
			 hasSupport = $(".supportItem", form).is(":checked"),
			 support = parseInt($("label span:visible", form).text(), 10);
	
		// quantity
		if (opt.length) {
			$("input[name=quantity]", form).val(am);
		
			// price
			if (hasSupport) { price += support; }
			$("input[name=amount]", form).val(round(price / am));
		}
		
		// hiddens
		return setFields(form, hasSupport);
		
		
	// currency switcher
	}).find(":radio").each(function(i) {
		
		var form = $(this).closest("form");
		
		$(this).click(function() {
			$(".currency", form).hide().eq(i).show().triggerHandler("change");
			$("div.upgrade span", form).hide().eq(i).show();
			$(".supportItem", form).nextAll("span").hide().eq(i).show();
		});
	
	}).eq(0).click();		
			
	
	
	/**** multidomain. unlimited ****/
	$("form.multidomain, form.unlimited").each(function()  {
		var form = $(this);
		
		form.submit(function() {
				
			var price = parseInt($("p.multiprice strong:visible", form).text()),
				 hasSupport = $(".supportItem", form).is(":checked"),
				 support = parseInt($("label span:visible", form).text());
	
				 
			// this is an upgrade
			if (!price) {
				price = parseInt($("p.upgradeprice strong:visible", form).text());
			}
			
			// price
			$("input[name=amount]", form).val(hasSupport ? price + support : price);
	
			
			var utype = $("#utype", form); 
			if (utype.length && !utype.val()) {
				alert("Usage type must be selected");
				utype.focus();
				return false;
			}
						
			// hiddens
			return setFields(form, hasSupport);	
			
		});
		
		
		// currency switcher
		form.find(":radio").each(function(i) {
			
			$(this).click(function() {
				var price = $("p.multiprice strong", form).hide().eq(i).show();
				$("div.upgrade span", form).hide().eq(i).show();
				$("input[name=amount]", form).val(parseInt(price.text()));
				$("label span", form).hide().eq(i).show();
			});
			
		}).eq(0).click();		
		
	});
	
	/***** unlimited extra fields (e0) *****/
	
	$("#utype").change(function() {
		var el = $(this), val = el.val();
		
		$("#e0").toggle(!!val);		
		
		if (val) {
			$("#e1").text(val == 'service' ? 'Service name' : 'Product name');
			$("#e2").text(val == 'service' ? 'Service Domain' : 'Product website');
		}
	});			
	
	
	
	$(".vat").click(function() {
		$(this).closest("p").next().toggle(this.checked);
		
	}).trigger("change");
	
	
	$("input[name=vatId]").change(function() {
		var el = $(this),
			 option = el.prev().find("option:selected"),
			 vals = option.attr("title").split(","),
			 val = $.trim(el.val()),
			 valid = !val || $.inArray("" + val.length, vals) != -1,
			 msg = el.next(".error").empty();
		 
		 if (!valid) {
		 	if (!msg.length) {
				msg = $("<p/>").addClass("error").insertAfter(el); 
			}
			msg.fadeOut().fadeIn().html(
				"Vat ID is " + vals.join(" or ") + " characters <br/> long in " + 
				option.text() + ". Please fix"
			);
		 }
		 
	});
	
}

