$(document).ready(function(){
  $('div.slider').galleryScroll({
    step:1,
    duration:300,
    circleSlide:true
  });
  $('div.gallery').fadeGallery({
    slideElements:'div.gallery-holder li',
    pauseOnHover:true,
    autoRotation:true,
    switchTime:10000,
    duration:2000,
    event:'click'
  })
  $('.slideshow').fadeGallery({
    slideElements:'img',
    pauseOnHover:true,
    autoRotation:true,
    switchTime:4000,
    duration:2000,
    event:'click'
  })
});
jQuery.fn.fadeGallery = function(_options){
  var _options = jQuery.extend({
    slideElements:'div.slideset > div',
    pagerLinks:'ul.switcher a',
    btnNext:'a.next',
    btnPrev:'a.prev',
    btnPlayPause:'a.play-pause',
    pausedClass:'paused',
    playClass:'playing',
    activeClass:'active',
    pauseOnHover:true,
    autoRotation:false,
    autoHeight:false,
    switchTime:3000,
    duration:650,
    event:'click'
  },_options);

  return this.each(function(){
    var _this = jQuery(this);
    var _slides = jQuery(_options.slideElements, _this);
    var _pagerLinks = jQuery(_options.pagerLinks, _this);
    var _btnPrev = jQuery(_options.btnPrev, _this);
    var _btnNext = jQuery(_options.btnNext, _this);
    var _btnPlayPause = jQuery(_options.btnPlayPause, _this);
    var _pauseOnHover = _options.pauseOnHover;
    var _autoRotation = _options.autoRotation;
    var _activeClass = _options.activeClass;
    var _pausedClass = _options.pausedClass;
    var _playClass = _options.playClass;
    var _autoHeight = _options.autoHeight;
    var _duration = _options.duration;
    var _switchTime = _options.switchTime;
    var _controlEvent = _options.event;

    var _hover = false;
    var _prevIndex = 0;
    var _currentIndex = 0;
    var _slideCount = _slides.length;
    var _timer;
    if(!_slideCount) return;
    _slides.hide().eq(_currentIndex).show();
    if(_autoRotation) _this.removeClass(_pausedClass).addClass(_playClass);
    else _this.removeClass(_playClass).addClass(_pausedClass);

    if(_btnPrev.length) {
      _btnPrev.bind(_controlEvent,function(){
        prevSlide();
        return false;
      });
    }
    if(_btnNext.length) {
      _btnNext.bind(_controlEvent,function(){
        nextSlide();
        return false;
      });
    }
    if(_pagerLinks.length) {
      _pagerLinks.each(function(_ind){
        jQuery(this).bind(_controlEvent,function(){
          if(_currentIndex != _ind) {
            _prevIndex = _currentIndex;
            _currentIndex = _ind;
            switchSlide();
          }
          return false;
        });
      });
    }

    if(_btnPlayPause.length) {
      _btnPlayPause.bind(_controlEvent,function(){
        if(_this.hasClass(_pausedClass)) {
          _this.removeClass(_pausedClass).addClass(_playClass);
          _autoRotation = true;
          autoSlide();
        } else {
          if(_timer) clearTimeout(_timer);
          _this.removeClass(_playClass).addClass(_pausedClass);
        }
        return false;
      });
    }

    function prevSlide() {
      _prevIndex = _currentIndex;
      if(_currentIndex > 0) _currentIndex--;
      else _currentIndex = _slideCount-1;
      switchSlide();
    }
    function nextSlide() {
      _prevIndex = _currentIndex;
      if(_currentIndex < _slideCount-1) _currentIndex++;
      else _currentIndex = 0;
      switchSlide();
    }
    function refreshStatus() {
      if(_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentIndex).addClass(_activeClass);
      _slides.eq(_prevIndex).removeClass(_activeClass);
      _slides.eq(_currentIndex).addClass(_activeClass);
    }
    function switchSlide() {
      _slides.eq(_prevIndex).fadeOut(_duration);
      _slides.eq(_currentIndex).fadeIn(_duration);
      refreshStatus();
      autoSlide();
    }

    function autoSlide() {
      if(!_autoRotation || _hover) return;
      if(_timer) clearTimeout(_timer);
      _timer = setTimeout(nextSlide,_switchTime+_duration);
    }
    if(_pauseOnHover) {
      _this.hover(function(){
        _hover = true;
        if(_timer) clearTimeout(_timer);
      },function(){
        _hover = false;
        autoSlide();
      });
    }
    refreshStatus();
    autoSlide();
  });
}
jQuery.fn.galleryScroll = function(_options){
  // defaults options  
  var _options = jQuery.extend({
    btPrev: 'a.btn-prev',
    btNext: 'a.btn-next',
    holderList: 'div.slider-holder',
    scrollElParent: 'ul',
    scrollEl: 'li',
    slideNum: false,
    duration : 1000,
    step: false,
    circleSlide: true,
    disableClass: 'disable',
    funcOnclick: null,
    autoSlide:false,
    innerMargin:0,
    stepWidth:false
  },_options);

  return this.each(function(){
    var _this = jQuery(this);

    var _holderBlock = jQuery(_options.holderList,_this);
    var _gWidth = _holderBlock.width();
    var _animatedBlock = jQuery(_options.scrollElParent,_holderBlock);
    var _liWidth = jQuery(_options.scrollEl,_animatedBlock).outerWidth(true);
    var _liSum = jQuery(_options.scrollEl,_animatedBlock).length * _liWidth;
    var _margin = -_options.innerMargin;
    var f = 0;
    var _step = 0;
    var _autoSlide = _options.autoSlide;
    var _timerSlide = null;
    if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
    if (_options.stepWidth) _step = _options.stepWidth;
    
    if (!_options.circleSlide) {
      if (_options.innerMargin == _margin)
        jQuery(_options.btPrev,_this).addClass('prev-'+_options.disableClass);
    }
    if (_options.slideNum && !_options.step) {
      var _lastSection = 0;
      var _sectionWidth = 0;
      while(_sectionWidth < _liSum)
      {
        _sectionWidth = _sectionWidth + _gWidth;
        if(_sectionWidth > _liSum) {
               _lastSection = _sectionWidth - _liSum;
        }
      }
    }
    if (_autoSlide) {
        _timerSlide = setTimeout(function(){
          autoSlide(_autoSlide);
        }, _autoSlide);
      _animatedBlock.hover(function(){
        clearTimeout(_timerSlide);
      }, function(){
        _timerSlide = setTimeout(function(){
          autoSlide(_autoSlide)
        }, _autoSlide);
      });
    }
  
    // click button 'Next'
    jQuery(_options.btNext,_this).bind('click',function(){
      jQuery(_options.btPrev,_this).removeClass('prev-'+_options.disableClass);
      if (!_options.circleSlide) {
        if (_margin + _step  > _liSum - _gWidth - _options.innerMargin) {
          if (_margin != _liSum - _gWidth - _options.innerMargin) {
            _margin = _liSum - _gWidth  + _options.innerMargin;
            jQuery(_options.btNext,_this).addClass('next-'+_options.disableClass);
            _f2 = 0;
          } 
        } else {
          _margin = _margin + _step;
          if (_margin == _liSum - _gWidth - _options.innerMargin) {
            jQuery(_options.btNext,_this).addClass('next-'+_options.disableClass);_f2 = 0;
          }           
        }
      } else {
        if (_margin + _step  > _liSum - _gWidth + _options.innerMargin) {
          if (_margin != _liSum - _gWidth + _options.innerMargin) {
            _margin = _liSum - _gWidth  + _options.innerMargin;
          } else {
            _f2 = 1;
            _margin = -_options.innerMargin;
          }
        } else {
          _margin = _margin + _step;
          _f2 = 0;
        }
      } 
      
      _animatedBlock.animate({marginLeft: -_margin+"px"}, {queue:false,duration: _options.duration });
      
      if (_timerSlide) {
        clearTimeout(_timerSlide);
        _timerSlide = setTimeout(function(){
          autoSlide(_options.autoSlide)
        }, _options.autoSlide);
      }
      
      if (_options.slideNum && !_options.step) jQuery.fn.galleryScroll.numListActive(_margin,jQuery(_options.slideNum, _this),_gWidth,_lastSection);    
      if (jQuery.isFunction(_options.funcOnclick)) {
        _options.funcOnclick.apply(_this);
      }
      return false;
    });
    // click button 'Prev'
    var _f2 = 1;
    jQuery(_options.btPrev, _this).bind('click',function(){
      jQuery(_options.btNext,_this).removeClass('next-'+_options.disableClass);
      if (_margin - _step >= -_step - _options.innerMargin && _margin - _step <= -_options.innerMargin) {
        if (_f2 != 1) {
          _margin = -_options.innerMargin;
          _f2 = 1;
        } else {
          if (_options.circleSlide) {
            _margin = _liSum - _gWidth  + _options.innerMargin;
            f=1;_f2=0;
          } else {
            _margin = -_options.innerMargin
          }
        }
      } else if (_margin - _step < -_step + _options.innerMargin) {
        _margin = _margin - _step;
        f=0;
      }
      else {_margin = _margin - _step;f=0;};
      
      if (!_options.circleSlide && _margin == _options.innerMargin) {
        jQuery(this).addClass('prev-'+_options.disableClass);
        _f2=0;
      }
      
      if (!_options.circleSlide && _margin == -_options.innerMargin) jQuery(this).addClass('prev-'+_options.disableClass);
      _animatedBlock.animate({marginLeft: -_margin + "px"}, {queue:false, duration: _options.duration});
      
      if (_options.slideNum && !_options.step) jQuery.fn.galleryScroll.numListActive(_margin,jQuery(_options.slideNum, _this),_gWidth,_lastSection);
      
      if (_timerSlide) {
        clearTimeout(_timerSlide);
        _timerSlide = setTimeout(function(){
          autoSlide(_options.autoSlide)
        }, _options.autoSlide);
      }
      
      if (jQuery.isFunction(_options.funcOnclick)) {
        _options.funcOnclick.apply(_this);
      }
      return false;
    });
    
    if (_liSum <= _gWidth) {
      jQuery(_options.btPrev,_this).addClass('prev-'+_options.disableClass).unbind('click');
      jQuery(_options.btNext,_this).addClass('next-'+_options.disableClass).unbind('click');
    }
    // auto slide
    function autoSlide(autoSlideDuration){
      //if (_options.circleSlide) {
        jQuery(_options.btNext,_this).trigger('click');
      //}
    };
    // Number list
    jQuery.fn.galleryScroll.numListCreate = function(_elNumList, _liSumWidth, _width, _section){
      var _numListElC = '';
      var _num = 1;
      var _difference = _liSumWidth + _section;
      while(_difference > 0)
      {
        _numListElC += '<li><a href="">'+_num+'</a></li>';
        _num++;
        _difference = _difference - _width;
      }
      jQuery(_elNumList).html('<ul>'+_numListElC+'</ul>');
    };
    jQuery.fn.galleryScroll.numListActive = function(_marginEl, _slideNum, _width, _section){
      if (_slideNum) {
        jQuery('a',_slideNum).removeClass('active');
        var _activeRange = _width - _section-1;
        var _n = 0;
        if (_marginEl != 0) {
          while (_marginEl > _activeRange) {
            _activeRange = (_n * _width) -_section-1 + _options.innerMargin;
            _n++;
          }
        }
        var _a  = (_activeRange+_section+1 + _options.innerMargin)/_width - 1;
        jQuery('a',_slideNum).eq(_a).addClass('active');
      }
    };
    if (_options.slideNum && !_options.step) {
      jQuery.fn.galleryScroll.numListCreate(jQuery(_options.slideNum, _this), _liSum, _gWidth,_lastSection);
      jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
      numClick();
    };
    function numClick() {
      jQuery(_options.slideNum, _this).find('a').click(function(){
        jQuery(_options.btPrev,_this).removeClass('prev-'+_options.disableClass);
        jQuery(_options.btNext,_this).removeClass('next-'+_options.disableClass);
        
        var _indexNum = jQuery(_options.slideNum, _this).find('a').index(jQuery(this));
        _margin = (_step*_indexNum) - _options.innerMargin;
        f=0; _f2=0;
        if (_indexNum == 0) _f2=1;
        if (_margin + _step > _liSum) {
          _margin = _margin - (_margin - _liSum) - _step + _options.innerMargin;
          if (!_options.circleSlide) jQuery(_options.btNext, _this).addClass('next-'+_options.disableClass);
        }
        _animatedBlock.animate({marginLeft: -_margin + "px"}, {queue:false, duration: _options.duration});
        
        if (!_options.circleSlide && _margin==0) jQuery(_options.btPrev,_this).addClass('prev-'+_options.disableClass);
        jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
        
        if (_timerSlide) {
          clearTimeout(_timerSlide);
          _timerSlide = setTimeout(function(){
            autoSlide(_options.autoSlide)
          }, _options.autoSlide);
        }
        return false;
      });
    };
    jQuery(window).resize(function(){
      _gWidth = _holderBlock.width();
      _liWidth = jQuery(_options.scrollEl,_animatedBlock).outerWidth(true);
      _liSum = jQuery(_options.scrollEl,_animatedBlock).length * _liWidth;
      if (!_options.step) _step = _gWidth; else _step = _options.step*_liWidth;
      if (_options.slideNum && !_options.step) {
        var _lastSection = 0;
        var _sectionWidth = 0;
        while(_sectionWidth < _liSum)
        {
          _sectionWidth = _sectionWidth + _gWidth;
          if(_sectionWidth > _liSum) {
                 _lastSection = _sectionWidth - _liSum;
          }
        };
        jQuery.fn.galleryScroll.numListCreate(jQuery(_options.slideNum, _this), _liSum, _gWidth,_lastSection);
        jQuery.fn.galleryScroll.numListActive(_margin, jQuery(_options.slideNum, _this),_gWidth,_lastSection);
        numClick();
      };
      //if (_margin == _options.innerMargin) jQuery(this).addClass(_options.disableClass);
      if (_liSum - _gWidth  < _margin - _options.innerMargin) {
        if (!_options.circleSlide) jQuery(_options.btNext, _this).addClass('next-'+_options.disableClass);
        _animatedBlock.animate({marginLeft: -(_liSum - _gWidth + _options.innerMargin)}, {queue:false, duration: _options.duration});
      };
    });
  });
}

function initPage()
{
  clearFormFields({
    clearInputs: true,
    clearTextareas: true,
    passwordFieldText: true,
    addClassFocus: "focus",
    filterClass: "default"
  });
}
function clearFormFields(o)
{
  if (o.clearInputs == null) o.clearInputs = true;
  if (o.clearTextareas == null) o.clearTextareas = true;
  if (o.passwordFieldText == null) o.passwordFieldText = false;
  if (o.addClassFocus == null) o.addClassFocus = false;
  if (!o.filterClass) o.filterClass = "default";
  if(o.clearInputs) {
    var inputs = document.getElementsByTagName("input");
    for (var i = 0; i < inputs.length; i++ ) {
      if((inputs[i].type == "text" || inputs[i].type == "password") && inputs[i].className.indexOf(o.filterClass) == -1) {
        inputs[i].valueHtml = inputs[i].value;
        inputs[i].onfocus = function ()  {
          if(this.valueHtml == this.value) this.value = "";
          if(this.fake) {
            inputsSwap(this, this.previousSibling);
            this.previousSibling.focus();
          }
          if(o.addClassFocus && !this.fake) {
            this.className += " " + o.addClassFocus;
            this.parentNode.className += " parent-" + o.addClassFocus;
          }
        }
        inputs[i].onblur = function () {
          if(this.value == "") {
            this.value = this.valueHtml;
            if(o.passwordFieldText && this.type == "password") inputsSwap(this, this.nextSibling);
          }
          if(o.addClassFocus) {
            this.className = this.className.replace(o.addClassFocus, "");
            this.parentNode.className = this.parentNode.className.replace("parent-"+o.addClassFocus, "");
          }
        }
        if(o.passwordFieldText && inputs[i].type == "password") {
          var fakeInput = document.createElement("input");
          fakeInput.type = "text";
          fakeInput.value = inputs[i].value;
          fakeInput.className = inputs[i].className;
          fakeInput.fake = true;
          inputs[i].parentNode.insertBefore(fakeInput, inputs[i].nextSibling);
          inputsSwap(inputs[i], null);
        }
      }
    }
  }
  if(o.clearTextareas) {
    var textareas = document.getElementsByTagName("textarea");
    for(var i=0; i<textareas.length; i++) {
      if(textareas[i].className.indexOf(o.filterClass) == -1) {
        textareas[i].valueHtml = textareas[i].value;
        textareas[i].onfocus = function() {
          if(this.value == this.valueHtml) this.value = "";
          if(o.addClassFocus) {
            this.className += " " + o.addClassFocus;
            this.parentNode.className += " parent-" + o.addClassFocus;
          }
        }
        textareas[i].onblur = function() {
          if(this.value == "") this.value = this.valueHtml;
          if(o.addClassFocus) {
            this.className = this.className.replace(o.addClassFocus, "");
            this.parentNode.className = this.parentNode.className.replace("parent-"+o.addClassFocus, "");
          }
        }
      }
    }
  }
  function inputsSwap(el, el2) {
    if(el) el.style.display = "none";
    if(el2) el2.style.display = "inline";
  }
}
if (window.addEventListener)
  window.addEventListener("load", initPage, false);
else if (window.attachEvent)
  window.attachEvent("onload", initPage);
