var Site = {
	IE6: false,
	IE7: false,
	mouseDown: false,
	
	initialize: function() {
		if (Browser.Engine.trident) Site.fixExplorer();
		
		if (!Site.IE6)
			$$('.noscript').each(Site.hideNoScript);
		$$('.shortcut').each(Site.showShortcut);
		$$('div.scroller').each(Site.setupScroller);
		$$('div.sliderstations').each(Site.setupSliderStations);
		$$('select').each(Site.setupSelect);
		$$('div.nonbreaking').each(Site.setupNonBreaking);
		$$('.fadingbackground').each(Site.setupFadingBackground);
		
		var opts = { disable_in_input: true };
		shortcut.add('M', function() { location.href = './'; }, opts);
		shortcut.add('H', function() { $('menuitem_howwework').setStyle('backgroundPosition', '0 -39px'); location.href = 'hurvijobbar/'; }, opts);
		shortcut.add('P', function() { $('menuitem_portfolio').setStyle('backgroundPosition', '0 -39px'); location.href = 'portfolio/'; }, opts);
		shortcut.add('B', function() { $('menuitem_blog').setStyle('backgroundPosition', '0 -39px'); location.href = 'bloggar/'; }, opts);
		shortcut.add('N', function() { $('menuitem_news').setStyle('backgroundPosition', '0 -39px'); location.href = 'nyheter/'; }, opts);
		shortcut.add('E', function() { $('menuitem_press').setStyle('backgroundPosition', '0 -39px'); location.href = 'press/'; }, opts);
		shortcut.add('K', function() { $('menuitem_contact').setStyle('backgroundPosition', '0 -39px'); location.href = 'kontakt/'; }, opts);
		if (typeof(prevPage) != 'undefined' && prevPage != null) shortcut.add(',', function() { location.href = prevPage; }, opts);
		if (typeof(nextPage) != 'undefined' && nextPage != null) shortcut.add('.', function() { location.href = nextPage; }, opts);
		shortcut.add('S', function() { $('searchinput').focus(); }, opts);
	},
	
	fixExplorer: function() {
		$$('table').set('cellspacing', 0);
		
		if (Browser.Engine.version <= 4)
			Site.IE6 = true;
		else if (Browser.Engine.version <= 5)
			Site.IE7 = true;
	},
	
	hideNoScript: function(el) {
		el.hide();
	},
	
	showShortcut: function (el) {
		el.show();
	},
	
	getControlOptions: function(control) {
		return control.get('class');
	},
	
	getControlLabel: function(control) {
		var id = control.get('id');
		if (id)
			return $(document.body).getElement('label[for=' + id + ']');
		
		return null;
	},
	
	getControlTitle: function(control, hideLabel) {
		var title = control.get('title');
		if (!title) {
			var label = Site.getControlLabel(control);
			if (label) {
				title = label.get('text');
				if (hideLabel != false)
					label.setStyle('display', 'none');
			}
		}
		
		return title;
	},
	
	getColorByName: function(color) {
		switch (color) {
		case 'blue': return '#4C91BF';
		case 'green': return '#44B100';
		case 'orange': return '#FB8700';
		case 'red': return '#FA000E';
		default: return '#000';
		}
	},
	
	setupScroller: function(scroller) {
		var view = scroller.getElement('div.view');
		if (!view) return;
		view.setStyle('overflow', 'hidden');
		
		var width = view.getSize().x;
		var scrollWidth = view.getScrollSize().x;
		if (width >= scrollWidth) return;
		
		var bar = new Element('div', { 'class': 'bar' }).inject(scroller);
		bar.grab(new Element('div', { 'class': 'left' }));
		bar.grab(new Element('div', { 'class': 'right' }));
		
		var barX = bar.getPosition($(document.body)).x;
		var barWidth = bar.getSize().x;
		var handleWidth = Math.max(Math.round(barWidth * width / scrollWidth), 50);
		var handleWidth2 = Math.round(handleWidth / 2);
		
		var handle = new Element('div', { 'class': 'handle', styles: { width: handleWidth } });
		handle.grab(new Element('div', { 'class': 'left' }));
		handle.grab(new Element('div', { 'class': 'right' }));
		handle.grab(new Element('div', { 'class': 'label' }));
		bar.grab(handle);
		
		var sliderTick = function(position) {
			window.status = 'position == ' + position;
		};
		var sliderChanged = function(step) {
			view.scrollTo(step, 0);
			if (!Browser.Engine.trident) {
				if (step <= 0)
					handle.setStyle('cursor', 'e-resize');
				else if (step >= slider.steps)
					handle.setStyle('cursor', 'w-resize');
				else
					handle.setStyle('cursor', 'ew-resize');
				if (Site.mouseDown)
					$(document.body).setStyle('cursor', handle.getStyle('cursor'));
			}
		};
		
		var slider = new Slider(bar, handle, { steps: (scrollWidth - width) });
		bar.addEvent('mousedown', Site.mouseDownScroller);
		slider.addEvent('tick', sliderTick);
		slider.addEvent('change', sliderChanged);
		
		var start = 0;
		
		if (scroller.hasClass('centered')) {
			var table = view.getElements('table');
			if (table.length > 0) {
				table = table[0];
				if (table.rows.length > 0 && table.rows[0].cells.length > 0) {
					var cell = $(table.rows[0].cells[Math.ceil(table.rows[0].cells.length / 2) - 1]);
					start = cell.getPosition(table).x - Math.round((width - cell.getSize().x) / 2);
				}
			}
			else
				start = Math.round(slider.steps / 2);
		}
		slider.set(start);
		
		view.addEvent('resize', function() {
			var w = view.getSize().x;
			var sw = view.getScrollSize().x;
			if (w < sw) {
				bar.show();
				handle.setStyle('width', Math.max(Math.round(bar.getSize().x * w / sw), 80));
				slider.detach();
				slider = new Slider(bar, handle, { steps: (sw - w) }).addEvent('change', sliderChanged).set(0);
			}
			else {
				bar.hide();
			}
		});
		
		$(document.body).addEvent('mouseleave', function() { slider.drag.stop(); Site.mouseUpScroller(); });
	},
	
	setupSliderStations: function(sliderstations) {
		if (Site.IE6) return;
		var view = sliderstations.getElement('div.view');
		if (!view) return;
		view.setStyle('overflow', 'hidden');
		
		var width = view.getSize().x;
		var scrollWidth = view.getScrollSize().x;
		var pageWidth = width + 60;
		var numPages = Math.ceil(scrollWidth / pageWidth);
		
		var pagedesc = new Element('div', { 'class': 'pagedesc', styles: { opacity: 0 } }).inject(sliderstations);
		pagedesc.setStyle('top', Math.round((view.getSize().y - pagedesc.getSize().y) / 2));
		
		var bar = new Element('div', { 'class': 'bar' }).inject(sliderstations);
		bar.grab(new Element('div', { 'class': 'left' }));
		bar.grab(new Element('div', { 'class': 'right' }));
		
		var barX = bar.getPosition($(document.body)).x;
		var barWidth = bar.getSize().x;
		var handleWidth = Math.max(Math.round(barWidth / numPages), 50);
		var handleWidth2 = Math.round(handleWidth / 2);
		
		var handle = new Element('div', { 'class': 'handle', styles: { width: handleWidth } });
		handle.grab(new Element('div', { 'class': 'left' }));
		handle.grab(new Element('div', { 'class': 'right' }));
		handle.grab(new Element('div', { 'class': 'label' }));
		bar.grab(handle);
		
		var curStep = 0;
		var numSteps = scrollWidth - width;
		var startX = 0;
		var stopX = barWidth - handleWidth;
		var mouseStartX = 0;
		var mouseCurX = 0;
		var mousePrevX = 0;
		var slideInterval = null;
		var slideDestStep = 0;
		var pagethumbs = null;
		var pagedescs = null;
		
		var createPageThumbs = function() {
			pagethumbs = new Array(numPages);
			pagedescs = new Array(numPages);
			for (var i = 0; i < numPages; i++) {
				var x = i * handleWidth;
				var w = (i < numPages - 1 ? handleWidth - 2 : barWidth - x - 2);
				pagethumbs[i] = new Element('div', { 'class': 'pagethumb', styles: { left: x, width: w } }).inject(bar);
				if (i == 0) pagethumbs[i].addClass('first');
				if (i == numPages - 1) pagethumbs[i].addClass('last');
				pagedescs[i] = typeof(getPageDescription) != 'undefined' ? getPageDescription(i, sliderstations) : String(i + 1);
			}
			pagedesc.set('text', pagedescs[0]);
		};
		var posToStep = function(pos) {
			return pos / stopX * numSteps;
		};
		var posToPage = function(pos) {
			return Math.floor((pos + handleWidth2) / handleWidth);
		};
		var scrollTo = function(s) {
			curStep = Math.min(Math.max(s, 0), numSteps);
			var x = Math.round(curStep / numSteps * stopX);
			handle.setStyle('left', x);
			view.scrollTo(curStep, 0);
			pagedesc.set('text', pagedescs[posToPage(x)]);
		};
		var stopSlide = function() {
			if (slideInterval != null) {
				clearInterval(slideInterval);
				slideInterval = null;
			}
			if (!Browser.Engine.trident) pagedesc.fade(0);
			else pagedesc.hide();
		};
		var slideTo = function(s, dir) {
			if (dir == 0) slideDestStep = Math.round(s / pageWidth) * pageWidth;
			else if (dir < 0) slideDestStep = Math.floor(s / pageWidth) * pageWidth;
			else slideDestStep = Math.ceil(s / pageWidth) * pageWidth;
			if (slideInterval == null) {
				slideInterval = setInterval(function() {
					scrollTo(curStep + (slideDestStep - curStep) * 0.2);
					if (Math.abs(slideDestStep - curStep) <= 1) {
						scrollTo(slideDestStep);
						stopSlide();
					}
				}, 20);
			}
		};
		var mouseMoveHandler = function(e) {
			mousePrevX = mouseCurX;
			mouseCurX = e.page.x - barX;
			scrollTo(posToStep(startX + (mouseCurX - mouseStartX)));
		};
		var mouseUpHandler = function(e) {
			$(document.body).removeEvent('mousemove', mouseMoveHandler).removeEvent('mouseup', mouseUpHandler).removeEvent('mouseleave', mouseUpHandler);
			if (!Browser.Engine.trident) pagedesc.fade(0);
			else pagedesc.hide();
			var mouseX = e.page.x - barX;
			if (mouseX != mouseStartX)
				slideTo(posToStep(startX + (mouseX - mouseStartX)), (mouseX < mousePrevX ? -1 : 1));
			else if (slideDestStep - curStep != 0)
				slideTo(slideDestStep, 0);
		};
		
		bar.addEvent('mousedown', function(e) {
			e.stop();
			var pos = e.page.x - barX - handleWidth2;
			slideTo(posToStep(pos), 0);
			if (!Browser.Engine.trident) pagedesc.fade(1);
			else pagedesc.show();
		});
		handle.addEvent('mousedown', function(e) {
			e.stop();
			stopSlide();
			if (!Browser.Engine.trident) pagedesc.fade(1);
			else pagedesc.show();
			startX = handle.getStyle('left').toInt();
			mouseStartX = e.page.x - barX;
			$(document.body).addEvent('mousemove', mouseMoveHandler).addEvent('mouseup', mouseUpHandler).addEvent('mouseleave', mouseUpHandler);
		});
		
		view.addEvent('resize', function() {
			scrollWidth = view.getScrollSize().x;
			if (width < scrollWidth) {
				for (var i = 0; i < numPages; i++) {
					pagethumbs[i].dispose();
				}
				numPages = Math.ceil(scrollWidth / pageWidth);
				handleWidth = Math.max(Math.floor(barWidth / numPages), 50);
				handleWidth2 = Math.round(handleWidth / 2);
				handle.setStyle('width', handleWidth);
				numSteps = scrollWidth - width;
				stopX = barWidth - handleWidth;
				bar.show();
				createPageThumbs();
				scrollTo(0);
			}
			else {
				stopSlide();
				bar.hide();
			}
		});
		
		if (width >= scrollWidth)
			bar.hide();
		else
			createPageThumbs();
	},
	
	mouseDownScroller: function() {
		Site.mouseDown = true;
		$(document.body).addEvent('mouseup', Site.mouseUpScroller);
	},
	
	mouseUpScroller: function() {
		Site.mouseDown = false;
		$(document.body).removeEvent('mouseup', Site.mouseUpScroller).setStyle('cursor', 'auto');
	},
	
	setupSelect: function(select) {
		if (select.get('size') <= 1) {
			if (select.hasClass('menu'))
				Site.setupMenu(select);
			else
				Site.setupDropDown(select);
		}
		else
			Site.setupList(select);
	},
	
	setupMenu: function(select) {
		if (Site.IE6 || Site.IE7) return;
		var margin = select.getStyle('margin');
		
		select.setStyle('display', 'none');
		
		var popupbutton = new Element('div', { 'class': 'popupbutton', styles: { 'margin': margin } });
		var label = new Element('div', { 'class': 'label' });
		var showLabel = select.hasClass('showlabel');
		var months = select.hasClass('months');
		
		if (!showLabel)
			label.set('text', Site.getControlTitle(select));
		else
			label.set('text', select.options[(select.selectedIndex >= 0 ? select.selectedIndex : 0)].text);
		
		var menu = new Element('div', { 'class': 'menu', styles: { 'display': 'none' } });
		menu.grab(new Element('div', { 'class': 'topleft' })).grab(new Element('div', { 'class': 'top' })).grab(new Element('div', { 'class': 'topright' })).grab(new Element('div', { 'class': 'left' })).grab(new Element('div', { 'class': 'right' })).grab(new Element('div', { 'class': 'bottomleft' })).grab(new Element('div', { 'class': 'bottom' })).grab(new Element('div', { 'class': 'bottomright' }));
		
		var options = select.options;
		var len = options.length;
		var items = [];
		var prevLetter = null;
		
		for (var i = 0; i < len; i++) {
			var opt = options[i];
			if (len > 10 || months) {
				if (opt.value == 'all') {
					items.unshift({ type: 'item', index: i, value: opt.value, text: opt.text });
					continue;
				}
				var letter = (months ? opt.text.substr(opt.text.lastIndexOf(' ') + 1) : opt.text.charAt(0).toUpperCase());
				if (letter != prevLetter) {
					if (i > 0)
						items.push({ type: 'empty' });
					items.push({ type: 'head', text: letter });
					prevLetter = letter;
				}
			}
			items.push({ type: 'item', index: i, value: opt.value, text: opt.text });
		}
		
		var selectedItem = null;
		
		var clickHandler = function(e) {
			if (selectedItem != null) {
				selectedItem.row.removeClass('selected');
				selectedItem = null;
			}
			
			e = new Event(e);
			
			for (var i = len - 1; i >= 0; i--) {
				if (items[i].row && (items[i].row == e.target || items[i].row.hasChild(e.target)) && items[i].type == 'item') {
					selectedItem = items[i];
					selectedItem.row.addClass('selected');
					if (showLabel)
						label.set('text', selectedItem.text);
					if (select.selectedIndex != selectedItem.index) {
						select.selectedIndex = selectedItem.index;
						select.fireEvent('change');
					}
					break;
				}
			}
			
			menu.setStyle('display', 'none');
		};
		
		len = items.length;
		var numColumns = Math.min(Math.ceil(len * 18 / 400), 3);
		var numPerColumn = Math.ceil(len / numColumns);
		var index = 0;
		
		if (items[0].value == 'all') {
			items[0].row = new Element('div', { 'class': 'row item all' }).appendText(items[0].text).addEvent('mousedown', Site.mouseDownItem).addEvent('click', clickHandler).inject(menu);
			index++;
		}
		
		for (var i = 0; i < numColumns; i++) {
			var column = new Element('div', { 'class': 'column' + (i == numColumns - 1 ? ' last' : '') });
			for (var j = 0; j < numPerColumn; j++) {
				if (index >= len) continue;
				var item = items[index];
				if (item.value == 'all') {
					index++;
					continue;
				}
				var row = new Element('div', { 'class': 'row ' + item.type });
				if (item.type == 'head') {
					if (j == numPerColumn - 1) continue;
					row.appendText(item.text);
				}
				else if (item.type != 'empty')
					row.appendText(item.text).addEvent('mousedown', Site.mouseDownItem).addEvent('click', clickHandler);
				else if (j == 0) {
					index++;
					continue;
				}
				column.grab(row);
				item.row = row;
				index++;
			}
			menu.grab(column);
		}
		
		var arrow = new Element('div', { 'class': 'arrow' });
		
		var delay = null;
		var showMenu = function() {
			if (delay != null) {
				clearTimeout(delay);
				delay = null;
			}
			if (Site.menus != undefined) {
				for (var i = Site.menus.length - 1; i >= 0; i--) {
					if (Site.menus[i].menu != menu)
						Site.menus[i].func();
				}
			}
			menu.show();
			var menuSize = menu.getSize();
			menu.setStyle('top', Math.round((popupbutton.getSize().y - menuSize.y) / 2));
			var pos = menu.getPosition();
			var scroll = window.getScroll();
			var windowSize = window.getSize();
			if (pos.y < scroll.y + 40)
				menu.setStyle('top', Math.min(menu.getStyle('top').toInt() + (scroll.y + 40 - pos.y), 20));
			else if (pos.y + menuSize.y > scroll.y + windowSize.y - 40)
				menu.setStyle('top', Math.min(menu.getStyle('top').toInt() - (pos.y + menuSize.y - (scroll.y + windowSize.y - 40)), 20));
			arrow.show();
		};
		var hideMenu = function() {
			if (delay != null) {
				clearTimeout(delay);
				delay = null;
			}
			menu.hide();
			arrow.hide();
		};
		
		label.addEvent('click', showMenu);
		popupbutton.addEvent('mouseenter', showMenu);
		popupbutton.addEvent('mouseleave', function() { if (delay == null) delay = setTimeout(hideMenu, 200); });
		
		menu.setStyle('width', numColumns * 160 - 20);
		
		popupbutton.grab(label);
		popupbutton.grab(menu);
		popupbutton.grab(arrow);
		popupbutton.inject(select, 'after');
		
		if (Site.menus == undefined)
			Site.menus = [];
		Site.menus.push({ menu: menu, func: hideMenu });
		
		if (select.selectedIndex >= 0) {
			for (var i = len - 1; i >= 0; i--) {
				if (items[i].type == 'item' && items[i].index == select.selectedIndex) {
					selectedItem = items[i];
					selectedItem.row.addClass('selected');
				}
			}
		}
	},
	
	setupDropDown: function(select) {
		if (Site.IE6) return;
		var display = select.getStyle('display');
		var margin = select.getStyle('margin');
		
		select.hide();
		
		var dropdown = new Element('div', { 'class': 'dropdown', styles: { display: display, margin: margin } });
		var label = new Element('div', { 'class': 'label' });
		
		var showLabel = (Site.getControlOptions(select).indexOf('showlabel') != -1);
		
		if (!showLabel)
			label.set('text', Site.getControlTitle(select));
		else
			label.set('text', select.options[(select.selectedIndex >= 0 ? select.selectedIndex : 0)].text);
		
		var menu = new Element('div', { 'class': 'menu', 'styles': { 'display': 'none' } });
		var options = select.getElements('option');
		var len = options.length;
		
		var clickHandler = function(e) {
			if (select.selectedIndex >= 0)
				menu.childNodes[select.selectedIndex].removeClass('selected');
			
			e = new Event(e);
			
			for (var i = menu.childNodes.length - 1; i >= 0; i--) {
				if (menu.childNodes[i] == e.target || menu.childNodes[i].hasChild(e.target)) {
					menu.childNodes[i].addClass('selected');
					if (showLabel)
						label.set('text', select.options[i].text);
					if (select.selectedIndex != i) {
						select.selectedIndex = i;
						select.fireEvent('change');
					}
					Site.fadeOutItem(menu.childNodes[i]);
					break;
				}
			}
			
			menu.setStyle('display', 'none');
		};
		
		for (var i = 0; i < len; i++) {
			menu.grab(new Element('div', { 'class': (i == 0 ? 'row first' : (i == len - 1 ? 'row last' : 'row')) }).appendText(options[i].get('text')).addEvent('mousedown', Site.mouseDownItem).addEvent('click', clickHandler));
		}
		
		label.addEvent('click', function() { menu.setStyle('display', 'block'); });
		dropdown.addEvent('mouseenter', function(e) {
			if (e.relatedTarget && $(e.relatedTarget).hasClass('dropdown_selected_row')) return;
			menu.setStyle('display', 'block');
			//menu.setStyle('top', -menu.childNodes[select.selectedIndex].getCoordinates(menu).top);
		});
		dropdown.addEvent('mouseleave', function() { menu.setStyle('display', 'none'); });
		
		dropdown.grab(label);
		dropdown.grab(menu);
		dropdown.inject(select, 'after');
		
		if (select.selectedIndex >= 0)
			menu.childNodes[select.selectedIndex].addClass('selected');
	},
	
	fadeOutItem: function(item) {
		var coords = item.getCoordinates();
		var e = new Element('div', { 'class': 'dropdown_selected_row', 'styles': { 'top': coords.top, 'left': coords.left } }).appendText(item.get('text'));
		if (item.hasClass('first'))
			e.addClass('first');
		else if (item.hasClass('last'))
			e.addClass('last');
		$(document.body).grab(e);
		new Fx.Tween(e, { duration: 200 }).addEvent('complete', function() { e.dispose(); }).start('opacity', 1, 0);
	},
	
	mouseDownItem: function(e) {
		new Event(e).stop();
	},
	
	setupList: function(select) {
		if (Site.IE6) return;
		var size = select.getSize();
		var margin = select.getStyle('margin');
		
		select.setStyle('display', 'none');
		
		var list = new Element('div', { 'class': 'list', 'styles': { 'width': size.x, 'height': size.y, 'margin': margin } });
		var head = new Element('div', { 'class': 'head' }).appendText(Site.getControlTitle(select));
		var view = new Element('div', { 'class': 'view' });
		
		var options = select.getElements('option');
		var len = options.length;
		
		var clickHandler = function(e) {
			if (select.selectedIndex >= 0)
				view.childNodes[select.selectedIndex].removeClass('selected');
			
			e = new Event(e);
			
			for (var i = view.childNodes.length - 1; i >= 0; i--) {
				var row = view.childNodes[i];
				if (row == e.target || row.hasChild(e.target)) {
					row.addClass('selected');
					row.setStyle('backgroundColor', '#EEE');
					new Fx.Tween(row, { duration: 200 }).start('backgroundColor', '#DBDBDB').addEvent('complete', function() { row.setStyle('backgroundColor', ''); });
					if (select.selectedIndex != i) {
						select.selectedIndex = i;
						select.fireEvent('change');
					}
					break;
				}
			}
		};
		
		for (var i = 0; i < len; i++) {
			var row = new Element('div', { 'class': (i == 0 ? 'row first' : (i == len - 1 ? 'row last' : 'row')) });
			var color = Site.getControlOptions(options[i]);
			if (color != '') {
				row.setStyle('color', Site.getColorByName(color));
				row.grab(new Element('img', { 'src': 'images/color_' + color + '.png', 'width': '8', 'height': '8', 'class': 'color' }));
			}
			view.grab(row.appendText(options[i].get('text')).addEvent('mousedown', Site.mouseDownItem).addEvent('click', clickHandler));
		}
		
		var corner = new Element('div', { 'class': 'corner' });
		var bar = new Element('div', { 'class': 'bar' });
		
		var arrowUp = new Element('div', { 'class': 'arrow up', 'styles': { 'top': 0 } });
		arrowUp.addEvent('mousedown', function(e) {
			new Event(e).stop();
			slider.set(slider.step - 28);
			Site.timeout = setTimeout(function() { slider.set(slider.step - 28); Site.interval = setInterval(function() { slider.set(slider.step - 28); }, 50); }, 500);
			$(document.body).addEvent('mouseup', Site.mouseUpArrow);
		});
		var arrowDown = new Element('div', { 'class': 'arrow down', 'styles': { 'bottom': 0 } });
		arrowDown.addEvent('mousedown', function(e) {
			new Event(e).stop();
			slider.set(slider.step + 28);
			Site.timeout = setTimeout(function() { slider.set(slider.step + 28); Site.interval = setInterval(function() { slider.set(slider.step + 28); }, 50); }, 500);
			$(document.body).addEvent('mouseup', Site.mouseUpArrow);
		});
		
		if (Browser.Engine.trident && Browser.Engine.version < 5) {
			view.setStyle('width', size.x - 27);
			view.setStyle('height', size.y - 29);
			bar.setStyle('height', size.y - 54);
		}
		
		list.grab(head);
		list.grab(view);
		list.grab(corner);
		list.grab(bar);
		list.grab(arrowUp);
		list.grab(arrowDown);
		list.inject(select, 'after');
		
		var height = view.getSize().y;
		var scrollHeight = view.getScrollSize().y;
		
		if (height < scrollHeight) {
			var handle = new Element('div', { 'class': 'handle', 'styles': { 'height': Math.max(Math.round((height - 52) * height / scrollHeight), 30) } });
			bar.grab(handle);
			
			var slider = new Slider(bar, handle, { 'steps': (scrollHeight - height), 'mode': 'vertical' });
			slider.addEvent('change', function(step) {
				view.scrollTo(0, step);
			});
			slider.set(0);
			
			$$(view, bar).addEvent('mousewheel', function(e) {
				e = new Event(e);
				slider.set(slider.step - e.wheel * 20);
				if (slider.step > 0 && slider.step < slider.steps)
					e.stop();
			});
			
			$(document.body).addEvent('mouseleave', function() { slider.drag.stop(); });
		}
		else {
			arrowUp.addClass('disabled');
			arrowDown.addClass('disabled');
			bar.addClass('disabled');
		}
		
		if (select.selectedIndex >= 0) {
			var row = view.childNodes[select.selectedIndex];
			row.addClass('selected');
			
			var pos = row.getPosition(view).y;
			var size = row.getSize().y;
			var scroll = view.getScroll().y;
			var viewSize = view.getSize().y;
			if (pos < scroll)
				slider.set(pos);
			else if (pos + size > scroll + viewSize)
				slider.set(pos + size - viewSize);
		}
	},
	
	mouseUpArrow: function() {
		if (Site.timeout != null) {
			clearTimeout(Site.timeout);
			Site.timeout = null;
		}
		if (Site.interval != null) {
			clearInterval(Site.interval);
			Site.interval = null;
		}
		$(document.body).removeEvent('mouseup', Site.mouseUpArrow);
	},
	
	setupNonBreaking: function(column) {
		var size = column.getSize();
		var items = column.getElements('.item');
		var len = items.length;
		var outside = false;
		
		var redoLayout = function() {
			var notLoaded = column.retrieve('imgsNotLoaded', 0) - 1;
			column.store('imgsNotLoaded', notLoaded);
			
			if (notLoaded <= 0)
				Site.setupNonBreaking(column);
		};
		
		var notLoaded = 0;
		
		for (var i = 0; i < len; i++) {
			var imgs = items[i].getElements('img');
			
			for (var j = imgs.length - 1; j >= 0; j--) {
				var img = imgs[j];
				if (!img.complete) {
					notLoaded++;
					img.addEvent('load', redoLayout).addEvent('error', redoLayout);
				}
			}
		}
		
		if (notLoaded > 0) {
			column.store('imgsNotLoaded', notLoaded);
			return;
		}
		
		for (i = 0; i < len; i++) {
			var item = items[i];
			if (!outside) {
				var p = item.getPosition(column);
				var s = item.getSize();
				if (p.y + s.y > size.y || p.x + s.x > size.x)
					outside = true;
			}
			if (outside)
				item.setStyle('display', 'none');
		}
	},
	
	setupFadingBackground: function(el) {
		var bg = el.getElement('.background');
		if (bg) {
			bg.show().setStyle('opacity', 0);
			bg.set('tween', { duration: 200 });
			el.addEvent('mouseenter', function() { bg.fade(1); }).addEvent('mouseleave', function() { bg.fade(0); });
		}
	},
	
	popup: function(url, id, width, height) {
		var win = window.open(url, id, "width=" + width + ",height=" + height + ",status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=0,scrollbars=0");
		win.focus();
		return win;
	}
};

window.addEvent('domready', Site.initialize);