// JavaScript Document
jQuery(function($){
    
$.fn.vSlider = function(options){
    
/* ================================================================================================ */
/* ======================================== Plugin Options ======================================== */
/* ================================================================================================ */  
    var defaults = {
                      time:4000,
                      width:600,
                      height:350,
                      effect:'none',
                      autoplay:true,
                      blocksize: {height:'',width:'' },
                      maskInduration:300,
                      maskOutduration:900,
                      listControls:true,
                      arrowControls:true,
                      customblocksize:{
                          maskvertical:{ height:100,width:70 },
                          // image transitions global settings
                          cubegrow:{ height:130,width:130 },
                          cubesidegrow:{ height:130,width:130 },
                          stripfade:{ height:100,width:60 },
                          striphalf:{ height:100,width:40 },
                          block:80,
                          strip:30
                          
                          },
                      callback:function(){   } 
                      
                      
                    };
    
    
    var options = $.extend(defaults, options);
/* ================================================================================================ */
/* ==================================== Variables & Precaching ==================================== */
/* ================================================================================================ */  
    
    return this.each(function()
        {   
        var root = $(this).addClass('mainslider');
        root.wrap('<div class="vSlider" />');   
        var parent = root.parent();
        var li = root.find("li");
        var images = li.find("img");
        var pos,random_no,timer,image_timer,counter,arr,wait,index,block,w,h,src,parent,im,override=false,in_animation = false,controls,canvas,html5_flag=false,imageData,canvas,context,root_parent;
        var current = li.eq(1).toggleClass('active'),prev = li.first().addClass("reset");
        var bool = true,first_bool = true;
        
        root.css({
            width: options.width,
            height: options.height
            }); 
            
        parent.css({
            width: options.width,
            height: options.height
            }); 
            
        li.first().find("span").css("display","block");
        type= "img";
        current.find(type).hide();  
         canvas = document.createElement('canvas');
    if (!canvas.getContext) {
      options.mode= "default";
      
       if(!isNaN(options.effect)&&parseInt(options.effect)>=7)
       options.effect='none';
       
    }
        if(options.listControls==true)
        appendControls();
        if(options.arrowControls==true)
        appendarrowControls()       
/* ================================================================================================ */
/* ======================================== Switcher Module ======================================= */
/* ================================================================================================ */          
        function switcher()
            {
                prev = (current.prev().length>0) ? current.prev() : li.last();
                prev.removeClass("reset");
                current.toggleClass("active reset");
                current = (current.next().length>0) ? current.next() : li.first();
                                 
                current.find(type).hide();
                current.addClass("active");
                options.callback(current.find(type)[0]);
          
           }

/* ================================================================================================ */
/* ======================================== Custom Effects ======================================== */
/* ================================================================================================ */  

    function Maskvertical(image)
    {
        in_animation =true;
         im = image;
        
        
             if(options.blocksize.width!=''){
         w = Math.floor(options.blocksize.width);
         h = Math.floor(options.blocksize.height);
         }
         else
         {
        w = Math.floor(options.customblocksize.maskvertical.width);
         h = Math.floor(options.customblocksize.maskvertical.height);    
         }
        
         parent = im.parent();
         arr = new Array(); i =0;  j =0; index = 0;
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:w,
                        height:options.height,
                        'background-color':"#fff",
                        'border':options.maskborder,
                        zIndex:99,
                        display:'none'
                        }
                            
                            }).addClass('disblock');
        
        
         while(i<options.width)
         {
            
                arr[index] = block.clone().css({left:i ,top:j,backgroundPosition:-i+"px 0px" });
                 parent.append( arr[index++].fadeIn(i*4+4));
            
            i = i + w;
         }
         
            var wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
            animateout();   
              }
          }, 40);
        
        function animateout()
        {
        im.fadeIn(500); 
        i=0;
        random_no = random_array(arr.length);
        timer = setInterval(function(){
                
                if(i>=arr.length)
                { 
                
                clearInterval(timer);
                var wait = setInterval(function() {
                  if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                  endeffect(image);
                    }
                  }, 80);
                return;
                
                }
                                     
                
                arr[random_no[i]].stop(true,true).fadeOut({duration:options.maskOutduration,easing:'easeInSine'});
                i++;
                },90);
        
        
        }
        
      };
      
    function striphalf(image)
    {
    in_animation = true;
    w = (options.blocksize.width!='') ? Math.floor(options.blocksize.width) : Math.floor(options.customblocksize.striphalf.width);
    h = options.height;
    parent = image.parent();
    arr = new Array(); i =0;  j =0;
    src = image.attr("src");
    block = $("<div />",{
        css:{
                position:"absolute",
                width:w,
                height:h/2,
                'background-image':'url('+src+')',
                'background-color':options.maskbg,
                'border':options.maskborder,
                 zIndex:99,
                 display:'block',
                 opacity:0
            }
    }).addClass('disblock');
        
     counter = 60;
     while(i<options.width)
         {
            j=0;
            while(j<h)
            {
                if(j==0)
                css ={left:i,top:j ,backgroundPosition:-i+"px "+(-j)+"px" ,marginTop: -(h/2)};
                else
                css ={left:i,top:j ,backgroundPosition:-i+"px "+(-j)+"px" ,marginTop: h};
                parent.append(block.clone().css(css).delay(counter).animate({opacity:1,marginTop:0},{duration: 700, easing:'easeOutBack'}));
                j = j + h/2;
                counter = counter + 45;
            }
            i = i + w;
         }
         
        i=0;
        wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                 endeffect(image);
              }
          }, 100);
        
    }
    function waveleft(image)
    {
    in_animation = true;
    w = 16;
    h = options.height;
    parent = image.parent();
    arr = new Array(); i =0;  j =0;
    src = image.attr("src");
    block = $("<div />",{
        css:{
                position:"absolute",
                width:w,
                height:h,
                'background-image':'url('+src+')',
                'background-color':options.maskbg,
                'border':options.maskborder,
                 zIndex:99,
                 display:'block',
                 opacity:0
            }
    }).addClass('disblock');
        
     counter = 10;
     while(i<options.width)
         {
                css ={left:i,top:j ,backgroundPosition:-i+"px "+(-j)+"px" ,marginTop: h};
                parent.append(block.clone().css(css).delay(counter).animate({opacity:1,marginTop:0},{duration: 700, easing:'easeOutBack'}));
                counter = counter + 35;
            
            i = i + w;
         }
         
        i=0;
        wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                 endeffect(image);
              }
          }, 40);
        
    }
    
     function cubegrow(image)
    {
        in_animation = true;
         im = image;
        if(options.blocksize.width!=''){
         w = Math.floor(options.blocksize.width);
         h = Math.floor(options.blocksize.height);
         }
         else
         {
        w = Math.floor(options.customblocksize.cubegrow.width);
         h = Math.floor(options.customblocksize.cubegrow.height);    
         }
         parent = im.parent();
         arr = new Array(); i =0;  j =0; index = 0;
         src = im.attr("src");
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:0,
                        height:0,
                        'background-image':'url('+src+')',
                        'background-color':options.maskbg,
                        'border':options.maskborder,
                        zIndex:99
                        
                        }
                            
                            }).addClass('disblock');
        
        counter = 40;
         while(i<options.width)
         {
            
            j=0;
            while(j<options.height)
            {
                
                
                parent.append( block.clone().css({left:i ,top:j,backgroundPosition:-i+"px "+-j+"px" }).delay(counter).animate({height:h,width:w},options.maskOutduration));
            j = j + h; counter = counter + 50;
            }
            
            i = i + w;
         }

        
        wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                 endeffect(image);
              }
          }, 40);
    };  
    function cubesidegrow(image)
    {
        in_animation =true;
         im = image;
        if(options.blocksize.width!=''){
         w = Math.floor(options.blocksize.width);
         h = Math.floor(options.blocksize.height);
         }
         else
         {
        w = Math.floor(options.customblocksize.cubesidegrow.width);
         h = Math.floor(options.customblocksize.cubesidegrow.height);    
         }
         parent = im.parent();
         arr = new Array(); i =0;  j =0; index = 0;
         src = im.attr("src");
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:0,
                        height:0,
                        opacity:0,
                        top:options.height,
                        'background-image':'url('+src+')',
                        'background-color':options.maskbg,
                        'border':options.maskborder,
                        zIndex:99
                        
                        }
                            
                            }).addClass('disblock');
        
        
         while(i<options.width)
         {
            
            j=0;
            while(j<options.height)
            {
                
                arr[index] = block.clone().css({left:i ,top:j,backgroundPosition:-i+"px "+-j+"px" });
                parent.append(arr[index++]);
            j = j + h;
            }
            
            i = i + w;
         }
         
        i=0;
        random_no = random_array(arr.length);
        timer = setInterval(function(){
                
                if(i>=arr.length)
                {
                
                wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                 endeffect(image);
              }
          }, 40);
          
                    
                
                 clearInterval(timer);
                    return;
                }
                                     
                arr[random_no[i++]].animate({height:h,width:w,opacity:1}, options.maskOutduration);
                
                },60);
        
    };  
     function randombricks(image)
    {
        in_animation =true;
     im = image;
        if(options.blocksize.width!=''){
         w = Math.floor(options.blocksize.width);
         h = Math.floor(options.blocksize.height);
         }
         else
         {
        w = Math.floor(options.customblocksize.block);
         h = Math.floor(options.customblocksize.block);  
         }
         parent = im.parent();
         arr = new Array(); i =0;  j =0; index = 0;
         src = im.attr("src");
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:w,
                        height:h,
                        opacity:0,
                        top:options.height,
                        'background-image':'url('+src+')',
                        'background-color':options.maskbg,
                        'border':options.maskborder,
                        zIndex:99
                        
                        }
                            
                            }).addClass('disblock');
        
        
         while(i<options.width)
         {
            
            j=0;
            while(j<options.height)
            {
                
                arr[index] = block.clone().css({left:i ,top:j,backgroundPosition:-i+"px "+-j+"px" });
                parent.append(arr[index++]);
            j = j + h;
            }
            
            i = i + w;
         }
         
        i=0;
        random_no = random_array(arr.length);
        timer = setInterval(function(){
                
                if(i>=arr.length)
                {
                wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                 endeffect(image);
              }
          }, 80);   
                 clearInterval(timer);
                    return;
                }
                                     
                arr[random_no[i++]].animate({opacity:1},{duration:1100, easing:'easeOutCubic'});
                
                },30);
    };
    
    function curtainsright(image)
    {
        in_animation = true;
        if(options.blocksize.width!='')
        w = Math.floor(options.blocksize.width);
        else
        w = Math.floor(options.customblocksize.stripfade.width);
        
        h = options.height;
         parent = image.parent();
         i = options.width; 
         src = image.attr("src");
         var css,flag=true;
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:w,
                        height:h,
                        'background-image':'url('+src+')',
                        'background-color':options.maskbg,
                        'border':options.maskborder,
                        zIndex:99,
                        marginTop:options.height,
                        opacity:0
                        }
                            
                            }).addClass('disblock');
        
        counter = 0;
         while(i>-w)
         {
            
            
                css = {left:i ,backgroundPosition:-i+"px 0px",marginTop:-options.height };
                flag = true;
            
            
            parent.append(block.clone().css(css).delay(counter).animate({marginTop:0,opacity:1},options.maskOutDuration));
            
            i = i - w; counter = counter + 60;
         }
         
        
            wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                 endeffect(image);
              }
          }, 40);
    };
    function stripfade(image)
    {
        in_animation = true;
        if(options.blocksize.width!='')
        w = Math.floor(options.blocksize.width);
        else
        w = Math.floor(options.customblocksize.stripfade.width);
        
        h = options.height;
        
        
         parent = image.parent();
         arr = new Array(); i =0;  j =0; index = 0;
         src = image.attr("src");
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:w,
                        height:h,
                        'background-image':'url('+src+')',
                        'background-color':options.maskbg,
                        'border':options.maskborder,
                        zIndex:99,
                        opacity:0
                        
                        }
                            
                            }).addClass('disblock');
        
        counter = 0;
         while(i<options.width)
         {
        parent.append(block.clone().css({left:i ,backgroundPosition:-i+"px 0px" }).delay(counter).animate({opacity:1},{duration: 700, easing:'easeOutSine'}));
            
            i = i + w;counter = counter + 50;
         }
         
        i=0;
            var wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                endeffect(image);
              }
          }, 40);
        
    };  
    function blindsleft(image)
    {
        in_animation = true;
        if(options.blocksize.width!='')
        w = Math.floor(options.blocksize.width);
        else
        w = Math.floor(options.customblocksize.strip);
        
        h = options.height;
        
        
         parent = image.parent();
         arr = new Array(); i =0;  j =0; index = 0;
         src = image.attr("src");
         block = $("<div />",{
                    css:{
                        position:"absolute",
                        width:0,
                        height:h,
                        'background-image':'url('+src+')',
                        'background-color':options.maskbg,
                        'border':options.maskborder,
                        zIndex:99,
                        opacity:0
                        
                        }
                            
                            }).addClass('disblock');
        
        counter = 0;
         while(i<options.width)
         {
        parent.append(block.clone().css({left:i ,backgroundPosition:-i+"px 0px" }).delay(counter).animate({width:w,opacity:1},{duration: 700, easing:'easeOutSine'}));
            
            i = i + w;counter = counter + 50;
         }
         
        i=0;
            var wait = setInterval(function() {
              if( ! parent.find(".disblock").is(":animated") ) {
                  clearInterval(wait);
                endeffect(image);
              }
          }, 40);
        
    };  
    
    
/* ================================================================================================ */
/* ================================= Effects Switching & Ending =================================== */
/* ================================================================================================ */      
    
    function endeffect(image)
    {
        if(options.listControls==true)
               {
               controls.removeClass("control_active");
               controls.eq(current.index()).addClass("control_active");
               }
        clearInterval(timer);
        setTimeout(function(){
                  image.show(); // show the real image
                  parent.find(".disblock").remove(); // remove the divs
                  current.find("span").fadeIn('normal');
                  
                 
                  in_animation = false;
                  
                  if(override==false) // Return if manually triggered
                  image_timer = setTimeout(function() {  current.find("span").fadeOut('fast');    switcher(); effects();  },(options.time-800)); 
              },1000);
                  
                        
    };
    function effects()
    {
         if(root.find(".disblock").is(":animated"))
         return;
         
        var ch = Math.floor(Math.random()* 10);
        
        if(!isNaN(options.effect))
        ch = options.effect;
          
        if(bool==true)
         {
            li.first().find("span").hide();
            bool=false;
             first_bool = false;
         } 
        
         switch(ch)
         {
         case 0:$(current.find(type)).fadeIn("slow",function(){
             
             endeffect($(this));
              
             });break;
         case 1:  cubegrow(current.find("img"));break;
         case 2:  stripfade(current.find("img"));break;
         case 3:  striphalf(current.find("img"));break;
         case 4:  cubesidegrow(current.find("img"));break;
         case 5:  curtainsright(current.find("img"));break;
         case 6:  randombricks(current.find("img"));break;
         case 7:  waveleft(current.find("img"));break;
         case 8:  blindsleft(current.find("img"));break;
         case 9:  Maskvertical(current.find("img"));break;

         
        
         
         
        
         }
    }

/* ================================================================================================ */
/* ======================================== Control Options ======================================= */
/* ================================================================================================ */  

    function appendarrowControls()
    {
        var prev = jQuery("<div id='ie_div'><a href='#'>").addClass('q-prev');
        parent.append(prev);
        var next = jQuery("<div id='ie_div'><a href='#'>").addClass('q-next');
        parent.append(next);
        
        parent.find(".q-prev").bind("click",function(e){
             var index = current.index()-1;
             if(first_bool==true&&index==0)
             index = 4; 
             
             if(index<0)
             index = li.length-1;
             setImage(index);  
             e.preventDefault();
            });
        parent.find(".q-next").bind("click",function(e){
             var index = current.index()+1;
             if(first_bool==true&&index==2)
             index = 1; 
             
             if(index>li.length-1)
             index = 0;
             setImage(index);  
             e.preventDefault();
            }); 
        
    }
         function appendControls()
     {
        var str = "<ul class='controls'>";
        for(var i=0;i<li.length;i++)
        str = str + "<li>"+(i+1)+"</li>";
        str = str+"</ul>";
        
         root.after(str);
         
         controls = parent.find(".controls li");
        controls.first().addClass("control_active");
        
        controls.bind({
        click:function(){ setImage($(this).index());    },
        mouseover:function(){ $(this).toggleClass("control_hover"); },
        mouseout:function(){ $(this).toggleClass("control_hover"); }
          });
         
        
     }

/* ================================================================================================ */
/* ======================================== Image Settings ======================================== */
/* ================================================================================================ */  
     
      function setImage(index)
    {  
    
        if(first_bool==true)
        {
             if(in_animation==true||current.index()-1==index)
        return;
        }
        else
      if(in_animation==true||current.index()==index)
        return;
        
        li.removeClass("reset active");
        current.find("span").hide();    
        clearTimeout(image_timer); // Manual Override...
        
        if(first_bool==true)
        li.first().addClass("reset");
        
        current.addClass("reset");
        prev = current;
        current = li.eq(index).addClass("active");
        current.find('img').hide();
        override = true;
        effects();
    
    }
        
            
            if(options.autoplay==true)
             image_timer = setTimeout(function() {   effects();  },options.time);  // Starting the Slideshow
            
        });
    
    


};

function random_array(maxn)
 {
    
    var array = new Array();
    var temp,i,flag=true;
    var index =0;
     while(index<maxn)
     {
         flag = true;
         temp = Math.floor(Math.random() * maxn);
         for(i=0;i<array.length;i++)
         {
             if(temp==array[i])
             {
                flag=false;
                break;
             }
         }
         
         if(flag==true)
         array[index++] = temp;
     }
     
     return array;
 };
 
});
    

jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
    def: 'easeOutQuad',
    swing: function (x, t, b, c, d) {
        //alert(jQuery.easing.default);
        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
    },
    easeInQuad: function (x, t, b, c, d) {
        return c*(t/=d)*t + b;
    },
    easeOutQuad: function (x, t, b, c, d) {
        return -c *(t/=d)*(t-2) + b;
    },
    easeInOutQuad: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t + b;
        return -c/2 * ((--t)*(t-2) - 1) + b;
    },
    easeInCubic: function (x, t, b, c, d) {
        return c*(t/=d)*t*t + b;
    },
    easeOutCubic: function (x, t, b, c, d) {
        return c*((t=t/d-1)*t*t + 1) + b;
    },
    easeInOutCubic: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t + b;
        return c/2*((t-=2)*t*t + 2) + b;
    },
    easeInQuart: function (x, t, b, c, d) {
        return c*(t/=d)*t*t*t + b;
    },
    easeOutQuart: function (x, t, b, c, d) {
        return -c * ((t=t/d-1)*t*t*t - 1) + b;
    },
    easeInOutQuart: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
        return -c/2 * ((t-=2)*t*t*t - 2) + b;
    },
    easeInQuint: function (x, t, b, c, d) {
        return c*(t/=d)*t*t*t*t + b;
    },
    easeOutQuint: function (x, t, b, c, d) {
        return c*((t=t/d-1)*t*t*t*t + 1) + b;
    },
    easeInOutQuint: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
        return c/2*((t-=2)*t*t*t*t + 2) + b;
    },
    easeInSine: function (x, t, b, c, d) {
        return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
    },
    easeOutSine: function (x, t, b, c, d) {
        return c * Math.sin(t/d * (Math.PI/2)) + b;
    },
    easeInOutSine: function (x, t, b, c, d) {
        return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
    },
    easeInExpo: function (x, t, b, c, d) {
        return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
    },
    easeOutExpo: function (x, t, b, c, d) {
        return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
    },
    easeInOutExpo: function (x, t, b, c, d) {
        if (t==0) return b;
        if (t==d) return b+c;
        if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
        return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
    },
    easeInCirc: function (x, t, b, c, d) {
        return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
    },
    easeOutCirc: function (x, t, b, c, d) {
        return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
    },
    easeInOutCirc: function (x, t, b, c, d) {
        if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
        return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
    },
    easeInElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
    },
    easeOutElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
    },
    easeInOutElastic: function (x, t, b, c, d) {
        var s=1.70158;var p=0;var a=c;
        if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
        if (a < Math.abs(c)) { a=c; var s=p/4; }
        else var s = p/(2*Math.PI) * Math.asin (c/a);
        if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
        return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
    },
    easeInBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c*(t/=d)*t*((s+1)*t - s) + b;
    },
    easeOutBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158;
        return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
    },
    easeInOutBack: function (x, t, b, c, d, s) {
        if (s == undefined) s = 1.70158; 
        if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
    },
    easeInBounce: function (x, t, b, c, d) {
        return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
    },
    easeOutBounce: function (x, t, b, c, d) {
        if ((t/=d) < (1/2.75)) {
            return c*(7.5625*t*t) + b;
        } else if (t < (2/2.75)) {
            return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
        } else if (t < (2.5/2.75)) {
            return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
        } else {
            return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
        }
    },
    easeInOutBounce: function (x, t, b, c, d) {
        if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
        return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
    }
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright Â© 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */
