var minThumbHeight = 3;

function initializeScroller() {
	var content = document.getElementById('content');
	var divs = content.getElementsByTagName('DIV');
	var scroll = null;
	
	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className == 'scroll') {
			scroll = divs[i];
		}
	}
	
	if (!scroll) return;
	
	var correctPosition =
		function() {
			var sh = scroll.scrollHeight;
			var oh = scroll.offsetHeight;
			
			if (sh > oh) {
				var maxHeight = scroll.thumb.parentNode.offsetHeight;
				var height = Math.max(minThumbHeight, Math.round(oh * maxHeight / sh));
				
				scroll.thumb.style.marginTop = Math.round(scroll.scrollTop * maxHeight / sh) + 'px';
				scroll.thumb.style.height = height + 'px';
			} else {
				scroll.thumb.style.marginTop = '0px';
				scroll.thumb.style.height = '100%';
			}
		}
	
	var correctBounds =
		function() {
			if (scroll.replaced && (scroll.scrollHeight != scroll.lastHeight)) {
				scroll.lastHeight = scroll.scrollHeight;
				correctPosition();
			} else if (!scroll.replaced && (scroll.scrollHeight > scroll.offsetHeight)) {
				var first = scroll.childNodes[0].childNodes[0];
				
				if (first.tagName && (first.tagName.toUpperCase() == 'H2')) {
					var height = first.offsetHeight;
					if (height > scroll.offsetHeight) return;
					scroll.parentNode.insertBefore(first, scroll);
					scroll.style.height = (scroll.offsetHeight - height) + 'px';
				}
				
				var html = '<table class="thumb">';
				html += '<tr><td class="up"><img src="' + base_d + 'design/scrollup.gif" width="15" height="16" alt="Прокрутить вверх" /></td></tr>';
				html += '<tr><td><div class="core"><div></div></div></td></tr>';
				html += '<tr><td class="down"><img src="' + base_d + 'design/scrolldown.gif" width="15" height="16" alt="Прокрутить вниз" onmouseover="this.src = \'' + base_d + 'design/scrolldownover.gif\'" onmouseout="this.src = \'' + base_d + 'design/scrolldown.gif\'" /></td></tr>';
				html += '</table>';
				
				var thumb_cell = document.createElement('TD');
				thumb_cell.className = 'thumb-cell';
				thumb_cell.innerHTML = html;
				
				scroll.parentNode.parentNode.appendChild(thumb_cell);
				scroll.thumb = thumb_cell.getElementsByTagName('DIV')[1];
				scroll.dragOffset = 0;
				
				scroll.style.width = (scroll.offsetWidth - 25) + 'px';
				scroll.replaced = true;
				
				scroll.scrollBy =
					function(delta)
					{
						if (delta != 0)
						{
							var newTop = Math.max(0, Math.min(scroll.scrollHeight - scroll.offsetHeight, scroll.scrollTop + delta));
							
							if (newTop != scroll.scrollTop)
								scroll.scrollTop = newTop;
						}
					}
				
				var html = document.getElementsByTagName('HTML')[0];
				var images = thumb_cell.getElementsByTagName('IMG');
				images[0].onclick = function() { scroll.scrollBy(-32); return false; }
				images[0].onmouseover = function() { if (!html.onmousemove) this.src = base_d + 'design/scrollupover.gif'; }
				images[0].onmouseout = function() { this.src = base_d + 'design/scrollup.gif'; }
				images[1].onclick = function() { scroll.scrollBy(32); return false; }
				images[1].onmouseover = function() { if (!html.onmousemove) this.src = base_d + 'design/scrolldownover.gif'; }
				images[1].onmouseout = function() { this.src = base_d + 'design/scrolldown.gif'; }
				
				var getOffset =
					function(element)
					{
						var top = 0;
						
						while (element)
						{
							top += element.offsetTop;
							element = element.offsetParent;
							
							if (element) {
								top -= element.scrollTop;
							}
						}
						
						return top;
					}
				
				scroll.thumb.onmousedown =
					function(e)
					{
						if (!e) e = event;
						scroll.dragOffset = Math.max(0, Math.min(scroll.thumb.offsetHeight, e.clientY - getOffset(scroll.thumb) + html.clientTop));
						
						html.ondragstart = function() { return false; }
						html.onselectstart = function() { return false; }
						
						html.onmousemove =
							function(e)
							{
								if (!e) e = event;
								
								var maxHeight = scroll.thumb.parentNode.offsetHeight;
								var maxTop = scroll.thumb.parentNode.offsetHeight - scroll.thumb.offsetHeight;
								
								if ((maxTop > 0) && (scroll.scrollHeight > scroll.offsetHeight))
								{
									var pos = Math.max(0, Math.min(maxTop, e.clientY - getOffset(scroll.thumb.parentNode) + html.clientTop - scroll.dragOffset));
									scroll.thumb.style.marginTop = pos + 'px';
									
									scroll.onscroll = null;
									scroll.scrollTop = Math.round(pos * scroll.scrollHeight / maxHeight);
									scroll.onscroll = correctPosition;
								}
							}
						
						html.onmouseup =
							function()
							{
								html.ondragstart = null;
								html.onselectstart = null;
								html.onmousemove = null;
								html.onmouseup = null;
								return false;
							}
						
						return false;
					}
				
				document.onmousewheel =
					function(e)
					{
						if (!scroll.over) return;
						if (!e) e = event;
						
						var delta = 0;
						if (e.wheelDelta) delta = -Math.round(e.wheelDelta / 2);
						if (e.detail) delta = e.detail * 16;
						
						!scroll.scrollBy(delta);
						
						if (e.preventDefault) {
							e.preventDefault();
						} else {
							e.returnValue = false;
						}
						
						return true;
					}
				
				if (document.addEventListener)
					document.addEventListener('DOMMouseScroll', document.onmousewheel, false);
			}
		}
	
	scroll.style.overflow = 'hidden';
	scroll.replaced = false;
	scroll.over = false;
	scroll.lastHeight = -1;
	scroll.onscroll = correctPosition;
	scroll.parentNode.onmouseover = function() { scroll.over = true; if (scroll.outTimer) clearTimeout(scroll.outTimer); scroll.outTimer = null; }
	scroll.parentNode.onmouseout = function() { scroll.outTimer = setTimeout(function() { scroll.over = false; scroll.outTimer = null; }, 50); }
	
	setInterval(correctBounds, 50);
}

