var SvD = {};

if (typeof jQuery != 'undefined') {

	/*** Globala funktioner ***/
	SvD = function ($) {

		return {

			basePath : "",
			enableAjax : true,
			enableLayering : true,

			init : function () {
				this.global.init();
				this.utils.init();
			},

			global : {
				init : function () {
					this.fixes();
					this.search.init();
					this.hideEmptyAdContainers();
					this.sitemap();
					this.boxes.init();
					this.menutooltips();
					this.tvSchedule.init();
					this.forms();
				},

				fixes : function () {
					$("input[type=text]").addClass("textbox");
					SvD.enableLayering = ($("#svdwebbtv, #svdbildspecial").length > 0) ? false : true;
				},

				search : {

					init : function () {
						this.searchBox();
						this.searchResult();
						this.searchTeasers();
						this.searchArticles();
					},

					searchBox : function () {
						var searchbox = $("#searchbox");
						if (searchbox.length === 0 || !SvD.enableAjax) { return; }
						var expandVal = 'Visa fler sökalternativ';
						var hideVal = 'Dölj sökalternativ';
						var searchOptionsPath = SvD.basePath + "components/searchBox/searchOptions.jsp";
						var optionwrapper = searchbox.find(".searchoptionwrapper");

						$("#extendedsearch").addClass('expand').toggle(function() {
				      		$(this).html(hideVal).removeClass("expand").addClass("hide");
				       		optionwrapper.slideDown("medium");
				       		if (optionwrapper.find("fieldset").length === 0) {
				       			optionwrapper.load(searchOptionsPath);
				       		}
				   		}, function() {
				       		$(this).html(expandVal).removeClass("hide").addClass("expand");
				       		optionwrapper.slideUp("fast");
				   		});

				   		$("#search_categories").change( function() {
				   			var topic = searchbox.find("input[name=nav_topic]");
				   			if ($(this).val().length > 0) {
				   				if (topic.length === 0) {
				   					searchbox.append('<input type="hidden" name="nav_topic" value="topicsnavigator" />');
				   				}
				   			} else {
				   				topic.remove();
				   			}
				   		});

				   		searchbox.submit( function() {
				   			var searchsite = searchbox.find("input[name=searchsite]:checked").val();
				   			var searchword = $("#searchword").val();
				   			var searchURL;

				   			switch(searchsite) {
								case "e24":
									searchURL = "http://www.e24.se/apps/retriever/default.asp?searchWord=";
									break;
								case "jobb24":
									searchURL = "http://www.jobb24.se/jobb24/job/fulltime/result?keyword=";
									break;
								case "tasteline":
									searchURL = "http://www.tasteline.com/default.ns?lngItemID=1139&searchMode=general&view=search_all&strSearch=";
									break;
								case "mintur":
									searchURL = "http://www.mintur.se/start/sok.php?searchType=1&searchString=";
									break;
								default:
									return true;
							}
							searchURL += escape(searchword);
							window.location = searchURL;
							return false;
						});
					},

					searchTeasers : function () {
						var boxes = $("div.general-searchbox");
						if (boxes.length === 0) { return; }
						var inputs = boxes.find("form .input");
						inputs.each(function() {
							$(this).attr("defaultValue", $(this).val());
							$(this).focus(function() {
					   			if ($(this).val() == $(this).attr("defaultValue")) { $(this).val(""); }
					   		});
							$(this).blur(function() {
					   			if ($(this).val() === "") { $(this).val($(this).attr("defaultValue")); }
					   		});
							$(this).parents("form").submit(function() {
								var input = $(this).find(".input");
								if (input.val() == input.attr("defaultValue")) { input.val(""); }
							});
						});
					},

					searchArticles : function () {
						var lists = $("div.searchlist");
						if (lists.length === 0) { return; }
						lists.each(function() {
							var pagination = $(this).find("a.pagination");
							pagination.live("click", (function(evt) {
								var container = $(this).parents(".searchlist");
								if (container.length === 0) { return; }
								var articleId = container.attr("class").split("_")[1];
								var url = $(this).attr("href") + "&service=ajax&articleId=" + articleId + "&component=searchResult";
								$.ajax({
									type: "GET",
									url: url,
									success: function(html){
										container.html(html);
									},
									error: function(html){
										container.html("Misslyckades att ladda lista. <br/>Ladda om sidan och försök igen.");
									}
								});
								return false;
							}));
						});
					},

					searchResult : function () {
						var result = $("#search");
						if (result.length === 0) { return; }
						var containers = result.find("div.facet");
						containers.each(function(){
							var links = $(this).find(".js-hidden");
							if (links.length === 0) { return; }
							var parent = links.parents("ul");
							var showVal = "Visa fler...";
							var hideVal = "Dölj";
							parent.append($("<li class=\"nav\"><span class=\"toggle\">" + showVal + "</span></li>"));
							parent.find(".toggle").addClass("expand").click(function() {
								$(this).toggleClass("expand").toggleClass("hide");
								$(this).text(($(this).text() == showVal) ? hideVal : showVal);
								links.toggleClass("js-hidden");
								return false;
							});
						});

						var form = $("#searchform");
						if (form.length === 0) { return; }
						var radios = form.find("input:radio");
						radios.click(function(){
							form.submit();
						});
					}
				},

				sitemap : function () {
					if (!SvD.enableLayering || !SvD.enableAjax) { return; }
					var nav = $("#mainnavigation");
					var link = nav.find("li.sitemap a");
					var sitemap = $("#sitemap");
					if (link.length === 0 || sitemap.length === 0) { return; }
					var url = link.attr("href");
					link.addClass('expand').toggle(function() {
			      		$(this).removeClass("expand").addClass("hide");
			      		$(this).parent().addClass("expanded");
			      		if (sitemap.find("ul").length === 0) {
			      			var wrapper = sitemap.find("div.wrapper");
			       			wrapper.load(url + "?service=ajax&component=siteMap");
			       		}
			       		sitemap.slideDown("fast");
			   		},function() {
			       		$(this).removeClass("hide").addClass("expand");
			       		$(this).parent().removeClass("expanded");
			       		sitemap.slideUp("fast");
			   		});
			   		sitemap.find(".close").click(function() {
			   			link.click();
			   			return false;
					});
				},

				boxes : {
					init: function () {
						this.listbox();
						this.e24box();
						this.tastelinebox();
					},

					listbox : function () {
						if (!SvD.enableAjax) { return; }
						var column = $("#rightcolumn");
						var container = column.find(".listbox");
						if (container.length === 0) { return; }

						var menus = container.find(".maintabs, .subtabs");
						var artID = container.attr("id");
						artID = artID.split("art")[1];
						var content = container.find(".tabcontent");

						$(document).ready(function() {
							addContentBehaviours();
						});

						function addContentBehaviours() {
							var more = container.find(".morenews ul");
							if (more.length === 0) {
								content.append("<div class=\"morenews clearfix\"><ul></ul></div>");
								more = container.find(".morenews ul");
							}
							var links = container.find("li.js-hidden");
							var subnav = content.find(".subtabcontainer");
							var showVal = "Visa fler";
							var hideVal = "Dölj";
							more.append($("<li><span class=\"toggle\">" + showVal + "</span></li>").find("span").addClass("expand").click(function() {
								$(this).toggleClass("expand").toggleClass("hide");
								$(this).text(($(this).text() == showVal) ? hideVal : showVal);
								links.toggleClass("js-hidden");
								subnav.toggleClass("selected");
								return false;
							}));

							var imageList = container.find('ul.imagelist');
							if (imageList.length) {
								imageList = imageList.find("a");
								imageList.tooltip({
								    track: true,
								    delay: 0,
								    showURL: false,
								    fade: 250,
								    extraClass: "bubble",
								    fixPNG: true,
								    bodyHandler: function() {
								    	var content = $(this).find(".title").html();
								    	var className = $(this).parent().attr("class");
								    	return $("<p class=\"" + className + "\">").html(content);
								    }
								});
							}

						}

						$(menus).live("click", function(e){
						    $(e.target).closest("a").each(function() {
						    	var li = $(this).parent();
						    	var ul = $(this).parent().parent();
						    	if (!li.hasClass("selected")) {
							    	li.siblings().removeClass("selected");
							        var className = li.attr("class");
							        var type = ul.hasClass("maintabs") ? "maintabs" : "subtabs";
							       	li.addClass("selected");
							       	if (type != "subtabs") {
							       		container.find(".subtabcontainer").hide().filter("." + className).show().find(".subtabs li").removeClass("selected").filter(":first").addClass("selected");
									}
							       	var url = $(this).attr("href");
									url += "&service=ajax&component=tabView&articleId=" + artID;
							        content.html('<p class="loading">Laddar...</p>').load(url, function(){
										addContentBehaviours();
									});
								}
						        e.preventDefault();
						    });
						});
					},

					e24box : function () {
						var box = $("div.e24articlebox");
						if (box.length) {
							var links = box.find("a");
							links.attr("target", "_blank");
						}
					},

					tastelinebox : function () {
						var boxes = $("div.tasteline-main-search, form.tasteline-wine-search");
						if (boxes.length) {
							boxes.each(function () {
								box = $(this);
								var options = box.find(".options");
								var values = ['Visa fler sökalternativ', 'Dölj sökalternativ'];
								var className = "hidden";
								var toggler = $("<p class=\"toggle tasteline-header " + className + "\">" + values[0] + "</p>");
								box.find(".toggler-placement").append(toggler);
								toggler.click(function() {
									$(this).html($(this).hasClass(className) ? values[1] : values[0]).toggleClass(className);
									options.toggle();
								});
							});
						}
						var menu = $("#tasteline-menu-box");
						if (menu.length) {
							var items = menu.find(".day");
							var nav = menu.find(".navigation");
							var links = nav.find("a");
							links.click(function() {
								var item = "#" + $(this).attr("href").split("#")[1];
								nav.find("li").removeClass("selected");
								$(this).parents("li").addClass("selected");
								items.hide();
								$(item).show();
								return false;
							});
						}
					}
				},

				menutooltips : function () {
					var className;
					var toolTip;
					var title;
					var wrapperOffset;

					var nav = $("#mainnavigation");
					var tabs = nav.find("li.tasteline");
					tabs.hover(function() {
						className = $(this).attr("class");
						title = $(this).attr("title");
						toolTip = $("#footer ." + className + " .navtooltip");
						if (toolTip.length === 0) { return; }
						wrapperOffset = $("#pagelayout").offset().left;
						var w = $(this).width();
						var h = ($(this).height() + 3);
						var y = ($(this).offset().top - h);
						var x = ($(this).offset().left - wrapperOffset - 54 + (w / 2));
						$(this).children("a").removeAttr("title");
						toolTip.css({top: y, left: x }).addClass("show");
					 }, function() {
					 	toolTip.removeClass("show");
					 	$(this).children("a").attr("title", title);
					 });
				},

				forms : function () {
					$("#newslettersubscribeform_rightcol").submit(function() {
						var valid = $(this).validate({
							event: "submit",
							rules: { email: { required: true, email: true } },
							messages: { email: "Fyll i en korrekt e-postadress" },
							errorPlacement: function(error, element) { error.appendTo(element.parent()); }
						});
				    	if (valid.form()) {
				    		var target = $(this).attr("target");
							SvD.utils.openPopupWindow("", target, 600, 480, 1, 1);
				       		this.submit();
				       		$(this).hide().before("<div class=\"editorialcontent\"><p><strong>Tack för din anmälan.</strong><br /> Nyhetsbrevet skickas ca kl 11 varje vardag.</p></div>");
				   		} else {
				       	 return false;
						}
					});

					$("#articlestandardform").submit(function() {
						var valid = $(this).validate({
							event: "submit",
							rules: {
								valid_email: { required: true, email: true },
								valid_name: "required",
								valid_message: { required: true, minLength: 1, maxLength: 2000 },
								valid_question: { required: true, minLength: 1, maxLength: 2000 },
								valid_date: {required: true,dateISO:true},
								valid_page: "required",
								valid_errordescription_radio: "required"
								},
							messages: {
								valid_email: "Fyll i en korrekt e-postadress",
								valid_name: "Fyll i ditt namn",
								valid_message: "skriv ett meddelande",
								valid_question: "skriv ett fråga",
								valid_date: "Ange ett giltigt datumformat (yyyy-mm-dd)",
								valid_page: "Du måste ange en sida",
								valid_errordescription_radio: "Ange en feltyp"
								},
							errorPlacement: function(error, element) { error.appendTo(element.parent()); }
						});

				    	if (valid.form()) {
				       		this.submit();
				   		} else {
				       	 return false;
						}
					});
				},

				tvSchedule : {
					init : function () {
						this.footer();
						this.section();
					},

					footer : function () {
						var footer = $("#footer");
						var container = footer.find("div.tvschedule");
						if (container.length === 0) { return; }
						var channels = container.find(".channel");
						if (channels.length === 0) { return; }
						var hidden = channels.filter(":gt(3)").addClass("hidden");

						var form = "<form action=\"\"><fieldset><label for=\"tvschedule-select\">Välj kanal:</label><select id=\"tvschedule-select\"></select></fieldset></form>";
						var current = channels.filter(":eq(3)").addClass("changeable");
						current.find("ul").before(form);
						form = current.find("form");
						var select = form.find("select");
						hidden = current.add(hidden);

						var option = "";
						hidden.each(function() {
							var val = $(this).attr("id").split("-")[1];
							var name = $(this).find(".name").text();
							option += "<option value=\"" + val + "\">" + name + "</option>";
						});
						option += "<option value=\"\">Fler kanaler...</option>";
						select.append(option);

						form.change(function() {
							var val = select.val();
							var url = "http://www.tv.nu/";
							if (val.length === 0) {
								window.open(url);
							} else {
								var id = "#tvschedule-" + val;
								current.removeClass("changeable").addClass("hidden");
								current = $(id);
								current.removeClass("hidden").addClass("changeable").find("ul").before(form);
								select.focus();
							}
							return false;
						});
					},

					section : function () {
						var container = $("#tvindex");
						if (container.length === 0) { return; }
						var extras = container.find(".newsarticle .extra");
						if (extras.length === 0) { return; }
						var hideVal = "Dölj";
						var showVal = "Läs mer";
						extras.toggleClass("hidden");
						extras.filter("span").before("<span class=\"filler\">...</span>").after(" <span class=\"toggle linktext\">" + showVal + "</span>");
						container.find(".toggle").click(function() {
							var element = $(this).parents(".newsarticle");
							element.find(".extra, .filler").toggleClass("hidden");
							$(this).text(($(this).text() == showVal) ? hideVal : showVal);
						});
					}
				},

				hideEmptyAdContainers : function () {
					var containers = $("div.ad, div.articlead");
					if (containers.length > 0) {
						containers.each(function() {
							var container = $(this);
							pixel = container.find("img[width='2']");
							if (pixel.length > 0) {
								container.hide();
							}
						});
					}
				}
			},

			utils : {

				init : function () {
					this.setPopups();
					this.setMetadataPopups();
					this.refreshAds();
				},

				popups : [],

				definePopups : function () {
					this.popups.push(["form.pollform", "submit", "pollwindow", 650, 400, 1, 1]);
					this.popups.push(["form.pollform a.showresult", "click", "pollwindow", 650, 400, 1, 1]);
					this.popups.push(["a.socialbookmark", "click", "socialbookmarkswindow", 800, 600, 1, 1]);
					this.popups.push(["a[href*=http://bors.e24.se]", "click", "bors24window", 990, 740, 1, 1]);
					this.popups.push(["a[href*=http://www.fond24.se],a[href*=http://customer.morningstareurope.com],a[href*=http://customer.mseu.net]", "click", "fond24window", 990, 740, 1, 1]);
					this.popups.push(["a[href*=quizen/qpage.aspx]", "click", "quizwindow", 530, 420, 0, 1]);
					this.popups.push(["a[href*=e24.se/apps/bildspecial]", "click", "e24slideshow", 875, 678, 1, 1]);
					this.popups.push(["a[href*=livescore.betradar.com], a[href*=livescore.scoreradar.com]", "click", "betradarwindow", 1000, 700, 1, 1]);
				},

				setPopups : function () {
					this.definePopups();
					for (var i = 0, len = this.popups.length; i < len; i++) {
						var objArr = this.popups[i];
						if (objArr.length == 7) {
							var sel = objArr[0];
							var obj = $(sel);
							if (obj.length) {
								var ev = objArr[1];
								obj.bind(ev, {element: objArr}, function(event) {
									var o = event.data.element;
									var targ = o[2];
									var w = o[3];
									var h = o[4];
									var scr = o[5];
									var res = o[6];
									SvD.utils.openPopupWindow("", targ, w, h, scr, res);
									this.target = targ;
								});
							}
						}
					}
				},

				setMetadataPopups : function () {
					var links = $("a.popup");
					links.click(function() {
						var obj = $(this).metadata();
						var w = obj.width ? obj.width : 800;
						var h = obj.height ? obj.height : 600;
						var targ = obj.target ? obj.target : 'win' + w + 'x' + h;
						SvD.utils.openPopupWindow("", targ, w, h, 1, 1);
						$(this).attr("target", targ);
					});
				},

				openPopupWindow : function (strUrl, strWindowName, paramWidth, paramHeight, paramScrollbars, paramresizable) {
					var strWindowFeatures = 'width='+paramWidth+',height='+paramHeight+',scrollbars='+paramScrollbars+',resizable='+paramresizable+',status=0,toolbar=0,menubar=0,location=0,directories=no';
					var objNewWin = window.open(strUrl, strWindowName, strWindowFeatures);
					objNewWin.focus();
				},

				smoothScroll : function(target, addOffset, speed) {
			      if (target.length) {
			        var targetOffset = target.offset().top;
			        targetOffset -= addOffset;
			        $('html, body').animate({scrollTop: targetOffset}, speed);
			        return false;
			      }
				},

				bodyLoad : {
					init : function () {
						this.jsEnabled();
						this.mobileCheck();
					},

					jsEnabled : function () {
						var b = document.getElementsByTagName('body')[0];
						if (b.className === null || b.className.match(/\bjs-enabled\b/) === null) {
							var c = "js-enabled";
							var cn= b.className;
							b.className = (cn === null) ? c : cn.replace(/\s+/g," ") + (cn===""?"":" ") + c;
						}
					},

					mobileCheck : function () {
						if (screen.width) {
							if (screen.width < 490) {
								document.write('<div class="mobile-teaser"><p><a href="http://m.svd.se/">Till mobilversionen av SvD.se</a></p></div>');
							}
						}
					}
				},

				refreshAds: function () {
					var iframes = $(".refresh-ad");
					if (!iframes.length) { return; }
					iframes.each(function() {
						var frame = $(this);
						var obj = frame.metadata();
						var timeout = obj.rate ? obj.rate : 5000;
						var count = obj.count ? obj.count : 3;
						if (!count) { return; }
						var i = 1;
						var t;
						var refresh = function() {
							update();
							i++;
							if (i <= count) { t = setTimeout(refresh, timeout); }
						}
						var update = function() {
							var src = frame.attr("src").split("?")[0] + "?refresh=" + i;
							frame.attr("src", src);
						}
						t = setTimeout(refresh, timeout);
						if (frame.hasClass("use-link")) {
							var link = $("<p><span class=\"readmore iframe-link linktext\">Ny annons</span></p>").click(function() {
								clearTimeout(t);
								update();
							}).insertAfter(frame);
						}
					});

				}
			}
		};
	}(jQuery);
}

if (typeof jQuery != 'undefined') {
	jQuery(document).ready(function() {
		SvD.init();
	});
}