(function(win, doc, $) {

win.gup = win.gup || {
	init: function() {
		gup.utils.fix1024();
		
		if( $(".show-in-fancybox").length ) {
			gup.fancybox.init();
		}
		
		setTimeout(function() {gup.prizeGame.open();}, 5000);
	},
	
	fancybox: {
		ready: false,
		queue: null,
		init: function() {
			var finished = function() {
				gup.fancybox.ready = true;
				if( gup.fancybox.queue ) {
					gup.fancybox.queue();
				}
			};
			
			// JS einbinden
			var includeScript = function() {
				$.getScript("js/fancybox/jquery.fancybox-1.3.1.pack.js", finished);
				$.getScript("js/fancybox/jquery.easing-1.3.pack.js");
			};
			
			var cssProps = {
				type: "text/css",
				rel: "stylesheet",
				href: "js/fancybox/jquery.fancybox-1.3.1.css"
			};
			
			// CSS einbinden
			if( $.browser.msie ) {
				var node = gup.utils.createDOMNode("link", cssProps);
				node.onreadystatechange = function () {
					var readyState = this.readyState;
					
					if (readyState === "loaded" || readyState === "complete") {
						this.onreadystatechange = null;
						includeScript();
					}
				};
				$("head").get(0).appendChild(node);
			}
			else {
				$("<link />", cssProps).appendTo("head");
				
				includeScript();
			}
		}
	},
	
	// Gewinnspiel 2010
	prizeGame: {
		id: "#gewinnspiel-2010",
		fbSettings: {
			autoScale: false,
			href: "#gewinnspiel-2010",
			padding: 0,
			
			// Dimensionen:
			autoDimensions: false,
			width: 640,
			height: 450,
			
			// EventHandler:
			onComplete: function() {
				gup.prizeGame.showContent(1);
				gup.prizeGame.addParticipateListener();
				gup.prizeGame.addFormListener();
				gup.prizeGame.addTermListener();
				gup.prizeGame.addPrizesListener();
			},
			onClosed: function() {
				gup.prizeGame.reset();
			}
		},
		open: function() {
			gup.prizeGame.fixBugs();
			
			if( !gup.fancybox.ready ) {
				gup.fancybox.queue = function() {
					$.fancybox(gup.prizeGame.fbSettings);
				};
			}
			else {
				$.fancybox(gup.prizeGame.fbSettings);
			}
		},
		reset: function() {
			var lb = $( gup.prizeGame.id );
			
			gup.prizeGame.removeFormListener();
			gup.prizeGame.removeTermListener();
			gup.prizeGame.removePrizesListener();
			
			gup.prizeGame.hideInnerLightbox();
			gup.prizeGame.addInnerLbCloseListener();
			gup.prizeGame.hideContent(2);
			gup.prizeGame.showContent(1);
			
			// reset Form:
			lb.find("form input:text").each(function() {
				var self = $(this);
				if( self.attr("placeholder") ) {
					this.value = self.attr("placeholder");
				}
				else {
					this.value = "";
				}
			});
			lb.find("form input:checked").each(function() {
				this.checked = false;
			});
			lb.find("form select").each(function() {
				this.selectedIndex = 0;
			});
			//setTimeout(function() {gup.prizeGame.open();}, 1000);
		},
		fixBugs: function() {
			if( $.browser.msie && parseFloat($.browser.version) <= 7.0 ) {
				$( gup.prizeGame.id ).find("#submit").val("");
			}
		},
		showContent: function(id) {
			if( id === 1 ) {
				$("#content1-left").css({ left: "0" });
				$("#content1-right").css({ left: "320px" });
			}
			
			if( id === 2 ) {
				var imgLeftTop = $("#content2-left img:first"),
					imgLeftBottom = $("#content2-left img:last");
				
				$("#content2-left").css("left", "0");
					
				// linke seite einfahren
				imgLeftTop.css({
					top: "-305px",
					left: "7px"
				}).animate({
					top: "16px"
				}, { duration: 1000, easing: "easeOutBounce" });
				
				imgLeftBottom.css({
					top: "450px",
					left: "15px"
				}).animate({
					top: "313px"
				}, { duration: 1000 });
				
				// rechte seite einfahren
				$("#content2-right").animate({
					left: "320px"
				}, { duration: 1000, easing: "easeOutExpo" });
				
				/*setTimeout(function() {
					$(".footnote").css({
						bottom: "-20px",
						display: "block"
					}).animate({
						bottom: "5px"
					}, { duration: 400 });
				}, 1000);*/
			}
		},
		hideContent: function(id, callback) {
			var duration, easing;
			
			if( id === 1 ) {
				duration = 700; easing = "easeOutQuint";
				
				// linke seite rausfahren
				$("#content1-left").animate({
					left: "-320px"
				}, { duration: duration, easing: easing });
				
				// rechte seite rausfahren
				$("#content1-right").animate({
					left: "640px"
				}, { duration: duration, easing: easing, complete: callback });
			}
			
			if( id === 2 ) {
				$("#content2-left").css({ left: "-320px" });
				$("#content2-right").css({ left: "640px" });
			}
		},
		addFormListener: function() {
			$( gup.prizeGame.id ).find("form").bind("submit", gup.prizeGame.validateForm);
		},
		removeFormListener: function() {
			$( gup.prizeGame.id ).find("form").unbind("submit", gup.prizeGame.validateForm);
		},
		addTermListener: function() {
			$("#terms").next().find("a").bind("click.myTerms", function(e) {
				if( gup.prizeGame.termsContent === "" ) {
					$.get(this.href, function(data) {
						gup.prizeGame.termsContent = data;
						gup.prizeGame.showInnerLightbox(data);
					});
				}
				else {
					gup.prizeGame.showInnerLightbox(gup.prizeGame.termsContent);
				}
				e.preventDefault();
			});
		},
		removeTermListener: function() {
			$("#terms").next().find("a").unbind("click.myTerms");
		},
		termsContent: "",
		addParticipateListener: function() {
			$("#participate").bind("click", function(e) {
				e.preventDefault();
				gup.prizeGame.hideContent(1, function() {
					gup.prizeGame.showContent(2);
				});
			});
		},
		addPrizesListener: function() {
			$( gup.prizeGame.id ).delegate(".prizes", "click.games", function(e) {
				if( gup.prizeGame.prizeContent === "" ) {
					$.get(this.href, function(data) {
						gup.prizeGame.prizeContent = data;
						gup.prizeGame.showInnerLightbox(data, "prizes");
					});
				}
				else {
					gup.prizeGame.showInnerLightbox(gup.prizeGame.prizeContent, "prizes");
				}
				e.preventDefault();
			})
			.delegate(".prizes", "hover.games", function(e) {
				$("#content1-right").toggleClass("hover");
			});
		},
		removePrizesListener: function() {
			$( gup.prizeGame.id ).undelegate("#prizes", ".games");
		},
		prizeContent: "",
		errorMsgs: {
			"salutation": "<li>Bitte geben Sie eine Anrede an</li>",
			"firstname": "<li>Bitte tragen Sie Ihren Vornamen ein</li>",
			"lastname": "<li>Bitte tragen Sie Ihren Nachnamen ein</li>",
			"street": "<li>Bitte tragen Sie Ihre Straße ein</li>",
			"streetnr": "<li>Bitte tragen Sie Ihre Straßennummer ein</li>",
			"plz": "<li>Bitte tragen Sie Ihre Postleitzahl ein</li>",
			"city": "<li>Bitte tragen Sie Ihre Stadt ein</li>",
			"email": "<li>Bitte tragen Sie eine gültige E-Mail Adresse ein</li>",
			"terms": "<li>Sie müssen unsere Teilnahmebedingungen akzeptieren</li>"
		},
		validateForm: function(e) {
			var valid = true,
				msg = "<ul class='error-msg'>",
				emailRegexp = new RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", "i"),
				form = $(this);
			
			form.find("select").each(function() {
				if( !(this.name in gup.prizeGame.errorMsgs) || !$(this).attr("required") ) return;
				
				if( this.options[0].value === "" && this.selectedIndex < 1 ) {
					valid = false;
					msg += gup.prizeGame.errorMsgs[ this.name ];
				}
			});
				
			form.find("input").each(function() {
				if( !(this.name in gup.prizeGame.errorMsgs) ) return;
				
				var $el = $(this);
				if( $el.attr("required") ) {
					if( $el.attr("type") == "checkbox" && !this.checked ) {
						valid = false;
						msg += gup.prizeGame.errorMsgs[ this.name ];
					}
					else if( this.value === "" || this.value === $el.attr("placeholder") ) {
						valid = false;
						msg += gup.prizeGame.errorMsgs[ this.name ];
					}
					else if( this.getAttribute("type") == "email" && !emailRegexp.test(this.value) ) {
						valid = false;
						msg += gup.prizeGame.errorMsgs[ this.name ];
					}
				}
			});
			
			msg += "</ul>";
			
			if( ! valid ) {
				gup.prizeGame.showInnerLightbox(msg);
			}
			else {
				form.unbind("submit").bind("submit", function(e) {e.preventDefault();});
				gup.prizeGame.save(form);
			}
			
			e.preventDefault();
		},
		addInnerLbCloseListener: function() {
			var inner = $( gup.prizeGame.id ).find("#inner-lb");
			inner.find("#inner-lb-close").unbind("click");
			inner.delegate("#inner-lb-close", "click", function(e) {
				inner.fadeOut();
				e.preventDefault();
				e.stopPropagation();
			});
		},
		showInnerLightbox: function(content, styleClass) {
			var lb = $( gup.prizeGame.id ),
				inner = lb.find("#inner-lb");
			
			if( !inner.length ) {
				$("<div id='inner-lb'><div id='inner-lb-bg'></div><div id='inner-lb-content'></div></div>").appendTo(lb);
				inner = lb.find("#inner-lb");
				gup.prizeGame.addInnerLbCloseListener();
			}
			
			inner.get(0).className = ""; // remove all classes
			inner.addClass(styleClass).find("#inner-lb-content").html("<a href='#' id='inner-lb-close'>schließen</a>" + content);
			inner.fadeIn();
		},
		hideInnerLightbox: function() {
			var innerLb = $( gup.prizeGame.id ).find("#inner-lb");
			
			innerLb.hide().find("#inner-lb-content").html("<a href='#' id='inner-lb-close'>schließen</a>");
		},
		changeCloseBehavior: function() {
			var innerLb = $( gup.prizeGame.id ).find("#inner-lb");
			
			innerLb.undelegate("#inner-lb-close", "click");
			innerLb.find("#inner-lb-close")
				.bind("click", function(e) {
					e.preventDefault();
					
					$.fancybox.close();
				});
		},
		save: function(form) {
			gup.prizeGame.showInnerLightbox("<img src='images/ajaxLoader.gif' id='inner-lb-loader' />");
			$.post(
				"gewinnspiel2010/functions.php",
				form.serialize(),
				function(data) {
					gup.prizeGame.showInnerLightbox(data);
					gup.prizeGame.changeCloseBehavior();
				}
			);
		}
	},
	
	utils: {
		// Wenn das Fenster zu klein ist, werden die Schatten außen ausgeblendet
		fix1024: function() {
			var maxIE = 1051,
				maxFF = 1024,
				ie = $.browser.msie && $.browser.version.substr(0, 1) == "6";
			
			if(ie && document.body.offsetWidth <= maxIE && !$("#wrap_shadow").hasClass("no_shadow1")) {
				gup.utils.toggleShadow(true);
			}
			else if($("body").outerWidth() <= maxFF && !$("#wrap_shadow").hasClass("no_shadow1")) {
				gup.utils.toggleShadow(true);
			}
			
			// überprüfe die browserbreite bei einem resize des fensters
			$(window).resize(function() {
				if(ie) {
					if(document.body.offsetWidth <= maxIE && !$("#wrap_shadow").hasClass("no_shadow1")) {
						gup.utils.toggleShadow(true);
					}
					if(document.body.offsetWidth > maxIE && $("#wrap_shadow").hasClass("no_shadow1")) {
						gup.utils.toggleShadow(false);
					}
				}
				else {
					if($("body").outerWidth() <= maxFF && !$("#wrap_shadow").hasClass("no_shadow1")) {
						gup.utils.toggleShadow(true);
					}
					if($("body").outerWidth() > maxFF && $("#wrap_shadow").hasClass("no_shadow1")) {
						gup.utils.toggleShadow(false);
					} 
				}
			});
		},
		toggleShadow: function(shadow) {
			var func = shadow ? "addClass" : "removeClass";
			
			$("#wrap_shadow")[func]("no_shadow1");
			$("#wrap")[func]("no_shadow12");
			$("#footer")[func]("no_shadow2");
		},
		
		createDOMNode: function(name, attrs) {
			var node = doc.createElement(name), attr;
			
			for (attr in attrs) {
				if (attrs.hasOwnProperty(attr)) {
					node.setAttribute(attr, attrs[attr]);
				}
			}
			
			return node;
		}
	}
};

$(doc).ready(gup.init);

})(window, document, jQuery);
