(function ($) {

	var isIE = (navigator.appVersion.split("MSIE").length != -1);
	var isBadIE = isIE && parseFloat(navigator.appVersion.split("MSIE")[1]) < 8 || false;
	var defaults = {
		"attr" : "lightbox",
		"container" : "lightbox"
	};

	var prettify = function ($this) {
		if ($this.css("behavior") == "auto") {
			$this.css({"behavior" : "url(/themes/front/js/PIE.htc)"});
			$(".newsletter .input").css({"behavior" : "url(/themes/front/js/PIE.htc)"});
		}
		$this.css({visibility: "visible"});
	};

	var processContent = function () {
		var target = $($this.attr(options.attr));
		var container = $('<div class="' + options.container + '"><div class="container"></div></div>');

		target.css("visibility", "hidden").addClass("content");
		container.children().append(target.remove());

		$this.click(function (event) {
			container.css("visibility", "visible");
			event.preventDefault();
		});
		if (isIE) {
			$this.click(function (event) {
				prettify(target);
			});
		}
		else {
			$this.click(function (event) {
				target.css("visibility", "visible");
			});
		}

		return {container: container, target: target}
	};

	var processLink = function ($this, options) {
		var container = $('<div class="' + options.container + '"><div class="container"><div class="content"></div></div></div>');
		var target = container.children().children();

		$this.click(function (event) {
			container.css("visibility", "visible");
			target.html('<div class="loader"></div>');
			prettify(target);
			target.load(
				$this.attr("href") + " " + $this.attr(options.attr),
				function () {
					var content = target.children();
					var className = content.attr("class");
					if (className) {
						target.addClass(className);
						content.attr("class", "");
					}
					prettify(target);

					// Newsletter form validation
					$('#EmailForm').submit(function validate() {
						var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
						var address = $('#Email').val();
						if (! address) {
							$(this).children('.error').html('Email nécessaire!');
							return false;
						}
						if(reg.test(address) == false) {
							$(this).children('.error').html('Mauvais format e-mail!');
							return false;
						}
						return true;
					});

					// Intercative plan initialization
					var marks = target.find("#plan p.caption");
					if (marks.length) {
						var map = target.find("#plan p.image");
						var show = function () {
							marks.hide();
							$(this._parent).show();
						}
						var hide = function () {
							marks.hide();
							$(map.get(0)._default).show();
						}
						marks.children("span.plan-mark").each(function () {
							var $this = $(this);
							this._parent = this.parentNode;
							map.append($this.remove());
							$this.click(function () {
								show.apply(this);
								$(this).unbind('mouseleave', hide);
								map.get(0)._default = this._parent;
							});
							$this.mouseenter(function () {
								show.apply(this);
								$(this).mouseleave(hide);
							});
						});
						map.get(0)._default = marks.first().get(0);
						hide();
						target.parent().css({paddingTop: 30});
					}
				}
			);
			event.preventDefault();
		});

		return {container: container, target: target}
	};

	$.fn.lightbox = function (options) {
		var options = $.extend(true, defaults, options);

		this.each(function () {
			var $this = $(this);

			if ($this.attr("href")) {
				var result = processLink($this, options);
			}
			else {
				var result = processContent($this, options);
			}

			$("body").append(result.container);

			result.container.click(function () {
				result.target.css("visibility", "hidden");
				result.container.css("visibility", "hidden");
			});

			result.target.click(function (event) {
				event.stopPropagation();
			});
		});
	}
})(jQuery);

