/*
	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 (n) {
        var p = {
            isVertical: false,
            sticky: false,
            defaultKwick: 0,
            event: 'mouseover',
            spacing: 0,
            duration: 400
        };
        var o = $.extend(p, n);
        var q = (o.isVertical ? 'height' : 'width');
        var r = (o.isVertical ? 'top' : 'left');
        return this.each(function () {
            container = $(this);
            var k = container.children('li');
            var l = k.eq(0).css(q).replace(/px/, '');
            if (!o.max) {
                o.max = (l * k.size()) - (o.min * (k.size() - 1))
            } else {
                o.min = ((l * k.size()) - o.max) / (k.size() - 1)
            }
            if (o.isVertical) {
                container.css({
                    width: k.eq(0).css('width'),
                    height: (l * k.size()) + (o.spacing * (k.size() - 1)) + 'px'
                })
            } else {
                container.css({
                    width: (l * k.size()) + (o.spacing * (k.size() - 1)) + 'px',
                    height: k.eq(0).css('height')
                })
            }
            var m = [];
            for (i = 0; i < k.size(); i++) {
                m[i] = [];
                for (j = 1; j < k.size() - 1; j++) {
                    if (i == j) {
                        m[i][j] = o.isVertical ? j * o.min + (j * o.spacing) : j * o.min + (j * o.spacing)
                    } else {
                        m[i][j] = (j <= i ? (j * o.min) : (j - 1) * o.min + o.max) + (j * o.spacing)
                    }
                }
            }
            k.each(function (i) {
                var h = $(this);
                if (i === 0) {
                    h.css(r, '0px')
                } else if (i == k.size() - 1) {
                    h.css(o.isVertical ? 'bottom' : 'right',
                    '0px')
                } else {
                    if (o.sticky) {
                        h.css(r, m[o.defaultKwick][i])
                    } else {
                        h.css(r, (i * l) + (i * o.spacing))
                    }
                }
                if (o.sticky) {
                    if (o.defaultKwick == i) {
                        h.css(q, o.max + 'px');
                        h.addClass('active')
                    } else {
                        h.css(q, o.min + 'px')
                    }
                }
                h.css({
                    margin: 0,
                    position: 'absolute'
                });
                h.bind(o.event, function () {
                    var c = [];
                    var d = [];
                    k.stop().removeClass('active');
                    for (j = 0; j < k.size(); j++) {
                        c[j] = k.eq(j).css(q).replace(/px/, '');
                        d[j] = k.eq(j).css(r).replace(/px/, '')
                    }
                    var e = {};
                    e[q] = o.max;
                    var f = o.max - c[i];
                    var g = c[i] / f;
                    h.addClass('active').animate(e, {
                        step: function (a) {
                            var b = f != 0 ? a / f - g : 1;k.each(function (j) {
                                if (j != i) {
                                    k.eq(j).css(q, c[j] - ((c[j] - o.min) * b) + 'px')
                                }
                                if (j > 0 && j < k.size() - 1) {
                                    k.eq(j).css(r, d[j] - ((d[j] - m[i][j]) * b) + 'px')
                                }
                            })
                        },
                        duration: o.duration,
                        easing: o.easing
                    })
                })
            });
            if (!o.sticky) {
                container.bind("mouseleave", function () {
                    var c = [];
                    var d = [];
                    k.removeClass('active').stop();
                    for (i = 0; i < k.size(); i++) {
                        c[i] = k.eq(i).css(q).replace(/px/, '');
                        d[i] = k.eq(i).css(r).replace(/px/, '')
                    }
                    var e = {};
                    e[q] = l;
                    var f = l - c[0];
                    k.eq(0).animate(e, {
                        step: function (a) {
                            var b = f != 0 ? (a - c[0]) / f : 1;
                            for (i = 1; i < k.size(); i++) {
                                k.eq(i).css(q, c[i] - ((c[i] - l) * b) + 'px');
                                if (i < k.size() - 1) {
                                    k.eq(i).css(r, d[i] - ((d[i] - ((i * l) + (i * o.spacing))) * b) + 'px')
                                }
                            }
                        },
                        duration: o.duration,
                        easing: o.easing
                    })
                })
            }
        })
    }
})(jQuery);
