// Replace 'title'-boxes of head navigation with nicer ones
$('ul#nav_head').find('a').ready(function() {
	$('ul#nav_head').find('a').stop().qtip({
	  style: {
			tip: true,
			width: 250,
			background: '#FFEEC8',
			color: '#231F20',
			border: {
			  width: 1,
			  radius: 1,
			  color: '#FFEEC8'
			}
		},

		position: {
		  corner: {
		    target: 'topMiddle',
		    tooltip: 'bottomLeft'
		  }
		},

		show: {
		  delay: 0,
		  solo: true,
      effect: {
			  length: 0 }
		},

    hide: {
		  delay: 0,
      effect: {
			  length: 0 }
		}
  });
});

// Change all font sizes
var BArchStepSize = 0.125;
var BArchRootSize = 1;
var BArchCounter = 0;
var BArchMaxSteps = 2;

function fontsize(spInc, reset) {
  if (reset) BArchCounter = -1;

  if (Math.abs(BArchCounter + spInc) <= BArchMaxSteps) {
    BArchCounter += spInc;
    BArchFS = BArchCounter * BArchStepSize + BArchRootSize;
    BArchContentBody = document.getElementById('page');
    BArchContentBody.style.fontSize = BArchFS + 'em';
  }
}

// Calculate size for popup window and open it
function zoom(targetPage, xWidth, xHeight) {
  var xHeight = 695;
  var xWidth = 860;

  var PictureWindow = window.open(targetPage, 'DocumentZoom', 'resizable=no,menubar=no,scrollbars=yes,toolbar=no,status=no,width=' + xWidth + ',height=' + xHeight + ',left=25,top=25,screenX=0,screenY=0,dependent');
  return false;
}

var BArchStepSize = 0.125;
var BArchRootSize = 1;
var BArchCounter = 0;
var BArchMaxSteps = 2;

function fontsize(spInc, reset) {
  if (reset) BArchCounter = -1;

  if (Math.abs(BArchCounter + spInc) <= BArchMaxSteps) {
    BArchCounter += spInc;
    BArchFS = BArchCounter * BArchStepSize + BArchRootSize;
    BArchContentBody = document.getElementById('page');
    BArchContentBody.style.fontSize = BArchFS + 'em';
  }
}

/***** Thumbnail preview *****/
$.fn.infiniteCarousel = function () {
  function repeat(str, num) {
      return new Array( num + 1 ).join( str );
  }

  return this.each(function () {
    var $wrapper = $('> div', this).css('overflow', 'hidden'),
        $slider = $wrapper.find('> ul'),
        $items = $slider.find('> li'),
        $single = $items.filter(':first'),

        singleWidth = $single.outerWidth(),
        visible = Math.round($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
        //currentPage = 1,
        currentPage = 1 + Math.floor(position / visible),
        pages = Math.ceil($items.length / visible);

    // 1. Pad so that 'visible' number will always be seen, otherwise create empty items
    if (($items.length % visible) != 0) {
      $slider.append(repeat('<li class="empty" />', visible - ($items.length % visible)));
      $items = $slider.find('> li');
    }

    // 2. Top and tail the list with 'visible' number of items, top has the last section, and tail has the first
    $items.filter(':first').before($items.slice(- visible).clone().addClass('cloned'));
    $items.filter(':last').after($items.slice(0, visible).clone().addClass('cloned'));
    $items = $slider.find('> li'); // reselect

    // 3. Set the left position to the first 'real' item
    $wrapper.scrollLeft(currentPage * singleWidth * visible);

    // 4. paging function
    function gotoPage(page) {
        var dir = page < currentPage ? -1 : 1,
            n = Math.abs(currentPage - page),
            left = singleWidth * dir * visible * n;

        $wrapper.filter(':not(:animated)').animate({
          scrollLeft : '+=' + left
        }, 500, function () {
          if (page == 0) {
              $wrapper.scrollLeft(singleWidth * visible * pages);
              page = pages;
          } else if (page > pages) {
              $wrapper.scrollLeft(singleWidth * visible);
              // reset back to start position
              page = 1;
          }

          currentPage = page;
        });

        return false;
    }

    $wrapper.after('<a class="arrow back">&lt;</a><a class="arrow forward">&gt;</a>');

    // 5. Bind to the forward and back buttons
    $('a.back', this).click(function () {
      return gotoPage(currentPage - 1);
    });

    $('a.forward', this).click(function () {
      return gotoPage(currentPage + 1);
    });

    // create a public interface to move to a specific page
    $(this).bind('goto', function (event, page) {
      gotoPage(page);
    });
  
  });
};

