﻿var STPress = {
	prepare: function() {
		window.addEvent("domready", function() {STPress.init.call(STPress);});
	},
	
	init: function() {
		this.search.init();
		this.tabs.init();
		this.tip.init();
		this.toggler.init();
		this.info.init();
	},
	
	getAnchoredElement: function(anchor) {
		return $(anchor.href.replace(/.*\#(.*)/, "$1"));
	},
	
	toggler: {
		init: function() {
			$$(".toggler").each(
				function(el) {
					var slideshow = el.getNext("ul");
					if(slideshow) {
					
						// Create slide effect
						slideshow.set("tween", {
							transition: Fx.Transitions.Expo.easeOut, 
							duration: "short", 
							onComplete: function(slideshow){
								if(slideshow.forward) {
									$(slideshow).setStyle("margin-left", 0);
									node = $(slideshow.getFirst());
									node.dispose();
									slideshow.appendChild(node);
									slideshow.currentNode = slideshow.currentNode + 1 === totalNumberOfItems ? 0 : slideshow.currentNode + 1;
									updateCounter();
								}
							}
						});
						
						var totalNumberOfItems = slideshow.getChildren().length;
						var itemWidth = 284;
						slideshow.setStyle("width", totalNumberOfItems * itemWidth);
						slideshow.currentNode = 0;
						
						var node;					
						var buttonBackward = new Element("a", {
							"class": "backward",
							"events": {
								"click": function(e) {
									e.stop();
									slideshow.forward = false;
									node = $(slideshow.getLast());
									node.dispose();
									slideshow.insertBefore(node, slideshow.firstChild);
									slideshow.setStyle("margin-left", -itemWidth);
									slideshow.tween("margin-left", 0);
									slideshow.currentNode = slideshow.currentNode - 1 < 0 ? totalNumberOfItems - 1 : slideshow.currentNode - 1;
									updateCounter();
								},
								"mouseover": function(e) {
									clearInterval(slideshow.timer);
								},
								"mouseout": function(e) {
									slideshow.timer = setInterval(function() {
										slideshow.forward = true;
										slideshow.tween("margin-left", -itemWidth);
									}, 5000);
								}
							}
						});
						el.appendChild(buttonBackward);
						
						var counter;
						for(var i = 0; i < totalNumberOfItems; i++) {
							counter = new Element("span", {
								"id": "counter-" + i,
								"class": "counter",
								"html": "&nbsp;"
							});
							if(i === 0) {
								counter.set("class", "counter counter-selected");
							}
							el.appendChild(counter);
						}
						
						var buttonForward = new Element("a", {
							"class": "forward",
							"events": {
								"click": function(e) {
									e.stop();
									slideshow.forward = true;
									slideshow.tween("margin-left", -itemWidth);
								},
								"mouseover": function(e) {
									clearInterval(slideshow.timer);
								},
								"mouseout": function(e) {
									slideshow.timer = setInterval(function() {
										slideshow.forward = true;
										slideshow.tween("margin-left", -itemWidth);
									}, 5000);
								}
							}
						});
						el.appendChild(buttonForward);

						// Autoplay
						slideshow.timer = setInterval(function() {
							slideshow.forward = true;
							slideshow.tween("margin-left", -itemWidth);
						}, 5000);
						
						function updateCounter() {
							$$(".counter").each(function(element){
								element.set("class", "counter");
							});
							$("counter-" + slideshow.currentNode).set("class", "counter counter-selected");
						}
					}
				}
			);
		}
	},
	
	tip: {
		init: function() {
			var tipBox = $("tip");
			if (tipBox != null) {
				var tipSlide = new Fx.Slide(tipBox, {transition: Fx.Transitions.Quint.easeOut});
				tipBox.setStyle("display", "block");
				var focusOnThis = tipBox.hasClass("focus");
				if (!focusOnThis) {
					tipSlide.hide();
				} else {
					new Fx.Scroll(window).toElement(tipBox);
				}
				var tips = $$(".tip").each( 
					function(el) {
						el.addEvent("click", function(e) {
								e = new Event(e);
								tipSlide.toggle();
								e.stop();
							}
						);
					}
				)		
			}
		}
	},
	
	info: {
		init: function() {
			$$(".info").each(
				function(el) {
					var popup = STPress.getAnchoredElement(el);
					var pos = el.getCoordinates();
					popup.setStyle("left", pos.left);
					popup.setStyle("top", pos.top);
					popup.addEvent("mouseleave", function(e) {
							e = new Event(e);
							e.stop();
							popup.setStyle("display", "none");
						}
					);
					el.addEvent("mouseenter", function(e) {
							e = new Event(e);
							e.stop();
							popup.setStyle("display", "block");
						}
					)
				}
			);
		}
	},
	
	tabs: {
		init: function() {
			var tabbed = $$(".tabbed").each(
				function(el) {
					var tabs = el.getElements(".tabs A");
					if (tabs != null) {
						if (tabs.length == 1) {
							el.addClass("tabs-inactive");
						}
						var focusOnFirst = el.getElements(".tabs .focus").length == 0;
						for (var i = 0; i < tabs.length; i++) {
							var tabContent = STPress.getAnchoredElement(tabs[i]);
							var parent = tabs[i].getParent();
							var focusOnThis = parent.hasClass("focus");
							if (tabs.length != 1 && ((focusOnFirst && i == 0) || focusOnThis)) {
								parent.addClass("tab-active");
								tabContent.setStyle("display", "block");
							} else {
								tabContent.setStyle("display", "none");								
							}
							if (focusOnThis) {
								new Fx.Scroll(window).toElement(el);
							}
							
							tabs[i].addEvent("click",
								function(e) {
									e = new Event(e);
									var anchor = $(e.target);
									while (anchor.tagName != "A") {
										anchor = anchor.getParent();
									}
									var parent = anchor.getParent();
									if (!parent.hasClass("tab-active")) {
										var active = parent.getParent().getElements(".tab-active")[0];
										if (active != null) {
											active.removeClass("tab-active");
											STPress.getAnchoredElement(active.getFirst()).setStyle("display", "none");										
										}
										parent.addClass("tab-active");
										STPress.getAnchoredElement(anchor).setStyle("display", "block");
										var tabbed = parent.getParent().getParent();
										if (tabbed.hasClass("tabs-inactive")) {
											tabbed.removeClass("tabs-inactive");
										}
									}
									e.stop();
								}
							)
						}
					}
				}
			)
		}
	},
	
	search: {
		searchText: "Sök i artikelarkivet",
		isAdvancedSearchActive: false,
		searchArchiveClientId: _searchArchiveClientID,
		searchButtonClientId: _bSearchClientID,
		init: function() {
			if (this.searchArchiveClientId) {
				var searchField = $(this.searchArchiveClientId);
				if (searchField) {						
					searchField.value = this.searchText;
					searchField.addEvent("focus", function(e) {
							e = new Event(e);
							if (e.target.value == STPress.search.searchText) {
								e.target.value = "";
							}
						}
					);
					searchField.addEvent("blur", function(e) {
							e = new Event(e);
							if (e.target.value.trim().length == 0) {
								e.target.value = STPress.search.searchText;
							}
						}
					);
					searchField.addEvent("keydown", function(e) {
							if(e.which == 13 || e.keyCode == 13) {
								__doPostBack(STPress.search.searchButtonClientId, '');
							}
						}	
					);
					$(searchField.form).addEvent("submit", function(e) {
							if (searchField.value == STPress.search.searchText) {
								searchField.value = "";
							}
						}
					);
					var simpleSlide = new Fx.Slide("toggleAdvancedSearch", {
							onComplete: function() {
								if (STPress.search.isAdvancedSearchActive) {
									advancedSlide.options.transition = Fx.Transitions.Quint.easeOut;
									advancedSlide.slideIn();
								}
							},
							transition: Fx.Transitions.Quint.easeOut,
							duration: 250
						}
					);
					var advancedSlide = new Fx.Slide("advancedSearch", {
							onComplete: function() {
								if (!STPress.search.isAdvancedSearchActive) {
									simpleSlide.slideIn();
								}
							},
							transition: Fx.Transitions.Quint.easeOut
						}
					);
					advancedSlide.hide();
					$("toggleAdvancedSearch").addEvent("click", 
						function(e) {
							e = new Event(e);
							STPress.search.isAdvancedSearchActive = true;
							simpleSlide.slideOut();
							e.stop();
						}
					);
					$("toggleSimpleSearch").addEvent("click", 
						function(e) {
							e = new Event(e);
							STPress.search.isAdvancedSearchActive = false;
							advancedSlide.options.transition = Fx.Transitions.Quint.easeIn;
							advancedSlide.slideOut();
							e.stop();
						}
					);
					$("advancedSearch").setStyle("display", "block");
				}
			}
		}
	}
}
STPress.prepare();