﻿jQuery.fn.easeMenu = function (d) {
    var f = jQuery.extend({
        ulPadding: 0,
        velocity: 800,
        edges: 100,
        delayToAutoSelect: 300,
        debug: false,
        extendClick: function () { },
        extendOver: function () { },
        extendOut: function () { },
        extendSelected: function () { },
        extendNormalState: function () { }
    }, d);
    var g = $(this);
    var h = f.ulPadding;
    var i = f.velocity;
    var j = f.edges;
    var k = f.delayToAutoSelect;
    var l = f.debug;
    var m = g.outerWidth();
//    g.css({
//        overflow: 'hidden'
//    });
    var n = g.find("ul");
    n.css({
        width: "1000%"
    });
    var o = n.children('li').last();
    var p = n.children('li').first();
    p.addClass("firstItem");
    o.addClass("lastItem");
    var q = o[0].offsetLeft + o.outerWidth();
    var r, moveto, tracer, tracer2, movementer, outer;
    var s = [];
    var t = g.find("ul li");
    t.each(function (e) {
        f.extendNormalState.call(this);
        s.push({
            href: $(this).find('a').attr('href'),
            height: $(this).height(),
            width: $(this).width()
        });
//        if ($(this).hasClass("selected")) {
//            f.extendSelected.call(this);
//            r = $(this);
//            window.setTimeout(function () {
//                moveto = Math.round(r.offset().left - g.offset().left);
//                q = o[0].offsetLeft + o.outerWidth();
//                if ((q - moveto) < g.outerWidth()) {
//                    n.animate({
//                        left: -q + g.outerWidth()
//                    }, {
//                        queue: false,
//                        duration: i
//                    })
//                } else {
//                    n.animate({
//                        left: -moveto
//                    }, {
//                        queue: false,
//                        duration: i
//                    })
//                }
//            }, k)
//        }
        $(this).click(function () {
            if (!$(this).hasClass("selected")) {
                r.removeClass("selected");
                f.extendOut.call(r);
                r = $(this);
                $(this).addClass("selected");
                $(this).removeClass("over")
            }
            f.extendClick.call(this);
            if (l) {
                $("#clicked").html(e)
            }
        });
        $(this).hover(function () {
            if (!$(this).hasClass("selected")) {
                $(this).addClass("over");
                f.extendOver.call(this)
            }
            if ($(this).hasClass("firstItem")) {
                tracer2 = "FirstItem > " + e
            } else if ($(this).hasClass("lastItem")) {
                tracer2 = "LastItem > " + e
            } else {
                tracer2 = "Item > " + e
            }
            if (l) {
                $("#overelement").html(tracer2)
            }
        }, function () {
            if (!$(this).hasClass("selected")) {
                $(this).removeClass("over");
                f.extendOut.call(this)
            }
        })
    });
    g.mousemove(function (e) {
        var a = o[0].offsetLeft + o.outerWidth();
        var b = Math.round((e.pageX - g.offset().left) * (m - a) / (m));
        var c = Math.round((g.offset().left - e.pageX) + (g.outerWidth() / 2));
        if (c > 0) {
            tracer = "<< " + c;
            h = -h
        } else {
            tracer = ">> " + c;
            h = h
        }
        movementer = b;
        if ((movementer + h) > -j) {
            n.animate({
                left: 0
            }, {
                queue: false,
                duration: i
            });
            outer = "near left << edge"
        } else if (c < -(g.outerWidth() / 2 - j)) {
            n.animate({
                left: m - a
            }, {
                queue: false,
                duration: i
            });
            outer = "near right >> edge"
        } else {
            outer = "over middle div";
            n.animate({
                left: movementer + h
            }, {
                queue: false,
                duration: i
            })
        }
        if (l) {
            $("#out").html("You are " + outer);
            $("#mousepos").html(tracer);
            $("#movement").html(movementer + h)
        }
    })
};
