/**
 * Sektor 3
 */
var sektor3 = function() {
	var refreshers = [];
	var minFlashPlayerVersion = "9";
	var	DOMReady = function() {
	};
	
	return {
		init: function() {
			O.addOnDOMReady(DOMReady);
			sektor3.navigation.init();
			sektor3.search.init();
			sektor3.popup.init();
			sektor3.frame.init();
			sektor3.print.init();
		},
		
		refresh: function() {
			for (var i = 0, ln = refreshers.length; i < ln; i++) {
				refreshers[i].call();
			}
		},
		
		addRefresh: function(fn) {
			refreshers.push(fn);
		},
		
		createUrlTitle: function(title) {
			title = title.toLowerCase();
			title = title.replace(/[å|ä|â|á|à|ã]/i, "a");
			title = title.replace(/[ö|ø|ô|ó|ò|õ]/i, "o");
			title = title.replace(/[ë|ê|é|è]/i, "e");
			title = title.replace(/[ü|û|ú|ù]/i, "u");
			title = title.replace(/[ï|í|ì|î]/i, "i");
			title = title.replace(/ñ/i, "n");
			title = title.replace(/ç/i, "c");
			title = title.replace(/^\s+|\s+$/g, "");
			title = title.replace(/[_|\s]+/g, "-");
			title = title.replace(/[^a-z0-9-]+/g, "");
			title = title.replace(/[-]+/g, "-");
			title = title.replace(/^-+|-+$/g, "");
	        return title;
		},
	
		setLocationHash: function(title) {
			window.location.hash = sektor3.createUrlTitle(title);		
		},
		
		getLocationHash: function() {
			var hash = window.location.hash;
			if (hash && hash.trim().length > 1) {
				return hash.substring(1);
			}
			return null;
		},

		clearLocationHash: function() {
			window.location.hash = "-";
		},
		
		getFlashMovie: function(movieName) {
			return window[movieName] ? window[movieName] : document[movieName];
		},
		
		hasFlash: swfobject.hasFlashPlayerVersion(minFlashPlayerVersion),
		
		getMinFlashPlayerVersion: function() {
			return minFlashPlayerVersion;
		}
	};
}();


sektor3.navigation = function() {
	var pageTopId = "page-top";
	var pageId = "page";
	var pageWrapperId = "page-wrapper";
	var flashMovieId = "pageTopFlash";
	var topHeight = 0;
	var isTweening = false;
	var resizeWhenDone = false;
	
	var loadContent = function(url, callback) {
		new Request({  
			method: "get",
			url: url,
			data: "ajax=true",
			onComplete: function(response) { 
				$("content").innerHTML = response;
				sektor3.refresh();
				if (callback) {
					callback();
				}
			}
		}).send();
	};
	
	var updateMenu = function(url) {
		var hash = sektor3.getLocationHash();
		var content = $("content");
		var selectedFound = false;
		var selectedNo = 0;
		$$("#menu li").each(function(el) {
			var contentType = el.className.replace(/.*(content-type-[\w-]+).*/, "$1");
			if(el.getFirst().href == url) {
				el.addClass("selected");
				selectedFound = true;
				content.className = "";
				// setting content type (if any)
				if(contentType.indexOf("content-type-") == 0) {
					content.className = contentType;
				}
			} else if(hash == "idedebatt") {
				content.className = "content-type-debate";
				if(el.className == content.className) {
	        el.addClass("selected");
	        selectedFound = true;
				} else {
          el.removeClass("selected");
				}
			} else {
				el.removeClass("selected");
			}
			el.removeClass("previous");
			if (!selectedFound) {
				el.addClass("previous");
				selectedNo++;
			}
		});
		return selectedNo;
	};
	
	var getActiveMenuOptionNo = function() {
		var lis = $$("#menu li");
		for (var i = 0, ln = lis.length; i < ln; i++) {
			if (lis[i].hasClass("selected")) {
				return i;				
			}
		}
		return 0;
	};
	
	var load = function(url, title, callback) {
		if (title) {
			sektor3.setLocationHash(title);
		}
		var pageWrapper = $(pageWrapperId);
		var pageTop = $(pageTopId);
		isTweening = true;
		pageTop.url = url;
		pageTop.tweener = new Fx.Tween(pageTop, {
			onComplete: function(el) {
				if (pageTop.state == "up") {
					pageTop.state = "down";
					var customurl = false;
					var hash = sektor3.getLocationHash();
			    if(hash == "idedebatt") {
			      customurl = "/" + hash + "/";
			      pageTop.url = url.replace(customurl,"/omvarld/");
			    }
					var activeMenuOptionNo = updateMenu(pageTop.url);
					(sektor3.getFlashMovie(flashMovieId)).scroll(activeMenuOptionNo);
					// loading page
					if(customurl) {
            loadContent(customurl, function() {
              sektor3.getFlashMovie(flashMovieId).ready();          
            });
					} else {
						loadContent(pageTop.url, function() {
							sektor3.getFlashMovie(flashMovieId).ready();					
						});
					}
				} else {
					// resetting view
					/*
					pageWrapper.setStyles({
						height: "auto",
						overflow: "auto"
					});
					*/
					pageTop.state = "";
					isTweening = false;
					if (resizeWhenDone) {
						resizeWhenDone = false;
						resizePageTop();
					}
				}
			}
		});

		// scrolling to top
		O.scrollTo(pageTop);

		// preparing wrapper for tweening
		var viewPortHeight = O.getViewPortHeight();
		/*
		var height = Math.max(O.getActualHeight($("page")) + pageTop.overlap, viewPortHeight);
		pageWrapper.setStyles({
			height: height + "px",
			overflow: "hidden"
		});
		*/
		pageTop.marginTopDefault = (- viewPortHeight + pageTop.overlap) + "px";
		pageTop.setStyles({	
			height: viewPortHeight + "px",
			"margin-top": pageTop.marginTopDefault
		});
		pageTop.state = "up";
		pageTop.tweener.start("margin-top", "0px");
	};

	var resizePageTop = function() {
		if (!isTweening) {
			var width = O.getViewPortWidth();
			var height = O.getViewPortHeight();
			var flashElement = sektor3.getFlashMovie(flashMovieId);
			if (flashElement) {
				flashElement.width = Math.max(width, O.getActualWidth($(pageId)));
				flashElement.height = height;
			}
			$(pageTopId).setStyles({	
				"height": height + "px",
				"margin-top": (topHeight - height) + "px"
			});
		} else {
			resizeWhenDone = true;
		}
	};
	
	return {
		init: function() {
			O.addOnDOMReady(sektor3.navigation.DOMReady);
		},
		
		DOMReady: function() {
			var activeMenuOptionNo = 0;
			// loading content via hash link
			var hash = sektor3.getLocationHash();
			if (hash && !sektor3.hasLoadedHashContent) {
				var anchors = $$("#menu a");
				for (var i = 0, ln = anchors.length; i < ln; i++) {
					if (sektor3.createUrlTitle(anchors[i].innerHTML) == hash) {
						sektor3.hasLoadedHashContent = true;
						loadContent(anchors[i].href);
						activeMenuOptionNo = updateMenu(anchors[i].href);
						break;
					}						
				}
			} else {
				activeMenuOptionNo = getActiveMenuOptionNo()
			}

			var pageTop = $(pageTopId);
			var themeURL = $("theme-url");
			topHeight = O.getActualHeight(pageTop);
			pageTop.overlap = topHeight + O.stripPx(pageTop.getStyle("margin-top"));
			// initializing flash header
			if (sektor3.hasFlash) {
				pageTop.addClass("flash");
				pageTop.getFirst().id = flashMovieId;
				var flashVars = {};
				flashVars.pos = activeMenuOptionNo;
				var params = {};
				params.allowScriptAccess = "always";
				params.wmode = "transparent";
				var attributes = {};
				attributes.name = flashMovieId;
				swfobject.embedSWF(themeURL.value + "/flash/main.swf", flashMovieId, Math.max(O.getViewPortWidth(), O.getActualWidth($(pageId))), O.getViewPortHeight(), sektor3.getMinFlashPlayerVersion(), null, flashVars, params, attributes);
				/*
				var pageWrapper = new Element("div", {id: pageWrapperId});
				pageWrapper.wraps($("page"));
				pageWrapper.grab(pageTop, "top");
				*/
				O.eventHandler.register("click", "#menu a", function() {
					load(this.href, this.innerHTML, null, true);
				});

				resizePageTop();
				$(window).addEvent("resize", function() {
					resizePageTop();
				});
			}
			
		},
		
		showPage: function() {
			var pageTop = $(pageTopId);
			pageTop.tweener.start("margin-top", pageTop.marginTopDefault);
		},
		
		getOverlap: function() {
			return $(pageTopId).overlap;
		}
	}
}();


sektor3.popup = function() {
	var addCloseAndDisplay = function(el) {
		el.grab(new Element("a", {href: "", "class": "close", "html": "Stäng"}), "bottom");
		el.grab(new Element("a", {href: "", "class": "close top", "html": "Stäng"}), "top");
		el.setStyle("display", "block");
	};
	
	return {
		init: function() {
			O.addOnDOMReady(sektor3.popup.DOMReady);
			O.eventHandler.register("click", "#popup .close", function() {
				sektor3.popup.hide();
			});
		},
		
		DOMReady: function() {
			var popup = $("popup");
			if (popup) {
				sektor3.popup.show();
			}
			O.eventHandler.register("click", "a.popup", function() {
				sektor3.popup.show(this.href);
				sektor3.setLocationHash(this.innerHTML);
			});
			if (!popup) {
				// loading popup via hash link
				var hash = sektor3.getLocationHash();
				if (hash && !sektor3.hasLoadedHashContent) {
					var anchors = $$(".popup");
					for (var i = 0, ln = anchors.length; i < ln; i++) {
						if (sektor3.createUrlTitle(anchors[i].innerHTML) == hash) {
							sektor3.hasLoadedHashContent = true;
							sektor3.popup.show(anchors[i].href);
							break;
						}						
					}
				}				
			}
		},
		
		show: function(url) {
			var popup = $("popup");
			var body = $(document.body);
			if (!popup) {
				var popup = new Element("div", {id: "popup"}).grab(new Element("div").grab(new Element("div").grab(new Element("div", {"class": "content"}))));
				$("page").grab(popup, "top");
			}
			if (!O.isIE6 && !O.isIE7) {
				popup.setOpacity(0);
				popup.set("tween", {duration: 250});				
			}
			if (url) {
				new Request({  
					method: "get",
					url: url,
					data: "ajax=true",
					onComplete: function(response) {
						$$("#popup .content")[0].innerHTML = response;
						addCloseAndDisplay(popup);
						if (!O.isIE6 && !O.isIE7) {
							popup.fade("in");
						}
					}
				}).send();
			} else {
				popup.fade("in");			
			}

			var popupCover = $("popup-cover");
			if (!popupCover) {
				var popupCover = new Element("div", {id: "popup-cover"});
				body.grab(popupCover, "bottom");
			}
			popup.setStyle("top", O.getActualHeight($("header")) + "px");
			if (!url) {
				addCloseAndDisplay(popup);
			}
			var height = O.getActualHeight($("page")) + sektor3.navigation.getOverlap();
			height = Math.max(height, O.getViewPortHeight());
			popupCover.setStyle("height", height + "px");
			popupCover.setStyle("display", "block");			
			O.scrollTo(body);
		},
		
		hide: function() {
			sektor3.clearLocationHash();
			$("popup").setStyle("display", "none");
			$("popup-cover").setStyle("display", "none");			
		}
	}
}();


sektor3.frame = function() {
	var addFrame = function(img) {
		var imgclass = img.className;
		var frame = new Element("span", {"class": "framed"}).wraps(new Element("span").wraps(new Element("span").wraps(new Element("span").wraps(img))));
		frame.addClass(imgclass);
		frame.setStyle("width", (img.width + 13) + "px");
		frame.setStyle("marginLeft", (248-img.width/2) + "px");
	};
	
	return {
		init: function() {
			O.addOnDOMReady(sektor3.frame.DOMReady);
			sektor3.addRefresh(sektor3.frame.refresh);
		},
		
		DOMReady: function() {
			sektor3.frame.refresh();
		},
		
		refresh: function() {
			$$(".frame-images img").each(function(el) {
				if (!el.complete) {
					el.addEvent("load", function() {
						addFrame(this);
					});
				} else {
					addFrame(el);
				}				
			});
		}
	}
}();


sektor3.search = function() {
	return {
		init: function() {
			O.addOnDOMReady(sektor3.search.DOMReady);
			sektor3.addRefresh(sektor3.search.refresh);
		},
		
		DOMReady: function() {
			sektor3.search.refresh();
			O.eventHandler.register("click", "a.submit", function() {
				this.form.submit();
			});
		},
		
		refresh: function() {
			var submits = $$("input.submit");
			if (submits) {
				submits.each(function(el) {
					var submit = new Element("a", {
					    "href": "",
					    "class": "submit",
					    "html": el.value
					});
					submit.form = el.form;
					el.parentNode.appendChild(submit);				
				});
			}
		}
	}
}();

sektor3.print = function() {
	return {
		init: function() {
			O.addOnDOMReady(sektor3.print.DOMReady);
		},
		
		DOMReady: function() {
			O.eventHandler.register("click", ".entry-foot a.print", function() {
				window.print();
				return false;
			});
		}
	}
}();

sektor3.init();