(function($) {

$.fn.inDyCarousel = function(o){
   o = $.extend({
      btnPrev: ".left-arrow",
      btnNext: ".right-arrow",

      speed: 400,
      easing: "linear",

      vertical: false,
      visible: 3,
      start: 0,
      scroll: 1,
      
      block_size : 177,
      save_position : false
   }, o || {});

   return this.each(function() {

      if( o.save_position ) 
         o.start = parseInt(getCookie("carousel_start")) || o.start;
      
      var running = false,
          animCss = o.vertical ? "top"    : "left", 
          sizeCss = o.vertical ? "height" : "width";
      var slider     = $(this);
      var v          = o.visible;
      var itemLength = Math.floor(slider.width()/o.block_size);
      var curr       = o.start + v > itemLength ? itemLength - v : ( o.start < 0 ? 0 : o.start );
      
      slider.css("marginLeft", -(curr*o.block_size));
      //slider[0].style.marginLeft = -(curr*o.block_size);
      
      if(o.btnPrev){
         $(o.btnPrev).mousedown(function() {
            running = true;
            return go(-o.scroll);
         });
         $(o.btnPrev).mouseup(function() {
            running = false;
         });
      }
         
      if(o.btnNext){
         $(o.btnNext).mousedown(function() {
            running = true;
            return go(o.scroll);
         });
         $(o.btnNext).mouseup(function() {
             running = false;
         });
      }
      
      if(o.btnGo)
         $.each(o.btnGo, function(i, val) {
             $(val).click(function() {
                 return go(o.circular ? o.visible+i : i);
             });
         });

      if(o.auto)
         setInterval(function() {
             go(curr+o.scroll);
         }, o.auto+o.speed);

      function vis() {
         return li.slice(curr).slice(0,v);
      };
      
      function go(step) {
            
            if(curr + step<0 || curr + step>itemLength-v) return;
            else curr += step;
            
            running = true;
            
            slider.animate(
               o.vertical ? { marginTop: -(curr*o.block_size) } : { marginLeft: -(curr*o.block_size) } , o.speed, o.easing,
               function() {
                  if(curr + step<0 || curr + step>itemLength-v){
                     running = false;
                     return;
                  } else if( !running ) return;
                  else go( step );
                  
               }
            );
            
            if( o.save_position )
               setCookie("carousel_start", curr, null, "/");
            
         return false;
         
      };

   });

};
})(jQuery)

function getCookie( name ) {
   var start = document.cookie.indexOf( name + '=' );
   var len = start + name.length + 1;
   if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
      return null;
   }
   if ( start == -1 ) return null;
   var end = document.cookie.indexOf( ';', len );
   if ( end == -1 ) end = document.cookie.length;
   return unescape( document.cookie.substring( len, end ) );
}


function setCookie( name, value, expires, path, domain, secure ) {
   var today = new Date();
   today.setTime( today.getTime() );
   if ( expires ) {
      expires = expires * 1000 * 60 * 60 * 24;
   }
   var expires_date = new Date( today.getTime() + (expires) );
   document.cookie = name+'='+escape( value ) + ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) +
  	( ( path ) ? ';path=' + path : '' ) +
   ( ( domain ) ? ';domain=' + domain : '' ) +
   ( ( secure ) ? ';secure' : '' );
}
