var TzFisheye = function(id, size) {
    var api = {
        iScale: size || 600
      , iPad:   15
    }

    var iWidth = 0;

    var oImgIds = {};

    var xOuter;
    var xLast;

    var tScale = false;

    var init = function() {
        xOuter = Ext.get(id);
        xLast  = xOuter.child('ul').last('li');
        iWidth = xOuter.getWidth();

        var $api = jQuery('#' + id).scrollable({
            size:          7
          , activeClass:   'TzScrollActive'
          , clickable:     false
          , disabledClass: 'TzScrollDisabled'
          , item:          'li'
          , prevPage:      '.TzScrollPrev'
          , nextPage:      '.TzScrollNext'
        }).mousewheel({api: true}); /**/

        /*
        Ext.select('.TzScrollPrev,.TzScrollNext').setStyle('display', 'none');
        xOuter.setStyle('overflow', 'hidden').on('mousemove', doScroll); /**/

        if (Ext.isIE6) {
            xOuter.on('mousemove', doScroll);
            xOuter.setStyle('overflow', 'hidden');
        } else {
            xOuter.select('li').hover(Scale.up, Scale.down);
        }

//        xOuter.child('ul').slideIn('l', {duration: 3, easing: 'backIn'});
    }

    var Scale = {
        run: function(x, h, y) {
            x.shift({height: h, y: y, concurrent: true});
        }
      , up: function() {
            var xImg = Ext.get(this).child('img');
            if (!xImg) {
                return;
            }

            if (!oImgIds[xImg.id]) {
                oImgIds[xImg.id] = {height: xImg.getHeight(), y: xImg.getY()};
            }

            tScale = Scale.run.defer(250, this, [xImg, parseInt(api.iScale), (xImg.getY() - ((parseInt(api.iScale) - oImgIds[xImg.id].height) / 2))]);
        }
      , down: function() {
            clearTimeout(tScale);

            var xImg = Ext.get(this).child('img');
            if (!xImg) {
                return;
            }
            Scale.run(xImg, oImgIds[xImg.id].height, oImgIds[xImg.id].y);
        }
    }

    var doScroll = function(e, o) {
        var iInnerWidth = xLast.dom.offsetLeft + xLast.getWidth() + parseInt(api.iPad);
        var iLeft = (e.getPageX() - xOuter.getLeft()) * (iInnerWidth - iWidth) / iWidth;
        xOuter.scrollTo('left', iLeft);
    }

    init();
    return api;
};