(function(){ 

	
	/**
	 * Class HorizontalSliderClass
	 */		
	var HorizontalSliderClass = (HorizontalSlider=function() {
	
		this.scope = this;
		
		// util
		this._class = 'HorizontalSlider';
		this.isDebug = false;
		this.MAX_SREEN_ITEM = 5;
		this.SPEED = 400;
		
		// containers
		this.container = null;
		this.sliderContainer = null;
		this.sliderItemContainer = null;
		this.sliderNextButton = null;
		this.sliderPrevButton = null;
		this.counter = 0;
		
		HorizontalSlider.prototype = {
		
			/**
			 * create
			 * 
			 * @return {Boolean|false}
			 */	
			create:function(_container, _sliderContainer, _sliderItemContainer, _sliderNextButton, _sliderPrevButton) {
				
				if(this.isDebug) console.log(this._getClassName());	
				
				this.container = _container;
				this.sliderContainer = _sliderContainer;
				this.sliderItemContainer = _sliderItemContainer;
				this.sliderNextButton = _sliderNextButton;
				this.sliderPrevButton = _sliderPrevButton;	

				this.init();
				//jQuery(window).resize(jQuery.proxy(this.scope, "resize"))
				
			},	
			
			init:function() {

				if(this.sliderItemContainer.length>this.MAX_SREEN_ITEM) {
					this.sliderContainer.width(this.sliderItemContainer.width()*this.sliderItemContainer.length);
					this.sliderNextButton.click(jQuery.proxy(this.scope, "scroll"));
					this.sliderPrevButton.click(jQuery.proxy(this.scope, "scroll"));
					this.checkingPosition();				
				} else {
					this.sliderNextButton.hide();
					this.sliderPrevButton.hide();
				}
				
				//this.sliderItemContainer.bind('click', $.proxy(this.scope, "setActiveItem") )
			},
			
			setActiveItem:function(e) {
				this.sliderItemContainer.removeClass('active');
				jQuery(e.currentTarget).addClass('active')
			},
			
			resize:function() {
				
				this.container.width('auto')
				this.container.width(this.container.width())
				
				this.MAX_SREEN_ITEM = Math.floor(this.container.width()/this.sliderItemContainer.width())
				
				this.sliderNextButton.addClass("disabled");
				this.sliderPrevButton.addClass("disabled");
				
				this.sliderNextButton.removeClass("disabled");
				this.sliderPrevButton.addClass("disabled");	
				
				this.counter=0;
				this.sliderContainer.animate({left: 0}, 0);

			},

			scroll:function(e) {
				
				if(!jQuery(e.currentTarget).hasClass('disabled') && !jQuery(e.currentTarget).hasClass('scrolled')) {
					this.sliderNextButton.addClass("scrolled");
					this.sliderPrevButton.addClass("scrolled");						
					var left = 0;
					var _left = (this.sliderItemContainer.width());
					if(e, jQuery(e.currentTarget).hasClass('prev')) { left = '+='+_left; this.counter-=1; } 
					if(e, jQuery(e.currentTarget).hasClass('next')) { left = '-='+_left; this.counter+=1;} 
					this.sliderContainer.animate({left: left}, this.SPEED, jQuery.proxy(this.scope, "checkingPosition"));
				}

				return false;
			},	

			checkingPosition:function() {

				if(this.counter == 0 && this.counter<Math.ceil(this.sliderItemContainer.length)) {
					this.sliderNextButton.removeClass("disabled");
					this.sliderPrevButton.addClass("disabled");					
				} 
				
				if(this.counter > 0 && this.counter<Math.ceil(this.sliderItemContainer.length)) {
					this.sliderNextButton.removeClass("disabled");
					this.sliderPrevButton.removeClass("disabled");						
				} 	

				if(this.counter >= Math.ceil(this.sliderItemContainer.length)-this.MAX_SREEN_ITEM) {
					this.sliderNextButton.addClass("disabled");
					this.sliderPrevButton.removeClass("disabled");					
				} 
				
				this.sliderNextButton.removeClass("scrolled");
				this.sliderPrevButton.removeClass("scrolled");					
				
				return false;
			},

			
			/**
			 * _getClassName
			 * 
			 * @return {String}
			 */				
			_getClassName:function() {
				return this._class;
			}			
			
		}
		
	})(HorizontalSliderClass);	

	/**
	 * Constructor
	 */	
	Slider = function() {
		this.scope = this;
		
		// Containers
		this.sliderContainer = null;
		this.sliderItemContainer = null;
		this.sliderNavigationContainer = null;
		this.sliderNavigationItemContainer = null;
		this.sliderNavigationControl = null;
		
		this.containerItemClass = '';
	
		//Other
		
		this.sliderItemIndex = 0;
		this.prevSliderItemIndex = 0;
		this.sliderTimeout = null;
		this.sliderTimeoutInterval = 5000;
		this.isSlideShows = false;
		this.controlMode = 'pause';

	};	
	
	Slider.prototype = {
	
		init:function(container, navigation, _containerItemClass, isSlideShow) {

			if(_containerItemClass!=undefined) {
				this.containerItemClass = _containerItemClass;
			} 
			this.isSlideShows = isSlideShow;
			this.sliderContainer = jQuery(container);
			this.sliderItemContainer = this.sliderContainer.find("LI"+_containerItemClass)
			this.sliderNavigationContainer = jQuery(navigation);
			this.sliderNavigationItemContainer = this.sliderNavigationContainer.find("LI").not('.control');
			this.sliderNavigationControl = this.sliderNavigationContainer.find("LI.control");
			
			//this.sliderNavigationItemContainer.click(jQuery.proxy(this.scope, "currentIndexCounter"));
			//this.sliderNavigationControl.click(jQuery.proxy(this.scope, "switchMode"));
			
			this.gotoToItem(this.sliderItemIndex);	

		},
		
		switchMode:function(e) {
			var currentItem = $(e.currentTarget);
			if(currentItem.hasClass('pause')) {
				this.controlMode = 'play';
				this.isSlideShows = false;
				currentItem.removeClass('pause').addClass('play');
				clearInterval(this.sliderTimeout);
			} else {
				this.controlMode = 'pause'
				this.isSlideShows = true;
				currentItem.removeClass('play').addClass('pause');
				
				var _counter = this.getCurrentItemIndex()+1;

				if(_counter>this.sliderItemContainer.length-1) { 
					_counter = 0;
				}
				
				if(_counter<0) { 
					_counter = this.sliderItemContainer.length-1; 
				}

				this.setCurrentItemIndex(_counter);
				this.gotoToItem(this.getCurrentItemIndex());								
			}
			return false;
		},
		
		gotoToItem:function(index, animate) {
			this.sliderItemContainer.fadeOut(500);
			this.sliderContainer.find('LI'+this.containerItemClass+':eq('+index+')').fadeIn(500);
			this.sliderNavigationItemContainer.removeClass('active')
			this.sliderNavigationContainer.find('LI:eq('+index+')').addClass('active');
			this.sliderNavigationContainer.find('LI:eq('+index+')').find('i.active').hide().fadeIn(400);
			if(this.isSlideShows){
				clearInterval(this.sliderTimeout);
				this.sliderTimeout = setInterval(jQuery.proxy(this.scope, "slideshow"), this.sliderTimeoutInterval);
			}				
		},
		
		slideshow:function() {
			var index = this.getCurrentItemIndex();
				index+=1;
				if(index>=this.sliderItemContainer.length) { index = 0; }	
				this.setCurrentItemIndex(index);
				this.gotoToItem(index);
		},
	
		currentIndexCounter:function(e) {

			e.preventDefault();
			
			if(this.isSlideShows){
				clearInterval(this.sliderTimeout);
			}				
			
			var _counter = jQuery(e.currentTarget).index();

			if(_counter>this.sliderItemContainer.length-1) { 
				_counter = 0;
			}
			
			if(_counter<0) { 
				_counter = this.sliderItemContainer.length-1; 
			}

			this.setCurrentItemIndex(_counter);
			this.gotoToItem(this.getCurrentItemIndex());
			
		},
		
		setCurrentItemIndex:function(index) {
			this.sliderItemIndex = index;
		},
		
		getCurrentItemIndex:function() {
			return this.sliderItemIndex;
		}		
		
	}
})();

jQuery(function(){ 
	var _homeSlider = new Slider();
	_homeSlider.init('.home-gallery-panels-wrap', '.home-gallery-controls', '', true);
	
	var _HorizontalSliderClass1 = new HorizontalSlider();
	_HorizontalSliderClass1.create
		(
			jQuery('.slider1 .horizontal-slider-inner'),
			jQuery('.slider1 .horizontal-slider-wrap'),
			jQuery('.slider1 .horizontal-slider-item'),
			jQuery('.slider1 .horizontal-slider-navigation-next'),
			jQuery('.slider1 .horizontal-slider-navigation-prev')
		);	
})
