/*The easing code was provided by George Smith. Please check out his site
as without him this would look really horrible!
http://gsgd.co.uk/sandbox/jquery/easing/
*/
jQuery.easing.jswing = jQuery.swing;
jQuery.extend( jQuery.easing,
{
def: 'easeOutCubic',
swing: function (x, t, b, c, d) {
return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
},
easeOutCubic: function (x, t, b, c, d) {
return c*((t=t/d-1)*t*t + 1) + b;
}
});
/*
12/20/08
SliderJS
Jquery plugin for smooth and pretty sliding divs
Copyright (C) 2008 Jeremy Fry
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
jQuery.iSliderJS = {
build : function(user_options)
{
var defaults = {
direction:"horizontal",
list_width: 6740,
window_width: 500,
window_height: 350,
pikachoose: false
};
return $(this).each(function(){
//declare variables. God knows I've missed half of them I'll use
var options = $.extend(defaults, user_options);
var acceleration = 0;
var initx = 0; //intial
var inity = 0;
var movex = [];
var downtime = 0;
//wrap the list in a sliderjs div.
$(this).wrap("
");
var $sliderul = $(this);
var $sliderjs = $(this).parent("");
var divcss = {
width: options.window_width+"px",
height: options.window_height+"px",
overflow:"hidden",
position:"relative"
};
var ulcss = {
position: "relative",
width: options.list_width+"px"
};
$sliderjs.css(divcss);
$sliderul.css(ulcss);
//TODO:add a scroll bar and buttons maybe.
if($.browser.msie){
//$sliderjs.children().mousedown(function(){ return true;});
$sliderul.children().mousedown(function(){
return false;});
$sliderul.children().children().mousedown(function(){
return false;});
}
//mouse fucntions for tosses
$sliderjs.bind('selectstart', function() {
return false;
});
$sliderjs.bind("mousedown", function(e){
$sliderul.stop();
$sliderul.dequeue();
movex.splice(0);
initx = e.pageX;
var date = new Date();
downtime = date.getTime();
var xlen = 0;
var ulinitx = $sliderul.position().left;
$().bind("mousemove", function(e){
//track the mouse movements
//duplicates cause some issues. Though moving only one direction would
//cause this. it tends to be unintentional
if(movex[xlen-1]!=e.pageX){
xlen = movex.push(e.pageX);
}
//keep trimming our array
if(xlen>10){
movex.splice(0,6);
xlen = movex.push(e.pageX);
}
//track direction of last three movements. if directions changes reset time
if(movex.length>3){
if((movex[xlen-3]>=movex[xlen-2]) &&(movex[xlen-2]>=movex[xlen-1])){
}else if((movex[xlen-3]<=movex[xlen-2]) &&(movex[xlen-2]<=movex[xlen-1])){
}else{
//if we made it here the user has changed direction so now we need to reset the time
//downtime = date.getTime();
}
}
//move the list around well the mouse is pressed
var newleft = parseInt(ulinitx, 10)+parseInt((e.pageX-initx)/1.5, 10);
if(newleft<((options.list_width*-1)+parseInt(options.window_width, 10)-50)){
newleft=((options.list_width*-1)+parseInt(options.window_width, 10)-50);
}
if(newleft>50){newleft=50;}
//$('.pika_navigation').html(newleft);
$sliderul.css("left",newleft+"px");
});
$().bind("mouseup", MeatAndPatatos);
return false;
});
function Animate(xvalue){
$sliderul.stop();
$sliderul.dequeue();
$sliderul.animate({
left:xvalue+"px"
},1500,"easeOutCubic");
}
//TODO: find a better name for this func... nevermind I like it
function MeatAndPatatos(e){
$().unbind("mousemove");
$().unbind("mouseup", MeatAndPatatos);
var date = new Date();
var uptime = date.getTime();
//calculate velocity... did math class just pay off?
var velocity = (movex[movex.length-1]*100-movex[movex.length-2]*100)/(uptime-downtime);
var distance = movex[movex.length-1]-movex[movex.length-2];
var negative = 1;
//they're both negative when they get multiplied together we're going to end up with a positive
if(distance<0){
negative = -1;
}
var ulinitx = $sliderul.position().left;
var animateleft = parseInt(ulinitx, 10)+(velocity * distance * negative)/2;
if(animateleft<(options.list_width*-1)+parseInt(options.window_width, 10)){
animateleft=(options.list_width*-1)+parseInt(options.window_width, 10);
}
//alert(animateleft);
if(animateleft>0){animateleft=0;}
//now that we have velocity figure out the distance to go and the time
if(isNaN(animateleft)){}else{
Animate(animateleft);
}
}
function MoveToLi(){
var pos = $(this).parent('li').position();
var width = $(this).css("width").slice(0,-2);
var lileft = pos.left;
var liright = parseInt(pos.left, 10)+parseInt(width, 10);
var ulleft = $sliderul.position().left;
//find out if the li is inside the viewable area
//first find range of viewable values
var low = ulleft*-1;
var high = low+options.window_width;
//is my li in that?
if((lileft>=low)&&(liright<=high)){
//viewable we're gravy
return;
}else{
//uh oh! not viewable lets slide
//find how far outside view we are
var slide =0;
if(lileft