var rykvidere = (function(){
	var
		win = window,
		doc = win.document,
		getId = function(id){
			return doc.getElementById(id);
		},
		tabsUpdated = false;
	return {
		initializeScrollers: (function() {
			var types = {
				left: 1,
				right: 1,
				up: 1,
				down: 1
			};

			var scrollables = {
				splash_thumbs: {
					left: 'thumbs_previous',
					right: 'thumbs_next',
					className: 'thumb',
					size: 105
				},
				text_content: {
					up: 'text_up',
					down: 'text_down',
					size: 10,
					continues: true
				},
				links: {
					up: 'links_up',
					down: 'links_down',
					size: 10,
					continues: true
				},
				media_scroller: {
					left: 'media_scroller_p',
					right: 'media_scroller_n',
					size: 120,
					className: 'thumb'
				}
			};
			for (var i = 1; i <= 8; i++) {
				scrollables['sub'+i+'_items'] = {
					left: 'sub'+i+'_p',
					right: 'sub'+i+'_n',
					size: 279,
					className: 'item'
				};
			}
			var scrollInterval = null;
			var scrollStyle = 'marginTop';
			var scrollDirection = 1;
			var scrollMax = 0;
			function decorate(scroller, element, type, size) {
				element.onmousedown = function() {
					this.onmouseup();
					var top = parseInt(scroller.style.marginTop);
					if (!top || isNaN(top))
						top = 0;
					switch (type) {
						case 'up':
						case 'down':
							scrollStyle = 'marginTop';
							break;
						case 'left':
						case 'right':
							scrollStyle = 'marginLeft';
							break;
					}
					switch (type) {
						case 'left':
						case 'up':
							scrollDirection = -1;
							break;
						case 'right':
						case 'down':
							scrollDirection = 1;
					}
					scrollMax =
						scroller[scrollStyle=='marginTop'?'scrollHeight':'scrollWidth'] -
						scroller.parentNode[scrollStyle=='marginTop'?'offsetHeight':'offsetWidth'] + 50;
					if (scrollMax < 50)
						scrollMax = Math.max(0, scrollMax);
					scrollInterval = setInterval(function() {
						top -= scrollDirection * size;
						if (top > 0)
							top = 0;
						else if (top < -scrollMax)
							top = -scrollMax;
						scroller.style[scrollStyle] = top + 'px';
					}, 50);
				};
				element.onmouseup = element.onmouseout = function() {
					clearInterval(scrollInterval);
				};
			};
			var fxStyle = 'marginLeft';
			var fxScroller;
			var fxOffset;
			var fxScrollerMax;
			var fx = new secoya.fx({
				from: 0,
				to: 0,
				duration: 0.5,
				type: secoya.fx.power,
				callback: function(value) {
					value += fxOffset;
					fxScroller.style[fxStyle] = Math.max(Math.min(value, 0), -fxScrollerMax) + 'px';
				},
				finish: function() {
					fxScroller = null;
				}
			});
			function makefx(scroller, element, type, size) {
				element.onclick = function() {
					if (fxScroller)
						fx.resetToEnd();
					fxScroller = scroller;
					switch (type) {
						case 'left':
						case 'up':
							fx.from = 0;
							fx.to = size;
							break;
						case 'right':
						case 'down':
							fx.from = 0;
							fx.to = -size;
							break;
					}
					switch (type) {
						case 'left':
						case 'right':
							fxStyle = 'marginLeft';
							break;
						case 'up':
						case 'down':
							fxStyle = 'marginTop';
							break;
					}
					fxOffset = parseInt(fxScroller.style[fxStyle]);
					if (!fxOffset || isNaN(fxOffset))
						fxOffset = 0;
					fxScrollerMax = parseInt(fxScroller.style[fxStyle == 'marginLeft' ? 'width':'height']);
					if (!fxScrollerMax || isNaN(fxScrollerMax))
						fxScrollerMax = fxScroller[fxStyle == 'marginLeft'?'offsetWidth':'offsetHeight'];
					fxScrollerMax -= size;
					if (fxScrollerMax < 0)
						fxScrollerMax = 0;
					fx.start();
				};
			};
			function getClassesCount(parent, className) {
				var count = !!core+0;
				var divs = parent.getElementsByTagName('div');
				for (var i = 0; i < divs.length; i++) {
					if (divs[i].className == className) {
						count++;
					}
				}
				return count;
			};
			return function() {
				var scroller, obj, elm;
				for (var i in scrollables) {
					scroller = getId(i);
					obj = scrollables[i]
					if (scroller) {
						obj = scrollables[i];
						for (var type in types) {
							if (obj[type]) {
								elm = getId(obj[type]);
								if (elm) {
									if (obj.continues) {
										decorate(scroller, elm, type, obj.size);
									} else {
										scroller.style.width = getClassesCount(scroller, obj.className) * obj.size + 'px';
										makefx(scroller, elm, type, obj.size);
									}
								}
							}
						}
					}
				}
			};
		})(),
		videoThumbs: (function() {
			var parent;
			function getElm() {
				var e = parent;
				if (e) {
					e = e.getElementsByTagName('object')[0];
					if (!e)
						e = null;
				}
				return e;
			};
			var site = /^http:\/\/(?:www\.)?youtube\.com\//;
			var id = /[\?&]v=([a-zA-Z0-9_\-]+)/;
			function checkLink(url) {
				var result = null;
				if (url.search(site) != -1) {
					result = url.match(id);
					if (result)
						result = result[1];
				}
				return result;
			};
			function getHeaders(elm) {
				elm = elm.parentNode;
				var result = null;
				var h4 = elm.getElementsByTagName('h4')[0];
				var h5 = elm.getElementsByTagName('h5')[0];
				if (h4 && h5) {
					var h4fragment = doc.createDocumentFragment();
					for (var i = 0; i < h4.childNodes.length; i++) {
						h4fragment.appendChild(h4.childNodes[i].cloneNode(true));
					}
					var h5fragment = doc.createDocumentFragment();
					for (i = 0; i < h5.childNodes.length; i++) {
						h5fragment.appendChild(h5.childNodes[i].cloneNode(true));
					}
					result = {h4: h4fragment, h5: h5fragment};
				}
				return result;
			};
			function getHeaderDestinations() {
				var h2 = parent.getElementsByTagName('h2')[0];
				var h5 = parent.getElementsByTagName('h5')[0];
				var result = null;
				if (h2 && h5) {
					result = {h2: h2, h5: h5};
				}
				return result;
			};
			function click(event) {
				var object = getElm();
				var url = checkLink(this.href);
				if (object && url) {
					url = 'http://www.youtube.com/v/'+url+'&hl=en&fs=1';
					lightCore.embedSWF(
						url,
						object.id,
						object.width,
						object.height,
						null,
						null,
						{
							wmode: 'transparent',
							quality: 'high',
							allowfullscreen: 'true',
							allowscriptaccess: 'always',
							allownetworking: 'all',
							movie: url
						}
					);
					var headers = getHeaders(this);
					var dest = getHeaderDestinations();
					if (headers && dest) {
						for (var i in dest) {
							secoya.dom.removeChildren(dest[i]);
						}
						dest.h2.appendChild(headers.h4);
						dest.h5.appendChild(headers.h5);
					}
					event = event || win.event;
					if (event.preventDefault)
						event.preventDefault();
					return false;
				}
			};
			return function(objectParent, thumbParent) {
				if (core)
					return;
				parent = getId(objectParent);
				var e = getId(thumbParent);
				if (e) {
					e = e.getElementsByTagName('a');
					for (var i = 0; i < e.length; i++) {
						if (checkLink(e[i].href)) {
							e[i].onclick = click;
						}
					}
				}
			};
		})(),
		updateTabs: function() {
			var parent = getId('subject_selector');
			var titles = parent.getElementsByTagName('h4');
			var subjects;
			var getSubjects = function() {
				subjects = [];
				var s = getId('subjects').getElementsByTagName('div');
				for (var i = 0; i < s.length; i++) {
					if (s[i].className.indexOf('subject') != -1)
						subjects.push(s[i]);
				}
			};
			var unselect = function() {
				for (var i = 0; i < titles.length; i++) {
					if (titles[i].className.indexOf('selected') != -1)
						titles[i].className = titles[i].className.replace(/ ?selected ?/, '');
				}
				for (var i = 0; i < subjects.length; i++) {
					if (subjects[i].className.indexOf('selected') != -1)
						subjects[i].className = subjects[i].className.replace(/ ?selected ?/, '');
				}
			};
			var selectSubject = function(name) {
				for (var i = 0; i < subjects.length; i++) {
					if (subjects[i].className.indexOf(name) != -1)
						subjects[i].className += ' selected';
				}
			};
			for (var i = 0; i < titles.length; i++) {
				if (titles[i].className == '') {
					titles[i].className = 'tab'+(i+1);
					titles[i].onclick = function(){
						getSubjects();
						unselect();
						selectSubject(this.className.replace('tab', 'sub'));
						subjects = null;
						this.className += ' selected';
					};
				}
			}
			if (!tabsUpdated) {
				tabsUpdated = true;
				titles[0].onclick();
			}
		}
	};
})();