/**************************
 *
 * NiceSlide 1.0.0
 * Author: Trol InterMedia
 *
 *
 *************************/


//var NS = new Object();
var NS_Container = new Array();

if( !NS_Options ){
	var NS_Options = {
			Fps: 30 ,
			Duration: 1000 , // slide duration
			SmallObjectHoverDuration: 500 , // hover effect duration, 0 = off
			SmallObjectHoverOpacity: 0.9
	}
}

function NiceSlide(Id, ObjectName){
	if( !Id || !$(Id) )
		return false;
	if( !ObjectName )
		ObjectName = 'NS_'+Math.round(Math.random()*10000);

	NS_Container[ObjectName] = new Object();

	NS_Container[ObjectName].Obj = $(Id); // small object container
	NS_Container[ObjectName].Scroller = NS_Container[ObjectName].Obj.getElement('.ns_scroller'); // scroller
	NS_Container[ObjectName].Wrap = NS_Container[ObjectName].Obj.getElement('.ns_wrap'); // wrapper
	NS_Container[ObjectName].SmallObjects = NS_Container[ObjectName].Obj.getElements('.ns_obj'); // small object
	NS_Container[ObjectName].SmallObjectsCount = NS_Container[ObjectName].SmallObjects.length;
	NS_Container[ObjectName].SmallObjectWidth = NS_Container[ObjectName].SmallObjects[0].getSize().x;
	NS_Container[ObjectName].SmallObjectsVisibleCount = Math.round( NS_Container[ObjectName].Wrap.getSize().x / NS_Container[ObjectName].SmallObjectWidth );
	NS_Container[ObjectName].Navi = NS_Container[ObjectName].Obj.getElements('.ns_navi'); // navi buttons

	// scroll functions
	NS_Container[ObjectName].FunScrollPrev = function(){
		NS_Container[ObjectName].SmallObjects[ NS_Container[ObjectName].SmallObjectsCount-1 ].injectBefore( NS_Container[ObjectName].SmallObjects[0] );
		NS_Container[ObjectName].Wrap.scrollTo(NS_Container[ObjectName].SmallObjectWidth,0);
		NS_Container[ObjectName].SmallObjects = NS_Container[ObjectName].Obj.getElements('.ns_obj');
		if( NS_Options.SmallObjectHoverDuration>0 )
			NS_Container[ObjectName].FunSmallObjectAddEvents();
		NS_Container[ObjectName].FXScroll = new Fx.Scroll( NS_Container[ObjectName].Wrap, {
				duration: NS_Options.Duration ,
				fps: NS_Options.Fps ,
				onComplete: function(){
					NS_Container[ObjectName].FXScroll = false;
				}
			} ).toElement(NS_Container[ObjectName].SmallObjects[0],0);
	};

	NS_Container[ObjectName].FunScrollNext = function(){
		NS_Container[ObjectName].FXScroll = new Fx.Scroll( NS_Container[ObjectName].Wrap, {
				duration: NS_Options.Duration ,
				fps: NS_Options.Fps ,
				onComplete: function(){
					NS_Container[ObjectName].SmallObjects[ 0 ].injectAfter( NS_Container[ObjectName].SmallObjects[NS_Container[ObjectName].SmallObjectsCount-1] );
					NS_Container[ObjectName].Wrap.scrollTo(0,0);
					NS_Container[ObjectName].SmallObjects = NS_Container[ObjectName].Obj.getElements('.ns_obj');
					if( NS_Options.SmallObjectHoverDuration>0 )
						NS_Container[ObjectName].FunSmallObjectAddEvents();
					NS_Container[ObjectName].FXScroll = false;
				}
			} ).toElement(NS_Container[ObjectName].SmallObjects[1]);
	};

	// small object effects
	if( NS_Options.SmallObjectHoverDuration>0 ){
		NS_Container[ObjectName].FXSmallObjectHover = new Array();

		NS_Container[ObjectName].FunSmallObjectHover = function(Index, Type){
			if( NS_Container[ObjectName].FXSmallObjectHover[Index] )
				NS_Container[ObjectName].FXSmallObjectHover[Index].cancel();

			var Highlight = ( Type=='highlight' ) ? true : false;
			NS_Container[ObjectName].FXSmallObjectHover[Index] = new Fx.Tween( NS_Container[ObjectName].SmallObjects[Index] , {
					duration: NS_Options.SmallObjectHoverDuration ,
					fps: NS_Options.Fps ,
					onComplete: function(){
						NS_Container[ObjectName].FXSmallObjectHover[Index] = false;
					}
				});
			if( Highlight )
				NS_Container[ObjectName].FXSmallObjectHover[Index].start('opacity', NS_Container[ObjectName].SmallObjects[Index].getStyle('opacity'), 1);
			else
				NS_Container[ObjectName].FXSmallObjectHover[Index].start('opacity', NS_Container[ObjectName].SmallObjects[Index].getStyle('opacity'), NS_Options.SmallObjectHoverOpacity);

			return true;
		}

		NS_Container[ObjectName].FunSmallObjectAddEvents = function(){
			if( NS_Options.SmallObjectHoverDuration==0 )
				return false;

			NS_Container[ObjectName].SmallObjects.each( function(Obj, i){
				Obj.removeEvents('mouseenter');
				Obj.removeEvents('mouseleave');
				if( NS_Options.SmallObjectHoverOpacity!=1 )
					Obj.setStyle('opacity', NS_Options.SmallObjectHoverOpacity);

				Obj.addEvent('mouseenter', function(){
					NS_Container[ObjectName].FunSmallObjectHover(i, 'highlight');
				});
				Obj.addEvent('mouseleave', function(){
					NS_Container[ObjectName].FunSmallObjectHover(i, 'unghlight');
				});

			});

			return true;
		}

	}

/**************************/

	// initialize
	NS_Container[ObjectName].Scroller.setStyle('width', NS_Container[ObjectName].SmallObjectsCount*NS_Container[ObjectName].SmallObjectWidth);

	if( NS_Container[ObjectName].SmallObjectsVisibleCount < NS_Container[ObjectName].SmallObjectsCount ){
		// scroll left/right
		NS_Container[ObjectName].Navi.addEvent('click', function(){
			if( NS_Container[ObjectName].FXScroll )
				return false;

			var Test = function(arg){ alert(arg) };

			var Direction = this.hasClass('ns_prev') ? 'prev' : 'next';
			if( Direction == 'next' )
				NS_Container[ObjectName].FunScrollNext();
			else
				NS_Container[ObjectName].FunScrollPrev();

			return false;
		});
	}
	else{
		// hide scroll buttons
		NS_Container[ObjectName].Navi.set('href', 'javascript:void(0);');
		NS_Container[ObjectName].Navi.addClass('ns_disable');
	}

	// small image hover effect
	NS_Container[ObjectName].FunSmallObjectAddEvents();
	NS_Container[ObjectName].Wrap.setStyles({ 'min-height':NS_Container[ObjectName].Obj.getStyle('height'), 'height':'auto' });

	return true;
}

/*********************************/

window.addEvent('load', function(){
	if( $('cms_gallery') )
		NiceSlide('cms_gallery');
	//if( $('compare_gallery') )
	//	NiceSlide('compare_gallery');
});
