var href = document.location.href;
	
var app = {
	
	//Rensa input vid focus
	clear_input: function(){
		
		//Spara alla formulär element med klassen "clear" i en variabel
		var selector = $("input.clear, textarea.clear");
		
		//Kolla om det finns något "clear" element annars kör inte skriptet
		if( $(selector).length == 0 ) {
			return;
		}
		else{
			$(selector).each( function() {
					
				var obj = $(this),
					val = this.defaultValue;
					
				//Själva "clear" funktionerna
				$(this).bind({
					focus: function() {
						
						if( obj.val() == val ) {
							obj.val("");
						}
						
					},
					blur: function() {
						
						if(obj.val().length == 0) {
							obj.val(val);
						}
					
					}
				});
				
			});
		}
		
	},
	
	//Sök efter kommuner
	live_search: function() {
	
		var input = $("#where"),
			list = $("<ul>"),
			holder = $("#live_search");
		
		if( input.length == 0 ) {
			return;
		}
		else{
			
			holder
			.slideUp(0)
			.append(list);
			
			input
			.attr("autocomplete", "off")
			.keyup( function() {
			
				var count = input.val().length;
				
				if( count > 1 ) {
					holder.slideDown(100);
					
					$.ajax({
						url: "/jquery.php",
						type: "GET",
						data: input.serialize(),
						success: function(data){
							addResult(data);
						}
					});
				}
				else if( count == 0 ) {
					holder.slideUp(100);
					list.html("");
				}
			
			});
			
			var addResult = function(data) {
					
				list.html(data);
				list.find("a").click( function(e) {
				
					input.val($(this).text());
					holder.slideUp(100);
					e.preventDefault();
				
				});
				
			};
			
		}
	
	},
	
	//Validering
	validate: function() {
	
		var selector = $("[validation]");
		
		var validation = {
			//Validera om fältet måste fyllas i
			required: function(obj) {
			
				obj.each(function(){
					def_val = this.defaultValue;
				});

				if( obj.val().length < 2 || obj.val() == def_val ) {
					validation.addError(obj, "Det här fältet måste fyllas i.");
					return false;
				}
				else{
					validation.removeError(obj);
					return true;
				}
				
			},
			speciale: function(obj) {
				if( obj.val() == "Ange kommun.." || obj.val().length < 2 ) {
							
					validation.addError(obj, "Det här fältet måste fyllas i.");
					return false;
							
				}
				else {
						
					validation.removeError(obj);
					return true;
						
				}
			},
			//Validera om fältet måste fyllas i
			required_num: function(obj) {
				if( obj.val() == 0) {
					validation.addError(obj, "Det här fältet måste fyllas i.");
					return false;
				}
				else{
					validation.removeError(obj);
					return true;
				}
				
			},
			//Validera minst antal tecken
			min: function(obj, val) {
				
				obj.each(function(){
					def_val = this.defaultValue;
				});
				
				if(obj.val().length < val || obj.val() == def_val ) {
					validation.addError(obj, "Det här fältet måste bestå av minst "+val+" tecken");
					return false;
				}
				else {
					validation.removeError(obj);
					return true;
				}
			
			},
			//Validera epost adress
			email: function(obj) {
			
				var pattern = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
				if( ! pattern.test(obj.val()) ) {
					validation.addError(obj, "Ogiltlig epost adress");
					return false;
				}
				else {
					validation.removeError(obj);
					return true;
				}
			
			},
			
			//Funktion för att lägga till felmeddelanden
			addError: function(obj, text) {
				
				var remove = function() {
					$(this).fadeOut(100, function(){
						$(this).remove();
					});
				};
				
				if( obj.next("span.error").length == 0 ) {
				
					obj.after(
						$("<span class=\"error\"></span>")
						.html("<span>"+text+"</span>")
						.click(remove)
					);
				
				}
			
			},
			
			//Funktion för att ta bort felmeddelanden
			removeError: function(obj) {
				
				obj.next("span.error").remove().empty();
				
			}
		};
		
		if( selector.length == 0 ) {
			return;
		}
		else{
			
			//Ta bort felmeddelanden vid focus
			selector.each( function() {
				
				$(this).focus( function() {
				
					$(this).next("span.error").remove().empty()
				
				});
				
			});
			
			selector.parents("form").submit( function(e) {
			
				selector.each( function() {
					
					var attr = $(this).attr("validation"),
						id = $(this).attr("id");
					
					
					//Om fältet måste fyllas
					if( attr == "required" ) {
						
						validation.required( $(this) );
						
					}
					
					if( attr == "required_num" ) {
						
						validation.required_num( $(this) );
						
					}
					if( attr == "speciale" ) {
					
						validation.speciale( $(this) );
					
					}
					//Om fältet har ett minimum antal tecken
					else if( !isNaN(attr) ) {
					
						validation.min( $(this), attr );
						
					}
					//Om epost adress är obligatorisk
					else if( attr == "email" ) {
					
						validation.email( $(this) );
						
					}
				
				});
				
				//Om inga fel visas skicka formuläret
				if( $("span.error").length == 0 ) {
					return true;
				}
				else{
					return false;
				}
				
				e.preventDefault();
			
			});
			
		}
	
	},
	
	//Modal fönster
	modal: function(){
    
    $("#dialogClose").click(function (e) {
       mod.close();
       e.preventDefault();
    });
    		
		var selector = $(".popup"),
			modal = $("<div id=\"modal-holder\"></div>"),
			fade = $("<div id=\"fade\"></div>").css("opacity", .8).hide(0);
		
		var mod = {
			open: function(e) {
				
				var elem = $("#" + $(this).attr("href"));
				
				$("body").append(
					fade.fadeIn(200).click(mod.close)
				);
				
				elem.appendTo( modal.hide(0).appendTo("body") ).show(0);
				
				modal.css({
					"margin-top": -(elem.height() / 2),
					"margin-left": -(elem.width() / 2)
				});
				
				modal.fadeIn(200);
				
				$(document).bind("keydown", mod.handleEsc);
				e.preventDefault();
				
			},
			
			handleEsc: function(e) {
			
				if( e.keyCode == 27 ) {
					mod.close();
				}
			
			},
			
			close: function() {
				
				var remove = function(){
					$(this).remove();
				}
				
				modal.children().hide().appendTo("body");
				fade.fadeOut(200, remove);
				modal.fadeOut(200, remove);
			}
		};
		
		if( selector.length == 0 ) {
			return;
		}
		else{
		
			selector.each(function(){
				
				$(this).click(mod.open);
			
			});
		
		}
		
	},
	
	header_categories: function() {
		$("#header_categories").find("a").bind("click", function() {			
			if (href.indexOf("index_vn2.php") != -1)
			{
				val = $(this).attr("rel");
				obj = $("#huvudkategori");
				obj.find("option").each(function() {
					if ($(this).val() == val)
					{
						$(this).attr("selected", "selected");
						obj.trigger("change");
						app.style_select();
						return;
					}
				})
				return false;
			}
		});
	},
	
	category_select: function() {
	
		var selector = $("#category");
		var clicker = selector.find("a.head"),
			dropdown = selector.find("ul");
		
		selector.removeClass("noJs");
		
		clicker.click( function(e) { 
			
			if( !selector.hasClass("active") ) {
				
				selector.addClass("active");
				dropdown.slideDown(120);	
				
				$(document).bind("click", handleDoc);
			}
			else {
				
				close();
				
			}
			
			dropdown.find("a").click( function(e) {
				
				var text = $(this).text();
				
				clicker.find("span.value").text(text);
				$("#category_value").val( $(this).attr("rel") );
				close();
				e.preventDefault();
				
			});
			
			
			e.preventDefault();
		
		});
		
		function close() {
			
			dropdown.slideUp(60, function() {
				
				selector.removeClass("active");
				$(document).unbind("click", handleDoc)
					
			});
				
		}
		
		function handleDoc(e) {
		
			var click = $(e.target);
			if( !click.parents().hasClass("select-menu") ) {
			
				close();
			
			}
		
		}
		
	},
	
	change_category: function() {
	
		var selector = $("#huvudkategori"),
			target = $("#underkategori");
		
		if( selector.length > 0 ) {
		
			selector.change(function() {
				
				var getMeth = $.get( "/jquery.php?" + $(this).serialize() );
				
				getMeth.success( function(data) {
					
					target.html(data);
					app.style_select();
					
				});
				
				getMeth.error( function() {
				
					alert("Ett fel uppstod vid val av kategori.\n Var vänlig att ladda om sidan och försök igen!");
				
				});
				
			});
		
		}
	
	},
	
	style_select: function() {
	
		var selector = $("select");
		
		selector.each( function() {
			
			var target = $("<span class=\"select medium\"></span>"),
				default_text = $("option:selected", this).text();
			
			$(this).siblings("span.select").remove();
			

			$(this).css({
				"opacity": 0,
				"z-index": 10,
				"position": "absolute"
			});
			$(this).after(target.text(default_text));


			$(this).change( function() {
			
				var text_now = $("option:selected", this).text();
				$(this).next("span.select").text(text_now);
			
			});
		
		});
	
	},
	
	ui_elem: function() {
		
		var selector = $(".ui_elem");
		
		if( selector.length > 0 ) {
			
			selector.each(function() {
			
				var type = $(this).hasClass("radio") ? "radio" : "checkbox",
					elem = "#" + $(this).attr("for"),
					holder = $("<div class=\"ui_elem_holder\"></div>");
				
				$(elem).css("visibility", "hidden");
				$(this).after(holder);
				holder.append($(elem)).append($(this));
				
				$(this).click( function() {
					
					if( type == "radio" ) {
					
						var name = $(elem).attr("name");
						$("input[name*=\"" + name + "\"]").each( function() {
							
							$(this).next("label").removeClass("checked");
							
						});
						
						$(this).addClass("checked");
						
					}
					else {
						
						if( !$(this).hasClass("checked") ) {
							$(this).addClass("checked");
						}
						else {
							$(this).removeClass("checked");
						}
						
					}
					
				});
			
			});
			
		}
		
	}

};

$(function() {
	app.clear_input();
	app.header_categories();
	app.live_search();
	app.modal();
	app.validate();
	app.change_category();
	app.style_select();
	app.ui_elem();
	
	if( $("#category").length > 0 ) {
	
		app.category_select();
		
	}

});
