var Scroller = function() {
	var curMargin = 0;
	var direction = null;
	var isMoving = false;
	var whellDelta = 0;
	var maxMargin;	
	var mim = $.browser.msie ? 10 : 12; //min item margin
	var isMoveScroll = false;
	var jScrollItem = $("#scroll_item_id div");
	var jItemParent = $(".j_scroll_parent");
	var fullItemH;
	var itemHeight;
	var contentH;
	var fullContentH;
	var startDragY;
	var startDragMargin;

	function moveScroll() {
		if(isMoveScroll)
			return;
		isMoveScroll = true;

		var dir = direction;
		if(whellDelta != 0) {
			dir = whellDelta < 0;
			whellDelta += dir?1:-1;			
		}
		if(dir !== null) {
			isMoving = true;
			curMargin += dir?-10:10;
			if(curMargin >= 0) {
				curMargin = 0;
				direction = null;
				whellDelta = 0;
			} 
			if(curMargin <= maxMargin) {
				curMargin = maxMargin;
				direction = null;
				whellDelta = 0;
			}
			var itemMargin = Math.round(-fullItemH * curMargin/fullContentH)  + mim;
			jScrollItem.css("margin-top",itemMargin);
			
			$(".j_content_id .down").css("margin-top", curMargin);
			setTimeout(moveScroll, 50);
		} else {
			isMoving = false;
		}

		isMoveScroll = false;
	}

	$("#scroll_item_id").bind("mousedown",function(e) {
		startDragY  = e.pageY;
		startDragMargin = curMargin;

		$(document).bind("mousemove", onDragMove);
		$(document).bind("mouseup", endDrag);
		return false;
	});

	function onDragMove(e) {
		var dy = e.pageY - startDragY;
		curMargin = startDragMargin - dy*fullContentH/fullItemH;

		if(curMargin >= 0) 
			curMargin = 0;
		if(curMargin <= maxMargin) 
			curMargin = maxMargin;

		var itemMargin = Math.round(-fullItemH * curMargin/fullContentH) + mim;
		jScrollItem.css("margin-top",itemMargin);
		//jItemParent.css("height", fullItemH - itemMargin + 2);
		$(".j_content_id .down").css("margin-top", Math.round(curMargin));
		return false;
	}

	function endDrag() {
		curMargin = Math.round(curMargin);
		$(document).unbind("mousemove", onDragMove);
		$(document).unbind("mouseup", endDrag);
		return false;
	}

	function cancelMove() {
		direction = null;
		$(document).unbind("mouseup",cancelMove);
	}


	function onMouseWhell(e) {
		var event = e || window.event;
		var delta = 0;
		if (event.wheelDelta) {
			delta = event.wheelDelta/120;
			//if (window.opera)
			//	delta = -delta;
		} else if(event.detail) {
			delta = -event.detail/3;
		}
		
		if(delta) {
			whellDelta += delta;
			if(!isMoving)
				moveScroll();
		}

		 if (event.preventDefault)
                event.preventDefault();
		event.returnValue = false;
	}

	$("#scroll_down").bind("mousedown",function(){
		direction = true; 
		moveScroll();
		$(document).bind("mouseup",cancelMove);
		return false;
	});

	$("#scroll_up").bind("mousedown",function(){
		direction = false;
		moveScroll();
		$(document).bind("mouseup",cancelMove);
		return false;
	});

	//обработчики на колёсико мышки
	if (window.addEventListener)
        window.addEventListener('DOMMouseScroll', onMouseWhell, false);
	window.onmousewheel = document.onmousewheel = onMouseWhell;

	this.updateHeight = function() {		
		if(!contentH) {
			$("#scrollbar_id").show();
			contentH = $(".content")[0].offsetHeight;
			fullItemH = jItemParent[0].offsetHeight - 25;
		}
		var jCd = $(".j_content_id .down");
		if(jCd.length) {
			fullContentH = jCd[0].offsetHeight;		
			maxMargin = contentH - fullContentH;
		} else 
			maxMargin = 1;
		if(maxMargin > 0) {
			$("#scrollbar_id").hide();
			maxMargin = 0;
		} else {
			$("#scrollbar_id").show();
			
			itemHeight = Math.round(fullItemH * contentH / fullContentH);
			jScrollItem.css("height",itemHeight+"px");
			$("div",jScrollItem).css("height",itemHeight+"px");
		}

		curMargin = 0;
		$(".j_content_id").css("margin-top",0);
		jScrollItem.css("margin-top",mim);
		//jItemParent.css("height", fullItemH + 2);
	};
	//this.updateHeight();

}
var scrollerInstance;

var MenuRounder = function() {
	var jMenu = $("div.menu");
	var needPos;
	var moveTime = 500;
	var positions = [];

	function getAbsPos(i) {
		var sLeft = $(jMenu[i]).css("left");
		if(sLeft == 'auto') sLeft = "0";
		var sTop = $(jMenu[i]).css("top");
		if(sTop == 'auto') sTop = "0";
		positions[i] = {
			left: parseInt(sLeft.replace("px","")),
			top: parseInt(sTop.replace("px",""))
		};
	}

	function goRound() {
		if(needPos) {
			var moveIndexes;
			var realPos;
			switch(needPos) {
				case 1:
					moveIndexes = [2,0,3,1];
					break;
				case 2:
					moveIndexes = [1,3,0,2];
					break;
				case 3:
					moveIndexes = [3,1,2,0];
					break;
			}
			var newPos = [];
			var newJMenu = [];
			for(var i=0; i<jMenu.length; i++) {
				var ni = moveIndexes[i];
				moveItem(i,ni,i==jMenu.length-1);

				newJMenu[ni] = jMenu[i];
				jMenu[i].objIndex = ni;
			}
			jMenu = newJMenu;
		}
	}

	function moveItem(moveIndex, toIndex, isAction) {
		var oAnimate = {
			left: positions[toIndex].left,
			top:  positions[toIndex].top
		};
		if(isAction) {
			onLoadSemaphore.inc();
			$(jMenu[moveIndex]).animate(oAnimate, moveTime,"swing",function(){onLoadSemaphore.dec();});
		} else
			$(jMenu[moveIndex]).animate(oAnimate, moveTime,"swing");
	}
	
	for(var i=0; i<jMenu.length; i++) {
		jMenu[i].objIndex = i;
		getAbsPos(i);
	}

	jMenu.bind("mouseup",function() {
		needPos = this.objIndex;
		if(needPos != 0) {
			goRound();
		}
		return false;
	});
	
	$("a", jMenu).focus(function(){this.blur();});
}

$(document).ready(function() {	
	scrollerInstance = new Scroller();
	new MenuRounder();
	
	var hm = $("#center")[0].offsetHeight;
	$("#left").css("height", hm);
	$("#right").css("height", hm);
});