function ContactForm(container) {	
	function validateTextInput(input) {
		if (jQuery.trim($(input).val()) == "") {
			$(input).addClass("invalid");
			return false;
		}
		else {
			$(input).removeClass("invalid");
			return true;
		}
	}
	
	function validateSelectInput(input) {
		if ($(input).val() == "-1") {
			$(input).addClass("invalid");
			return false;
		}
		else {
			$(input).removeClass("invalid");
			return true;
		}
	}
	
	function getProvinceName(id) {
		switch(id) {
			case "-1":
				return "clean";
			case "1":
				return "dolnoslaskie";
			case "2":
				return "kujawsko_pomorskie";
			case "3":
				return "lubelskie";
			case "4":
				return "lubuskie";
			case "5":
				return "lodzkie";
			case "6":
				return "malopolskie";
			case "7":
				return "mazowieckie";
			case "8":
				return "opolskie";
			case "9":
				return "podkarpackie";
			case "10":
				return "podlaskie";
			case "11":
				return "pomorskie";
			case "12":
				return "slaskie";
			case "13":
				return "swietokrzyskie";
			case "14":
				return "warminsko_mazurskie";
			case "15":
				return "wielkopolskie";
			case "16":
				return "zachodnio_pomorskie";
			case "17":
				return "clean";
			default:
				return null;
		}
	}
	
	function setMapPosition() {
		var bgImage = $("img[name='bgImage']", $(container));
		var fgImage = $("img[name='fgImage']", $(container));

		var top = bgImage.position().top;
		var left = bgImage.position().left;
		fgImage.css("top", top);
		fgImage.css("left", left);
	}
	
	function setProvince(id) {
		var provinceName = getProvinceName(id);
		var provinceSelect = $("select[name='province']", $(container));
		var bgImage = $("img[name='bgImage']", $(container));
		
		if (provinceName == null) {
			return;
		}
		
		provinceSelect.val(id);
		
		var imageSrc = "img/map/edg_" + provinceName + ".gif";
		bgImage.attr("src", imageSrc);
		
		$.cookie("province_id", id, { expires: 30 });
	}
	
	function mapMouseEnter() {
		var fgImage = $("img[name='fgImage']", $(container));
		
		if (fgImage.queue().length > 1) {
				fgImage.clearQueue();
		}

		fgImage.css("opacity", "1");

		var provinceName = getProvinceName($(this).attr("provinceId"));
		fgImage.fadeOut(0, function () {
				$(this).attr("src", "img/map/noedg_" + provinceName + ".gif");
				$(this).fadeIn(300);
		});
	}
	
	function mapMouseLeave() {
		var fgImage = $("img[name='fgImage']", $(container));
		fgImage.attr("src", "img/map/edg_clean.gif");
	}
	
	this.load = function() {
		var textInputs = $("input[type='text']", container);
		var selectInputs = $("select", container);
		var provinceSelect = $("select[name='province']", container);
		var bgImage = $("img[name='bgImage']", $(container));
		var mapAreas = $("#mapAreas area", $(container));
		var submitButton = $("input.submitButton", container);
		var resetButton = $("input.resetButton", container);
		
		textInputs.change(function() { validateTextInput(this); });
		selectInputs.change(function() { validateSelectInput(this); });
		
		provinceSelect.change(function() {
			setProvince($(this).val());
			validateSelectInput(this);
		});
		
		provinceSelect.keyup(function() {
			setProvince($(this).val());
			validateSelectInput(this);
		});
		
		if ($.cookie("province_id") != null) {
			setProvince($.cookie("province_id"));
		}
		else {
			setProvince("-1");
		}

		bgImage.load(setMapPosition);

		mapAreas.click(function() { setProvince($(this).attr("provinceId")); });
		mapAreas.mouseenter(mapMouseEnter);
		mapAreas.mouseleave(mapMouseLeave);
		
		submitButton.click(this.validate)
		resetButton.click(this.reset);
	}
	
	this.validate = function() {
		var isValid = true;
		
		var name = $("input[name='name']", $(container));
		var email = $("input[name='email']", $(container));
		var phone = $("input[name='phone']", $(container));
		var city = $("input[name='city']", $(container));
		var area = $("input[name='area']", $(container));

		var descriptionType = $("select[name='description_type']", $(container));
		var descriptionRange = $("select[name='description_range']", $(container));
		var buildingPurpose = $("select[name='building_purpose']", $(container));
		var province = $("select[name='province']", $(container));

		if (!validateTextInput(name)) { isValid = false; }
		if (!validateTextInput(email)) { isValid = false; }
		if (!validateTextInput(phone)) { isValid = false; }
		if (!validateTextInput(city)) { isValid = false; }
		if (!validateTextInput(area)) { isValid = false; }

		if (!validateSelectInput(descriptionType)) { isValid = false; }
		if (!validateSelectInput(descriptionRange)) { isValid = false; }
		if (!validateSelectInput(buildingPurpose)) { isValid = false; }
		if (!validateSelectInput(province)) { isValid = false; }

		return isValid;
	}
	
	this.reset = function() {
		var name = $("input[name='name']", $(container));
		var email = $("input[name='email']", $(container));
		var phone = $("input[name='phone']", $(container));
		var city = $("input[name='city']", $(container));
		var area = $("input[name='area']", $(container));

		var descriptionType = $("select[name='description_type']", $(container));
		var descriptionRange = $("select[name='description_range']", $(container));
		var buildingPurpose = $("select[name='building_purpose']", $(container));
		var province = $("select[name='province']", $(container));

		name.val("");
		email.val("");
		phone.val("");
		city.val("");
		area.val("");

		descriptionType.val("-1");
		descriptionRange.val("-1");
		buildingPurpose.val("-1");
		setProvince("-1");

		name.removeClass("invalid");
		email.removeClass("invalid");
		phone.removeClass("invalid");
		city.removeClass("invalid");
		area.removeClass("invalid");

		descriptionType.removeClass("invalid");
		descriptionRange.removeClass("invalid");
		buildingPurpose.removeClass("invalid");
		province.removeClass("invalid");
	}
}

