/*ScrollerController*/

var ScrollerController = new Object();

ScrollerController.scrolling = null; //index interwalu

ScrollerController.scrollerObj = null;
ScrollerController.sliderObj = null;

/*void*/ ScrollerController.shiftTo = function (/*int*/ scrollerOffset) {
		var left = parseInt(ScrollerController.scrollerObj.css("left"));
		var step = left - scrollerOffset
		var clip = ScrollerController.scrollerObj.css("clip");
		
		if (scrollerOffset == 0) {
			ScrollerController.scrollerObj.css("left", 0 + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,left,0,left));			
		} else if (scrollerOffset == MAX_SCROLLER_OFFSET) {
			ScrollerController.scrollerObj.css("left", -MAX_SCROLLER_OFFSET + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,MAX_SCROLLER_OFFSET + left,0,MAX_SCROLLER_OFFSET + left));			
		} else {
			ScrollerController.scrollerObj.css("left", (left - step) + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,step,0,step));
		}
};

/*void*/ ScrollerController.shiftLeft = function () {
	if (MAX_SCROLLER_OFFSET > 0) {
		var left = parseInt(ScrollerController.scrollerObj.css("left"));
		var clip = ScrollerController.scrollerObj.css("clip");
		if ((left + STEP) < 0) {
			ScrollerController.scrollerObj.css("left", (left + STEP) + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,-STEP,0,-STEP));
			ScrollerController.sliderObj.css("left", ScrollerController.computeSliderOffset(left + STEP) + "px");
		} else {
			ScrollerController.scrollerObj.css("left", 0 + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,left,0,left));
			ScrollerController.sliderObj.css("left", 0 + "px");
		}
	}	
};

/*void*/ ScrollerController.scrollLeft = function () {
	ScrollerController.scrolling = setInterval("ScrollerController.shiftLeft()", SPEED);
};

ScrollerController.shiftRight = function () {
	if (MAX_SCROLLER_OFFSET > 0) {
		var left = parseInt(ScrollerController.scrollerObj.css("left"));
		var clip = ScrollerController.scrollerObj.css("clip");
		if ((left - STEP) > -MAX_SCROLLER_OFFSET) {
			ScrollerController.scrollerObj.css("left", (left - STEP) + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,STEP,0,STEP));
			ScrollerController.sliderObj.css("left", ScrollerController.computeSliderOffset(left - STEP) + "px");
		} else {
			ScrollerController.scrollerObj.css("left", -MAX_SCROLLER_OFFSET + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,MAX_SCROLLER_OFFSET + left,0,MAX_SCROLLER_OFFSET + left));
			ScrollerController.sliderObj.css("left", MAX_SLIDER_OFFSET + "px");
		}
	}
};

ScrollerController.initShiftRight = function () {
	if (MAX_SCROLLER_OFFSET > 0) {
		var left = parseInt(ScrollerController.scrollerObj.css("left"));
		var clip = ScrollerController.scrollerObj.css("clip");

		if ((left - INIT_STEP) > -MAX_SCROLLER_OFFSET) {
			dPosition = (left/-MAX_SCROLLER_OFFSET) * 100;
			intPos = parseInt(dPosition);
			intPosCenter = parseInt(MAX_SCROLLER_OFFSET * 0.5);

			if(intPos == 0) {
				ScrollerController.scrollerObj.css("left", (left - intPosCenter) + "px");
				ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,intPosCenter,0,intPosCenter));
				ScrollerController.sliderObj.css("left", ScrollerController.computeSliderOffset(left - intPosCenter) + "px");
			} else {
				PROCENT_CZASU_NA_EASEOUT = 0.1; // im większy, tym wcześniej zacznie zwalniać
				if((MAX_SCROLLER_OFFSET + left) < (MAX_SCROLLER_OFFSET * PROCENT_CZASU_NA_EASEOUT)){
					if(INIT_STEP > 0 ) {
						INIT_STEP -= parseInt(INIT_STEP/4);
					} else {
						INIT_STEP = 1;
					}
				} else {
					W_ILU_KROKACH_DO_KONCA = 24; // im więcej tym wolniej
					DYSTANS = MAX_SCROLLER_OFFSET - intPosCenter; // prędkość zależy od dystansu
					INIT_STEP = parseInt(DYSTANS / W_ILU_KROKACH_DO_KONCA);
				}
				ScrollerController.scrollerObj.css("left", (left - INIT_STEP ) + "px");
				ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,INIT_STEP,0,INIT_STEP));
				ScrollerController.sliderObj.css("left", ScrollerController.computeSliderOffset(left - INIT_STEP) + "px");
			}
		} else {
			ScrollerController.scrollerObj.css("left", -MAX_SCROLLER_OFFSET + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,MAX_SCROLLER_OFFSET + left,0,MAX_SCROLLER_OFFSET + left));
			ScrollerController.sliderObj.css("left", MAX_SLIDER_OFFSET + "px");
			ScrollerController.initStop();
		}
	}
};	

/*void*/ ScrollerController.scrollRight = function () {
	ScrollerController.scrolling = setInterval("ScrollerController.shiftRight()", SPEED);
};

/*void*/ ScrollerController.initScrollRight = function () {
	ScrollerController.initScrolling = setInterval("ScrollerController.initShiftRight()", INIT_SPEED);
};

/*void*/ ScrollerController.stop = function () {
	clearInterval(ScrollerController.scrolling);
};

/*void*/ ScrollerController.initStop = function () {
	clearInterval(ScrollerController.initScrolling);
	ScrollerController.mouseEvent();
};
ScrollerController.skipTo = function (cellIndex) {
	STEPskipTo = STEP;
	if(cellIndex > 2){
			STEPskipTo = 158*(cellIndex-2);
	} else {
			STEPskipTo = 0;
	}
	if (MAX_SCROLLER_OFFSET > 0) {
	var left = parseInt(ScrollerController.scrollerObj.css("left"));
	var clip = ScrollerController.scrollerObj.css("clip");		
		if ((left - STEPskipTo) > -MAX_SCROLLER_OFFSET) {
			ScrollerController.scrollerObj.css("left", (left - STEPskipTo) + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,STEPskipTo,0,STEPskipTo));
			ScrollerController.sliderObj.css("left", ScrollerController.computeSliderOffset(left - STEPskipTo) + "px");
		} else {
			ScrollerController.scrollerObj.css("left", -MAX_SCROLLER_OFFSET + "px");
			ScrollerController.scrollerObj.css("clip",CommonTool.getCssClipUpdateValue(clip,0,MAX_SCROLLER_OFFSET + left,0,MAX_SCROLLER_OFFSET + left));
			ScrollerController.sliderObj.css("left", MAX_SLIDER_OFFSET + "px");
		}
	}
	ScrollerController.mouseEvent();
};

/*int*/ ScrollerController.computeScrollerOffset = function (/*int*/ sliderOffset) {
	return parseInt((MAX_SCROLLER_OFFSET * sliderOffset) / -MAX_SLIDER_OFFSET);
};

/*int*/ ScrollerController.computeSliderOffset = function (/*int*/ scrollerOffset) {
	return parseInt((MAX_SLIDER_OFFSET * scrollerOffset) / -MAX_SCROLLER_OFFSET);
};

/*void*/ ScrollerController.dragSlider = function (/*event*/ e,/*draggable object*/ slider) {
	//$("#debug").val(slider.position.left);
	if (slider.position.left == 0) {
		ScrollerController.shiftTo(0);
	} else if (slider.position.left == MAX_SLIDER_OFFSET) {
		ScrollerController.shiftTo(MAX_SCROLLER_OFFSET);
	} else {
		ScrollerController.shiftTo(ScrollerController.computeScrollerOffset(slider.position.left));
	}
}

ScrollerController.mouseEvent = function () {
	// danie glowne - czyli przypinanie odpowiednich eventow
	$("#scrollLeftB").mousedown(function (){
		ScrollerController.scrollLeft();
	});

	$("#scrollLeftB").mouseup(function (){
		ScrollerController.stop();
	});
	
	$("#scrollLeftB").mouseout(function (){
		if (ScrollerController.scrolling != null) {
			ScrollerController.stop();
		}
	});
	
	$("#scrollRightB").mousedown(function (){
		ScrollerController.scrollRight();
	});

	$("#scrollRightB").mouseup(function (){
		ScrollerController.stop();
	});
	
	$("#scrollRightB").mouseout(function (){
		if (ScrollerController.scrolling != null) {
			ScrollerController.stop();
		}
	});
	
	if(MAX_SCROLLER_OFFSET > 0) {
		$('#slider').draggable(
				{
					opacity: 	0.7,
					containment : 'parent',
					drag : function (e,slider) {
								ScrollerController.dragSlider(e,slider);
							}
				}
		);
	}
}
