var safeOnLoad = null;
// Use function scope to avoid polluting global namespace
(function($/* $ === jQuery */) {
	// Custom fake select box
	$.fn.fakeSelect = function() {
		return this.each(function() {
			var fakeSel = $(this);
			var fakeOpt = $("<span/>").appendTo(fakeSel);
			var realSel = fakeSel.find("select");

			var setText = (function changeText() {
				var selected = realSel.find("option:selected");
				fakeOpt.text(selected.text());
				return changeText;
			})();
			realSel.bind("change", setText);
		});
	};

	// Show placeholder text and clear it on focus
	$.fn.clearField = function(className) {
		var cName = className || "placeholder";
		return this.each(function() {
			var input = $(this);
			var defText = input.attr("title");
			input.val(defText).bind("focus", function() {
				if (input.val() === defText) {
					input.removeClass(cName).val("");
				}
			});
			input.val(defText).bind("blur", function() {
				if (input.val().length === 0) {
					input.addClass(cName).val(defText);
				}
			});
		});
	};

	// For flash
	window.kgNext = function() {
		window.location.href = $("#kg_next").attr("href");
	};
	window.kgPrev = function() {
		window.location.href = $("#kg_prev").attr("href");
	};

	// On DOM ready
	safeOnLoad = function() {
		if ($("select").length == 0 || safeOnLoad == null) //Ugly
			return;
		safeOnLoad = null;
		var fakeSelects = $("span.kg_select");
		fakeSelects.fakeSelect();
		// IE fix
		if ($.browser.msie && false) {
			window.setInterval(function() {
				fakeSelects.trigger("change");
			}, 500);
		}

		var clearFields = $("div.kg_form input.placeholder");
		clearFields.clearField();

		var contactForm = $("div.kg_contact");
		var selects = contactForm.find("span.kg_select");

		selects.each(function() {
			var select = $("select", this);
			var firstVal = select.find("option").eq(0).val();

			var showForm = function() {
				var selected = select.find("option:selected");
				var target = $(selected.attr("title"));

				if (target.length && target.is(":hidden")) {
					target.addClass("open").siblings().removeClass("open");
				} else if (select.find("option:selected").val() === firstVal) {
					target.siblings().andSelf().removeClass("open");
				}

			};
			showForm();
			select.bind("change", showForm);
		});

		var toggleLinks = $("a.kg_toggle");
		toggleLinks.click(function(e) {
			e.preventDefault();
			var target = $(this.hash);
			if (!target.hasClass("open")) {
				window.location.hash = "#show=" + this.hash.slice(1);
			} else { window.location.hash = "#_"; }
			target.toggleClass("open");
		});

		if (/show=\w+/.test(window.location.hash)) {
			$("#" + window.location.hash.match(/show=(\w+)/)[1]).addClass("open");
		}

		// Submit buttons
		var submitButtons = $("button.kg_submit");
		submitButtons.each(function(e) {
			var b = $(this);
			var text = b.attr("title");
			var inputs = b.parent().find("input");
			if (b.parents(".kg_contact").length > 0) {
				inputs = inputs.add("select");
			}
			b.removeAttr("title").click(function(e) {
				e.preventDefault();
				//Clear defaults
				inputs.each(function() {
					if ($(this).val() == $(this).attr("title"))
						$(this).val("");
				});
				var submitData = inputs.serialize();
				//Reset title defaults
				inputs.each(function() {
					if ($(this).val() == "")
						$(this).val($(this).attr("title"));
				});
				$.ajax({
					url: officeGuideFormUrl,
					data: submitData,
					success: function(r) {
						
						var msg = b.parent().children().eq(0);
						if (!msg.length) { msg = $("<p/>").prepend(b.parent()); }
						msg.addClass("success").removeClass("error")
						msg.text(text);						
						logStatistics(b);
						msg.siblings().css("visibility", "hidden")
					},
					error: function(xhr) {
						var next = b.next();
						if (!next.length) { next = $("<p/>").insertAfter(b); }
						next.addClass("error");
						next.html(xhr.responseText); // Should contain error from server
					}
				});
			});
		});

		// Make all inputs with same name "synchronized"
		$(".kg_contact input").change(function() {
			var input = $(this);
			var other = $(".kg_contact input[@name=" + input.attr("name") + "]");
			other.removeClass("placeholder");
			other.val(input.val());
		});
	};

	if (!$.browser.msie)
		$(safeOnLoad);

	function logStatistics(btn) {
		if (typeof (pageTracker) == "undefined")
			return;

		var kind;
		if (btn.parents(".kg_order").length > 0)
			kind = "kontorshandboken";
		else
			kind = $(".kg_contact select").val() + "/" + btn.parent().find("input[@name=area]").val();

		var url = "/form/kontorsguiden/" + kind;
		pageTracker._trackPageview(url);
	}

})(jQuery);                                // Use jQuery as argument so we can use any name for it inside the function