(function ($) {
    $.fn.kwicks = function (n) {
        var p = {
            isVertical: false,
            sticky: false,
            defaultKwick: 0,
            event: 'mouseover',
			eventOut: 'mouseout',
            spacing: 0,
            duration: 500
        };
        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 myA = k.children('a');
			var myInfo = k.children('div');
            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');
									myInfo.eq(j).css('display', 'none');
									k.eq(j).css('height', container.css('height'));
                                }
                                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
                    })
                })
				//roddy 
				var bpos = [];
				for (j = 0; j < k.size(); j++) {
					bpos[j] = myA.eq(j).css('backgroundPosition');
				}
				myInfo.eq(i).css('filter', 'alpha(opacity=0)');
				myInfo.eq(i).css(myA.eq(i).attr('rel'), '0px');
				
				h.bind("mouseover", function () {
					myInfo.eq(i).css('display', 'block');
					myA.eq(i).animate({backgroundPosition: '0 0'}, o.duration, o.easing, function() {
    					h.animate({height: myA.eq(i).css('height')}, o.duration, o.easing, function() {
    						myInfo.eq(i).animate({opacity: 0.9}, o.duration, o.easing);
  						});
					});
				});
				
				h.bind("mouseleave", function () {
					//$('.infobox').css('opacity', '0');
					myA.eq(i).animate({backgroundPosition: bpos[i]}, o.duration, o.easing, function() {
    					h.animate({height: container.css('height')}, o.duration, o.easing, function() {
    						//myInfo.eq(i).css('opacity', '0');
  						});
  					});
				});
				
				//roddy
            })
            if (!o.sticky) {
                container.bind("mouseleave", function () {
                    var c = [];
                    var d = [];
                    k.removeClass('active').stop();
					k.animate({height: container.css('height')}, o.duration, o.easing);
					

                    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/, '');
						
						myInfo.eq(i).css('display', 'none');
						//k.eq(i).css({opacity: 1}, o.duration, o.easing);
						/*
						myInfo.eq(i).animate({opacity: 0}, o.duration, o.easing, function() {
							k.eq(i).animate({height: container.css('height')}, o.duration, o.easing);
						});
						*/
                    }
                    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
                    })
					
					
                })
			///roddy added this else
            }
        })
    }
})(jQuery);
