﻿/**
 * Beschreibung:
 * 
 * Hier werden die normalen Select Boxen in "pretty-select" Boxen verwandelt, die optisch besser in die Seite passen.
 * Am Ende wird der Submit Eventhandler gesetzt der die pretty-select boxen auswertet und dann die Felder berprft.
 */

jQuery.noConflict();

(function($) {

$(function() {
	/*
		<div class="pretty-select pos-rel">
			<a href="#" class="fright select-pointer active"></a><p>-</p>
			<ul class="pos-abs">
				<li><a href="#" class="selected">-</a></li>
				<li><a href="#">Dr.</a></li>
			</ul>
		</div>
	*/
	
	$(".select").each(function() {
		var parentBox = $(this).parent();
		var name = $(this).attr("name");   // namen speichern um bei submit die hidden input felder richtig zu benamen
		
		parentBox.append("<div class=\"pretty-select pos-rel hidden-vis\"><a href=\"#\" class=\"fright select-pointer\"></a><p></p><ul class=\"pos-abs\"></ul></div>");
		
		parentBox.find(".pretty-select").data("name", name);
		
		$(this)
			.find("option")
			.each(function(i) {
				
				// generiere die Liste:
				var text = $(this).text() || "&nbsp;";
				parentBox.find(".pretty-select ul").append("<li><a href=\"#\">"+text+"</li>");
				
				if(i === 0) { // setze das erste element auf standard
					parentBox
						.find(".pretty-select p")
						.html($(this).text() || "&nbsp;")
						.next()
						.find("li:last a")
						.addClass("selected");
				}
				
				// registriere die click handler auf den links
				parentBox.find(".pretty-select li:last a").click(function() {
					parentBox
						.find(".pretty-select p")
						.text($(this).text())
						.next()
						.find(".selected")
						.removeClass("selected");
						
						$(this).addClass("selected");
						
						// lass die ul wieder einfahren
						parentBox.find(".select-pointer").trigger("click");
						
						return false;
				});
				
			});
		
		if(parentBox.find(".pretty-select li").length > 0) { // IE bindet keine li ein!
			
			$(this).hide();													// verstecke die select box
			parentBox.find(".pretty-select").css("visibility", "visible");  // zeige die pretty-select box
			
			parentBox.find(".select-pointer").toggle(
				function() {
					$(this).addClass("active").parent().find("ul").slideDown("fast");
				},
				function() {
					$(this).removeClass("active").parent().find("ul").slideUp("fast");
				}
			);
		
		}
		else { // um dem IE die normalen Selectboxen zu zeigen
			
			parentBox.find(".pretty-select").remove();
			
		}
	});
	
	
	
	$("form:first")
		.bind("submit", function(e) {
			var frm = $(this);
			var valid = true;
			
			var regExMail = /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i;
			
			frm.find(".LV_invalid").remove();
			
			// Validation
			frm.find(".text, .textarea, .select").each(function() {
				var $this = $(this);
				
				if(!($this.hasClass("required") || $this.hasClass("mailvalidation")))
					return;
			
				var name = $this.attr("name");
				var label = $this.prev().text().replace(/\*/, "");
				var presenceFailure = label + " ist erforderlich!";
				var mailFailure = "Gültige E-Mail Adresse erforderlich!";
				
				// Presence Check
				if($this.hasClass("required")) {
					var prettySelect = $this.parent().find(".pretty-select");
					if(prettySelect.length > 0) {
						if(prettySelect.find("p").html() == "&nbsp;") {
							valid = false;
							setInvalidMsg($this.parent().parent(), presenceFailure);
						}
					}
					else if($this.val() === "" || $this.val() === null || $this.val() === undefined) {
						valid = false;
						setInvalidMsg($this.parent(), presenceFailure);
					}
				}
				
				// Mail Check
				if($this.hasClass("mailvalidation")) {
					if(! $this.val().match(regExMail)) {
						valid = false;
						setInvalidMsg($this.parent(), mailFailure);
					}
				}
			});
			
			if(valid) {
				frm.find(".LV_invalid").remove();
				
				frm.find(".pretty-select").each(function() {
					var t = $(this).find("ul a.selected").text();
					var n = $(this).data("name");
					
					$(this).append("<input type='hidden' name='"+n+"' value='"+t+"'>");
				});
				
				frm.append("<img src=\"images/ajax-loader.gif\" alt=\"Loading...\" id=\"ajax-loader\" style=\"display: block;\">");
				
				
				var url = frm.attr("action");
				var type = frm.attr("method");
				var data = frm.serialize();
				
				$.ajax({
					type: type,
					url: url,
					data: data,
					contentType: "application/x-www-form-urlencoded; charset=UTF-8",
					success: function(msg) {
						$("#ajax-loader").hide().remove();
						msg = "<div class=\"infobox hidden\">"+msg+"</div>";
						frm.append(msg).find("div.hidden").show();
						
						$("#wrap").trigger("resize");
						
						frm.unbind("submit").bind("submit", function() { return false; });
					}
				});
				return false;
			}
			else {
				return false;
			}
		});
		
		
	// HELPER FUNCTION
	function setInvalidMsg(elem, msg) {
		if(elem.find(".LV_invalid").length > 0)
			elem.find(".LV_invalid").text(msg);
		else
			elem.append('<span class="LV_invalid">'+msg+'</span>');
	}
		
});
})(jQuery);
