jQuery(document).ready(function(){
  initCufon();
  initAutoScalingNav({
    menuId: "nav",
    sideClasses: true,
    tag: "a"
  });
  clearInputs();
  initTabs();
  jQuery('div.gallery').scrollGallery({
    switchTime:10000,
    autoRotation:true,
    duration:300
  });
});
function initCufon() {
  Cufon.replace('#content h1', { fontFamily: 'Barmeno-Regular'});
}
function initAutoScalingNav(o) {
  if (!o.menuId) o.menuId = "nav";
  if (!o.tag) o.tag = "a";
  if (!o.spacing) o.spacing = 0;
  if (!o.constant) o.constant = 0;
  if (!o.minPaddings) o.minPaddings = 0;
  if (!o.liHovering) o.liHovering = false;
  if (!o.sideClasses) o.sideClasses = false;
  if (!o.equalLinks) o.equalLinks = false;
  if (!o.flexible) o.flexible = false;
  var nav = document.getElementById(o.menuId);
  if(nav) {
    nav.className += " scaling-active";
    var lis = nav.getElementsByTagName("li");
    var asFl = [];
    var lisFl = [];
    var width = 0;
    for (var i=0, j=0; i<lis.length; i++) {
      if(lis[i].parentNode == nav) {
        var t = lis[i].getElementsByTagName(o.tag).item(0);
        asFl.push(t);
        asFl[j++].width = t.offsetWidth;
        lisFl.push(lis[i]);
        if(width < t.offsetWidth) width = t.offsetWidth;
      }
      if(o.liHovering) {
        lis[i].onmouseover = function() {
          this.className += " hover";
        }
        lis[i].onmouseout = function() {
          this.className = this.className.replace("hover", "");
        }
      }
    }
    var menuWidth = nav.clientWidth - asFl.length*o.spacing - o.constant;
    if(o.equalLinks && width * asFl.length < menuWidth) {
      for (var i=0; i<asFl.length; i++) {
        asFl[i].width = width;
      }
    }
    width = getItemsWidth(asFl);
    if(width < menuWidth) {
      var version = navigator.userAgent.toLowerCase();
      for (var i=0; getItemsWidth(asFl) < menuWidth; i++) {
        asFl[i].width++;
        if(!o.flexible) {
          asFl[i].style.width = asFl[i].width + "px";
        }
        if(i >= asFl.length-1) i=-1;
      }
      if(o.flexible) {
        for (var i=0; i<asFl.length; i++) {
          width = (asFl[i].width - o.spacing - o.constant/asFl.length)/menuWidth*100;
          if(i != asFl.length-1) {
            lisFl[i].style.width = width + "%";
          }
          else {
            if(navigator.appName.indexOf("Microsoft Internet Explorer") == -1 || version.indexOf("msie 8") != -1 || version.indexOf("msie 9") != -1)
              lisFl[i].style.width = width + "%";
          }
        }
      }
    }
    else if(o.minPaddings > 0) {
      for (var i=0; i<asFl.length; i++) {
        asFl[i].style.paddingLeft = o.minPaddings + "px";
        asFl[i].style.paddingRight = o.minPaddings + "px";
      }
    }
    if(o.sideClasses) {
      lisFl[0].className += " first-child";
      lisFl[0].getElementsByTagName(o.tag).item(0).className += " first-child-a";
      lisFl[lisFl.length-1].className += " last-child";
      lisFl[lisFl.length-1].getElementsByTagName(o.tag).item(0).className += " last-child-a";
    }
    nav.className += " scaling-ready";
  }
  function getItemsWidth(a) {
    var w = 0;
    for(var q=0; q<a.length; q++) {
      w += a[q].width;
    }
    return w;
  }
}
function clearInputs(){
  jQuery('input:text, input:password, textarea').each(function(){
    var _el = jQuery(this);
    _el.data('val', _el.val());
    _el.bind('focus', function(){
      if(_el.val() == _el.data('val')) _el.val('');
    }).bind('blur', function(){
      if(_el.val() == '') _el.val(_el.data('val'));
    });
  });
}
function initTabs(){
  jQuery('ul.nav-tabs').each(function(){
    var _list = $(this);
    var _links = _list.find('a.tab');

    _links.each(function() {
      var _link = $(this);
      var _href = _link.attr('href');
      var _tab = $(_href);

      if(_link.hasClass('active')) _tab.show();
      else _tab.hide();

      _link.click(function(){
        _links.filter('.active').each(function(){
          $($(this).removeClass('active').attr('href')).hide();
        });
        _link.addClass('active');
        _tab.show();
        return false;
      });
    });
  });
}
jQuery.fn.scrollGallery = function(_options){
  var _options = jQuery.extend({
    sliderHolder: '>div',
    slider:'>ul',
    slides: '>li',
    pagerLinks:'div.pager a',
    btnPrev:'a.link-prev',
    btnNext:'a.link-next',
    activeClass:'active',
    disabledClass:'disabled',
    generatePagination:'div.pg-holder',
    curNum:'em.scur-num',
    allNum:'em.sall-num',
    circleSlide:true,
    pauseClass:'gallery-paused',
    pauseButton:'none',
    pauseOnHover:true,
    autoRotation:false,
    stopAfterClick:false,
    switchTime:5000,
    duration:1650,
    easing:'swing',
    event:'click',
    afterInit:false,
    vertical:false,
    step:false,
    startElement : 0
  },_options);

  return this.each(function(){
    // gallery options
    var _this = jQuery(this);
    var _sliderHolder = jQuery(_options.sliderHolder, _this);
    var _slider = jQuery(_options.slider, _sliderHolder);
    var _slides = jQuery(_options.slides, _slider);
    var _btnPrev = jQuery(_options.btnPrev, _this);
    var _btnNext = jQuery(_options.btnNext, _this);
    var _pagerLinks = jQuery(_options.pagerLinks, _this);
    var _generatePagination = jQuery(_options.generatePagination, _this);
    var _curNum = jQuery(_options.curNum, _this);
    var _allNum = jQuery(_options.allNum, _this);
    var _pauseButton = jQuery(_options.pauseButton, _this);
    var _pauseOnHover = _options.pauseOnHover;
    var _pauseClass = _options.pauseClass;
    var _autoRotation = _options.autoRotation;
    var _activeClass = _options.activeClass;
    var _disabledClass = _options.disabledClass;
    var _easing = _options.easing;
    var _duration = _options.duration;
    var _switchTime = _options.switchTime;
    var _controlEvent = _options.event;
    var _step = _options.step;
    var _vertical = _options.vertical;
    var _circleSlide = _options.circleSlide;
    var _stopAfterClick = _options.stopAfterClick;
    var _afterInit = _options.afterInit;
    
    // gallery init
    if(!_slides.length) return;
    var _currentStep = _options.startElement;
    var _sumWidth = 0;
    var _sumHeight = 0;
    var _hover = false;
    var _stepWidth;
    var _stepHeight;
    var _stepCount;
    var _offset;
    var _timer;

    _slides.each(function(){
      _sumWidth+=$(this).outerWidth(true);
      _sumHeight+=$(this).outerHeight(true);
    });

    // calculate gallery offset
    function recalcOffsets() {
      if(_vertical) {
        if(_step) {
          _stepHeight = _slides.eq(_currentStep).outerHeight(true);
          _stepCount = Math.ceil((_sumHeight-_sliderHolder.height())/_stepHeight)+1;
          _offset = -_stepHeight*_currentStep;
        } else {
          _stepHeight = _sliderHolder.height();
          _stepCount = Math.ceil(_sumHeight/_stepHeight);
          _offset = -_stepHeight*_currentStep;
          if(_offset < _stepHeight-_sumHeight) _offset = _stepHeight-_sumHeight;
        }
      } else {
        if(_step) {
          _stepWidth = _slides.eq(_currentStep).outerWidth(true)*_step;
          _stepCount = Math.ceil((_sumWidth-_sliderHolder.width())/_stepWidth)+1;
          _offset = -_stepWidth*_currentStep;
          if(_offset < _sliderHolder.width()-_sumWidth) _offset = _sliderHolder.width()-_sumWidth;
        } else {
          _stepWidth = _sliderHolder.width();
          _stepCount = Math.ceil(_sumWidth/_stepWidth);
          _offset = -_stepWidth*_currentStep;
          if(_offset < _stepWidth-_sumWidth) _offset = _stepWidth-_sumWidth;
        }
      }
    }

    // gallery control
    if(_btnPrev.length) {
      _btnPrev.bind(_controlEvent,function(){
        if(_stopAfterClick) stopAutoSlide();
        prevSlide();
        return false;
      });
    }
    if(_btnNext.length) {
      _btnNext.bind(_controlEvent,function(){
        if(_stopAfterClick) stopAutoSlide();
        nextSlide();
        return false;
      });
    }
    if(_generatePagination.length) {
      _generatePagination.empty();
      recalcOffsets();
      var _list = $('<ul />');
      for(var i=0; i<_stepCount; i++) $('<li><a href="#">'+(i+1)+'</a></li>').appendTo(_list);
      _list.appendTo(_generatePagination);
      _pagerLinks = _list.children();
    }
    if(_pagerLinks.length) {
      _pagerLinks.each(function(_ind){
        jQuery(this).bind(_controlEvent,function(){
          if(_currentStep != _ind) {
            if(_stopAfterClick) stopAutoSlide();
            _currentStep = _ind;
            switchSlide();
          }
          return false;
        });
      });
    }

    // gallery animation
    function prevSlide() {
      recalcOffsets();
      if(_currentStep > 0) _currentStep--;
      else if(_circleSlide) _currentStep = _stepCount-1;
      switchSlide();
    }
    function nextSlide() {
      recalcOffsets();
      if(_currentStep < _stepCount-1) _currentStep++;
      else if(_circleSlide) _currentStep = 0;
      switchSlide();
    }
    function refreshStatus() {
      if(_pagerLinks.length) _pagerLinks.removeClass(_activeClass).eq(_currentStep).addClass(_activeClass);
      if(!_circleSlide) {
        _btnPrev.removeClass(_disabledClass);
        _btnNext.removeClass(_disabledClass);
        if(_currentStep == 0) _btnPrev.addClass(_disabledClass);
        if(_currentStep == _stepCount-1) _btnNext.addClass(_disabledClass);
      }
      if(_curNum.length) _curNum.text(_currentStep+1);
      if(_allNum.length) _allNum.text(_stepCount);
    }
    function switchSlide() {
      recalcOffsets();
      if(_vertical) _slider.animate({marginTop:_offset},{duration:_duration,queue:false,easing:_easing});
      else _slider.animate({marginLeft:_offset},{duration:_duration,queue:false,easing:_easing});
      refreshStatus();
      autoSlide();
    }

    // autoslide function
    function stopAutoSlide() {
      if(_timer) clearTimeout(_timer);
      _autoRotation = false;
    }
    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();
      });
    }
    
    recalcOffsets();
    refreshStatus();
    autoSlide();
    _slider.css({
      marginLeft:_offset
    });

    // pause buttton
    if(_pauseButton.length) {
      _pauseButton.click(function(){
        if(_this.hasClass(_pauseClass)) {
          _this.removeClass(_pauseClass);
          _autoRotation = true;
          autoSlide();
        } else {
          _this.addClass(_pauseClass);
          stopAutoSlide();
        }
        return false;
      });
    }

    if(_afterInit && typeof _afterInit === 'function') _afterInit(_this, _slides);
  });
}
