/********************* Begin mn neckermann Mootools Scroller **********************/
function nmBrandScroller() {
}

nmBrandScroller.s_wrapper		= 'scrollcontainer';

nmBrandScroller.i_scrollItem	= 1;
nmBrandScroller.i_scrollItems	= new Array();

	// @todo understand why i cannot handle this init in a better way
nmBrandScroller.i_scrollItems[nmBrandScroller.s_wrapper] = 0;

nmBrandScroller.a_scroll		= new Array();
nmBrandScroller.a_scroll_buttons= new Array();

nmBrandScroller.a_loadedItems	= new Array();

nmBrandScroller.b_scrollStarted = false;
nmBrandScroller.b_scrollPaused	= true;

nmBrandScroller.o_brandTeaserAutoScroll = null;
nmBrandScroller.o_brandTeaserClearStatus= null;
nmBrandScroller.o_image = null;

nmBrandScroller.s_currentScrollDirection = 'next';

nmBrandScroller.i_timeInitialWaitBeforeStartScroll	= 3000;

nmBrandScroller.i_timeWaitBeforeNextScroll			= 4450;

nmBrandScroller.i_timeWaitBeforeTurnAndScroll		= 6000;

nmBrandScroller.i_timeWaitWhenContinueToScroll		= 500;

nmBrandScroller.i_timeScrollOneElement				= 4500;

nmBrandScroller.i_timeFastScrollOneElement			= 3000;//3000

nmBrandScroller.i_timeWaitBeforeNextScrollFast		= 3300;//2950

nmBrandScroller.i_timeWaitBeforeTurnAndFastScroll	= 5000;

nmBrandScroller.i_timeControlsFadeOut				= 2000;

nmBrandScroller.a_slowOptions = {
	wait:		false,
	duration:	nmBrandScroller.i_timeScrollOneElement,
	offset:		{'x': 0, 'y': -5},
	transition:	Fx.Transitions.linear,
	wheelStops: false
}

nmBrandScroller.a_fastOptions = {
	wait:		false,
	duration:	nmBrandScroller.i_timeFastScrollOneElement,
	offset:		{'x': 0, 'y': -5},
	transition:	Fx.Transitions.linear,
	wheelStops: false
}

nmBrandScroller.i_maxShowItems = 5;

nmBrandScroller.i_preloadedImages = 6;

nmBrandScroller.s_scrollerStatus = '';

nmBrandScroller.b_isTMS = true;


nmBrandScroller.initScroller = function(s_scrollerContainer){
	try{
		window.addEvent('load', function() {
			nmBrandScroller.a_scroll[s_scrollerContainer] = new Fx.Scroll(nmBrandScroller.s_wrapper, nmBrandScroller.a_slowOptions);

			// fade out left hand scroller,  in case of invisibility fade in right hand scroller
			new Fx.Style(s_scrollerContainer+'_previous', 'opacity', {duration: 0} ).start(0);
			$('scrollcontainer_previous').setStyle('visibility', 'visible');
			new Fx.Style(s_scrollerContainer+'_next', 'opacity', {duration: nmBrandScroller.i_timeControlsFadeOut} ).start(100);

			$('scrollcontainer_next').addEvent('click', function(event) {
				// clear any existant timeout before scrolling
				clearTimeout(nmBrandScroller.o_brandTeaserAutoScroll);
				clearTimeout(nmBrandScroller.o_brandTeaserClearStatus);

				nmBrandScroller.s_currentScrollDirection = 'next';

				// if there is not 5 images for scroll we adapt scroll speed
				nmBrandScroller.i_leftToScroll = nmBrandScroller.i_scrollItems[s_scrollerContainer] - nmBrandScroller.i_maxShowItems + 1 - nmBrandScroller.i_scrollItem;

				nmBrandScroller.updateStatusNext(nmBrandScroller.i_maxShowItems, s_scrollerContainer);

				if ( nmBrandScroller.i_leftToScroll < nmBrandScroller.i_maxShowItems ) {
					nmBrandScroller.i_newSpeed = nmBrandScroller.i_timeFastScrollOneElement / nmBrandScroller.i_maxShowItems * nmBrandScroller.i_leftToScroll;

					nmBrandScroller.a_fastOptions.duration = nmBrandScroller.i_newSpeed;
					nmBrandScroller.a_scroll[s_scrollerContainer].setOptions(nmBrandScroller.a_fastOptions);
					nmBrandScroller.a_scroll[s_scrollerContainer].toElement('content' + nmBrandScroller.i_scrollItem);
					nmBrandScroller.a_fastOptions.duration = nmBrandScroller.i_timeFastScrollOneElement;

					nmBrandScroller.i_timeBeforeScroll = nmBrandScroller.i_timeWaitBeforeNextScrollFast;// - i_newSpeed
				} else {
					nmBrandScroller.a_scroll[s_scrollerContainer].setOptions(nmBrandScroller.a_fastOptions);
					nmBrandScroller.a_scroll[s_scrollerContainer].toElement('content' + nmBrandScroller.i_scrollItem);

					nmBrandScroller.i_timeBeforeScroll = nmBrandScroller.i_timeWaitBeforeNextScrollFast;
				}

				nmBrandScroller.s_scrollerStatus = 'fastForward';

				nmBrandScroller.o_brandTeaserClearStatus = window.setTimeout(
					"nmBrandScroller.clearStatus('"+s_scrollerContainer+"')",
					nmBrandScroller.i_timeBeforeScroll
				);
			});

			$('scrollcontainer_previous').addEvent('click', function(event) {
				// clear any existant timeout before scrolling
				clearTimeout(nmBrandScroller.o_brandTeaserAutoScroll);
				clearTimeout(nmBrandScroller.o_brandTeaserClearStatus);

				nmBrandScroller.s_currentScrollDirection = 'previous';

				// if there is not 5 images for scroll we adapt scroll speed
				nmBrandScroller.i_leftToScroll = nmBrandScroller.i_scrollItem - 1;

				nmBrandScroller.updateStatusPrevious(nmBrandScroller.i_maxShowItems, s_scrollerContainer);

				if ( nmBrandScroller.i_leftToScroll < nmBrandScroller.i_maxShowItems ) {
					nmBrandScroller.i_newSpeed = nmBrandScroller.i_timeFastScrollOneElement / nmBrandScroller.i_maxShowItems * nmBrandScroller.i_leftToScroll;

					nmBrandScroller.a_fastOptions.duration = nmBrandScroller.i_newSpeed;
					nmBrandScroller.a_scroll[s_scrollerContainer].setOptions(nmBrandScroller.a_fastOptions);
					nmBrandScroller.a_scroll[s_scrollerContainer].toElement('content' + nmBrandScroller.i_scrollItem);
					nmBrandScroller.a_fastOptions.duration = nmBrandScroller.i_timeFastScrollOneElement;

					nmBrandScroller.i_timeBeforeScroll = nmBrandScroller.i_timeWaitBeforeNextScrollFast;// - i_newSpeed
				} else {
					nmBrandScroller.a_scroll[s_scrollerContainer].setOptions(nmBrandScroller.a_fastOptions);
					nmBrandScroller.a_scroll[s_scrollerContainer].toElement('content' + nmBrandScroller.i_scrollItem);

					nmBrandScroller.i_timeBeforeScroll = nmBrandScroller.i_timeWaitBeforeNextScrollFast;
				}

				nmBrandScroller.s_scrollerStatus = 'fastForward';

				nmBrandScroller.o_brandTeaserClearStatus = window.setTimeout(
					"nmBrandScroller.clearStatus('"+s_scrollerContainer+"')",
					nmBrandScroller.i_timeBeforeScroll
				);
			});

			$('brand_slider').addEvent('mouseout', function(event) {
				var x = mouseX(event);
				var y = mouseY(event);

				if ( nmBrandScroller.b_scrollPaused == true && ( x < 180 || x > 811 || y < 434 || y > 549 ) ) {

					nmBrandScroller.b_scrollPaused = false;

					if ( nmBrandScroller.s_scrollerStatus == '' ) {
						if ( nmBrandScroller.s_currentScrollDirection == 'previous' && nmBrandScroller.i_scrollItem == 1 ) {
							nmBrandScroller.s_currentScrollDirection = 'next';
						}
						if ( nmBrandScroller.s_currentScrollDirection == 'next' && nmBrandScroller.i_scrollItem == (nmBrandScroller.i_scrollItems[s_scrollerContainer]-nmBrandScroller.i_maxShowItems+1) ) {
							nmBrandScroller.s_currentScrollDirection = 'previous';
						}

						nmBrandScroller.continueScroll(nmBrandScroller.s_currentScrollDirection, s_scrollerContainer, nmBrandScroller.i_timeWaitWhenContinueToScroll);
					} else {
						nmBrandScroller.s_scrollerStatus = 'delayedMouseOut';
					}
				}
			});

			$('brand_slider').addEvent('mouseover', function(event) {
				if ( nmBrandScroller.b_scrollStarted == true ) {
					clearTimeout(nmBrandScroller.o_brandTeaserAutoScroll);

					nmBrandScroller.b_scrollPaused = true;
				}
			});

			nmBrandScroller.startScroll(s_scrollerContainer);
		});
	}catch(e){

	}
}

nmBrandScroller.setNotTMSMode = function() {
	nmBrandScroller.b_isTMS = false;
}

nmBrandScroller.scrollElement = function(dir, s_elementName, i_elementsToScroll, s_scrollerContainer) {
	switch(dir){
		case 'next':
			nmBrandScroller.updateStatusNext(i_elementsToScroll, s_scrollerContainer);

			break;
		case 'previous':
			nmBrandScroller.updateStatusPrevious(i_elementsToScroll, s_scrollerContainer);

			break;
	}

	nmBrandScroller.a_scroll[s_scrollerContainer].setOptions(nmBrandScroller.a_slowOptions);
	nmBrandScroller.a_scroll[s_scrollerContainer].toElement(s_elementName +''+ nmBrandScroller.i_scrollItem);

	// check if we had a turn
	if ( nmBrandScroller.s_currentScrollDirection == dir ) {
		nmBrandScroller.i_timeBeforeScroll = nmBrandScroller.i_timeWaitBeforeNextScroll;
	} else {
		nmBrandScroller.i_timeBeforeScroll = nmBrandScroller.i_timeWaitBeforeTurnAndScroll;
	}
	nmBrandScroller.continueScroll(dir, s_scrollerContainer, nmBrandScroller.i_timeBeforeScroll);
}

nmBrandScroller.updateStatusNext = function(i_numScrollItems, s_scrollerContainer) {
	nmBrandScroller.i_scrollItem += i_numScrollItems;

	if( nmBrandScroller.i_scrollItem >= nmBrandScroller.i_scrollItems[s_scrollerContainer] - nmBrandScroller.i_maxShowItems + 1) {
		// set current item to item with which you can see the most right
		nmBrandScroller.i_scrollItem = nmBrandScroller.i_scrollItems[s_scrollerContainer] - nmBrandScroller.i_maxShowItems + 1;

		// fade out right controll
		new Fx.Style(s_scrollerContainer+'_next', 'opacity', {duration: nmBrandScroller.i_timeControlsFadeOut} ).start(0);

		// if not paused then turn direction
		if ( nmBrandScroller.b_scrollPaused == false ) {
			nmBrandScroller.s_currentScrollDirection = 'previous';
		}
	}

	if( nmBrandScroller.i_scrollItem >= 2){
		// if there are more items to left fade in scroller
		new Fx.Style(s_scrollerContainer+'_previous', 'opacity', {duration: nmBrandScroller.i_timeControlsFadeOut} ).start(100);
	}

	if (nmBrandScroller.b_isTMS == true) {

		nmBrandScroller.i_currentItemForLoad = nmBrandScroller.i_scrollItem+nmBrandScroller.i_preloadedImages-1;

		if ( nmBrandScroller.i_currentItemForLoad > nmBrandScroller.i_scrollItems[s_scrollerContainer] ) {
			nmBrandScroller.i_currentItemForLoad = nmBrandScroller.i_scrollItems[s_scrollerContainer];
		}

		// dynamic load of images
		if ( nmBrandScroller.i_currentItemForLoad > nmBrandScroller.a_loadedItems[s_scrollerContainer] ) {

			for ( var i=nmBrandScroller.a_loadedItems[s_scrollerContainer]+1; i<=nmBrandScroller.i_currentItemForLoad; i++ ) {
				o_image = document.getElementById('placeHolder'+i);
				getImage('placeHolder' + i, o_image.longDesc);
				o_image.longDesc = '';
				nmBrandScroller.a_loadedItems[s_scrollerContainer]++;
			}
		}
	}
}

nmBrandScroller.updateStatusPrevious = function(i_numScrollItems, s_scrollerContainer) {
	nmBrandScroller.i_scrollItem -= i_numScrollItems;

	if(nmBrandScroller.i_scrollItem < 1) {
		nmBrandScroller.i_scrollItem = 1;
		new Fx.Style(s_scrollerContainer+'_previous', 'opacity', {duration: nmBrandScroller.i_timeControlsFadeOut} ).start(0);
		if ( nmBrandScroller.b_scrollPaused == false ) {
			nmBrandScroller.s_currentScrollDirection = 'next';
		}
	}

	if(nmBrandScroller.i_scrollItem <= (nmBrandScroller.i_scrollItems[s_scrollerContainer] -1) ){
		new Fx.Style(s_scrollerContainer+'_next', 'opacity', {duration: nmBrandScroller.i_timeControlsFadeOut} ).start(100);
	}
}

nmBrandScroller.startScroll = function(s_scrollerContainer) {
	nmBrandScroller.a_loadedItems[s_scrollerContainer]	= nmBrandScroller.i_preloadedImages;
	nmBrandScroller.b_scrollStarted						= true;
	nmBrandScroller.b_scrollPaused						= false;
	nmBrandScroller.s_currentScrollDirection			= 'next';

	nmBrandScroller.o_brandTeaserAutoScroll = window.setTimeout(
		"nmBrandScroller.scrollElement('next', 'content', 1, '"+s_scrollerContainer+"')",
		nmBrandScroller.i_timeInitialWaitBeforeStartScroll
	);
}

nmBrandScroller.continueScroll = function(dir, s_scrollerContainer, i_timeBeforeScroll) {
	if ( nmBrandScroller.b_scrollStarted == true && nmBrandScroller.b_scrollPaused == false ) {
		clearTimeout(nmBrandScroller.o_brandTeaserAutoScroll);
		clearTimeout(nmBrandScroller.o_brandTeaserClearStatus);
		nmBrandScroller.o_brandTeaserAutoScroll = window.setTimeout(
			"nmBrandScroller.scrollElement('"+nmBrandScroller.s_currentScrollDirection+"', 'content', 1, '"+s_scrollerContainer+"')",
			nmBrandScroller.i_timeBeforeScroll
		);
	}
}

nmBrandScroller.clearStatus = function(s_scrollerContainer) {
	if ( nmBrandScroller.s_scrollerStatus == 'delayedMouseOut' ) {
		nmBrandScroller.s_scrollerStatus = '';

		nmBrandScroller.continueScroll(nmBrandScroller.s_currentScrollDirection, s_scrollerContainer, nmBrandScroller.i_timeWaitWhenContinueToScroll);
	} else {
		nmBrandScroller.s_scrollerStatus = '';
	}
}

nmBrandScroller.addScrollItem = function(s_scrollerContainer){
	nmBrandScroller.i_scrollItems[s_scrollerContainer] = nmBrandScroller.i_scrollItems[s_scrollerContainer] + 1;
}

getImage = function(pExistingImageID, pImageURL){
	var img = document.createElement('img');
	img.onload = function (evt) {
		document.getElementById(pExistingImageID).src	 = this.src;
		document.getElementById(pExistingImageID).width	 = this.width;
		document.getElementById(pExistingImageID).height = this.height;
	}
	img.src = pImageURL;
	return false;
}

mouseX = function(evt) {
	if (evt.pageX) {
		return evt.pageX;
	} else if (evt.clientX) {
		return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
	} else return null;
}

mouseY = function(evt) {
	if (evt.pageY) {
		return evt.pageY;
	} else if (evt.clientY) {
		return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	} else return null;
}

nop = function() {
	// do nothing
}

