/cody/learning-zone/website-templates/photo-style-two/js/jquery.kwicks-1.5.1.js
/*  Kwicks for jQuery (version 1.5.1)  Copyright (c) 2008 Jeremy Martin  http://www.jeremymartin.name/projects.php?project=kwicks    Licensed under the MIT license:    http://www.opensource.org/licenses/mit-license.php
  Any and all use of this script must be accompanied by this copyright/license notice in its present form.*/
(function($){  $.fn.kwicks = function(options) {    var defaults = {      isVertical: false,      sticky: false,      defaultKwick: 0,      event: 'mouseover',      spacing: 0,      duration: 500    };    var o = $.extend(defaults, options);    var WoH = (o.isVertical ? 'height' : 'width'); // WoH = Width or Height    var LoT = (o.isVertical ? 'top' : 'left'); // LoT = Left or Top        return this.each(function() {      container = $(this);      var kwicks = container.children('li');      var normWoH = kwicks.eq(0).css(WoH).replace(/px/,''); // normWoH = Normal Width or Height      if(!o.max) {        o.max = (normWoH * kwicks.size()) - (o.min * (kwicks.size() - 1));      } else {        o.min = ((normWoH * kwicks.size()) - o.max) / (kwicks.size() - 1);      }      // set width of container ul      if(o.isVertical) {        container.css({          width : kwicks.eq(0).css('width'),          height : (normWoH * kwicks.size()) + (o.spacing * (kwicks.size() - 1)) + 'px'        });             } else {        container.css({          width : (normWoH * kwicks.size()) + (o.spacing * (kwicks.size() - 1)) + 'px',          height : kwicks.eq(0).css('height')        });             }
      // pre calculate left or top values for all kwicks but the first and last      // i = index of currently hovered kwick, j = index of kwick we're calculating      var preCalcLoTs = []; // preCalcLoTs = pre-calculated Left or Top's      for(i = 0; i < kwicks.size(); i++) {        preCalcLoTs[i] = [];        // don't need to calculate values for first or last kwick        for(j = 1; j < kwicks.size() - 1; j++) {          if(i == j) {            preCalcLoTs[i][j] = o.isVertical ? j * o.min + (j * o.spacing) : j * o.min + (j * o.spacing);          } else {            preCalcLoTs[i][j] = (j <= i ? (j * o.min) : (j-1) * o.min + o.max) + (j * o.spacing);          }        }      }            // loop through all kwick elements      kwicks.each(function(i) {        var kwick = $(this);        // set initial width or height and left or top values        // set first kwick        if(i === 0) {          kwick.css(LoT, '0px');        }         // set last kwick        else if(i == kwicks.size() - 1) {          kwick.css(o.isVertical ? 'bottom' : 'right', '0px');        }        // set all other kwicks        else {          if(o.sticky) {            kwick.css(LoT, preCalcLoTs[o.defaultKwick][i]);          } else {            kwick.css(LoT, (i * normWoH) + (i * o.spacing));          }        }        // correct size in sticky mode        if(o.sticky) {          if(o.defaultKwick == i) {            kwick.css(WoH, o.max + 'px');            kwick.addClass('active');          } else {            kwick.css(WoH, o.min + 'px');          }        }        kwick.css({          margin: 0,          position: 'absolute'        });                kwick.bind(o.event, function() {          // calculate previous width or heights and left or top values          var prevWoHs = []; // prevWoHs = previous Widths or Heights          var prevLoTs = []; // prevLoTs = previous Left or Tops          kwicks.stop().removeClass('active');          for(j = 0; j < kwicks.size(); j++) {            prevWoHs[j] = kwicks.eq(j).css(WoH).replace(/px/, '');            prevLoTs[j] = kwicks.eq(j).css(LoT).replace(/px/, '');          }          var aniObj = {};          aniObj[WoH] = o.max;          var maxDif = o.max - prevWoHs[i];          var prevWoHsMaxDifRatio = prevWoHs[i]/maxDif;          kwick.addClass('active').animate(aniObj, {            step: function(now) {              // calculate animation completeness as percentage              var percentage = maxDif != 0 ? now/maxDif - prevWoHsMaxDifRatio : 1;              // adjsut other elements based on percentage              kwicks.each(function(j) {                if(j != i) {                  kwicks.eq(j).css(WoH, prevWoHs[j] - ((prevWoHs[j] - o.min) * percentage) + 'px');                }                if(j > 0 && j < kwicks.size() - 1) { // if not the first or last kwick                  kwicks.eq(j).css(LoT, prevLoTs[j] - ((prevLoTs[j] - preCalcLoTs[i][j]) * percentage) + 'px');                }              });            },            duration: o.duration,            easing: o.easing          });        });      });      if(!o.sticky) {        container.bind("mouseleave", function() {          var prevWoHs = [];          var prevLoTs = [];          kwicks.removeClass('active').stop();          for(i = 0; i < kwicks.size(); i++) {            prevWoHs[i] = kwicks.eq(i).css(WoH).replace(/px/, '');            prevLoTs[i] = kwicks.eq(i).css(LoT).replace(/px/, '');          }          var aniObj = {};          aniObj[WoH] = normWoH;          var normDif = normWoH - prevWoHs[0];          kwicks.eq(0).animate(aniObj, {            step: function(now) {              var percentage = normDif != 0 ? (now - prevWoHs[0])/normDif : 1;              for(i = 1; i < kwicks.size(); i++) {                kwicks.eq(i).css(WoH, prevWoHs[i] - ((prevWoHs[i] - normWoH) * percentage) + 'px');                if(i < kwicks.size() - 1) {                  kwicks.eq(i).css(LoT, prevLoTs[i] - ((prevLoTs[i] - ((i * normWoH) + (i * o.spacing))) * percentage) + 'px');                }              }            },            duration: o.duration,            easing: o.easing          });        });      }    });  };})(jQuery);