﻿jQuery.iFisheye = { build: function (options) {
    return this.each(function () {
        var el = this; el.fisheyeCfg = { items: jQuery(options.items, this), container: jQuery(options.container, this), pos: jQuery.iUtil.getPosition(this), itemWidth: options.itemWidth, itemsText: options.itemsText, proximity: options.proximity, valign: options.valign, halign: options.halign, maxWidth: options.maxWidth }; jQuery.iFisheye.positionContainer(el, 0); jQuery(window).bind('resize', function ()
        { el.fisheyeCfg.pos = jQuery.iUtil.getPosition(el); jQuery.iFisheye.positionContainer(el, 0); jQuery.iFisheye.positionItems(el); }); jQuery.iFisheye.positionItems(el); el.fisheyeCfg.items.bind('mouseover', function ()
        { jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'block'; }).bind('mouseout', function ()
        { jQuery(el.fisheyeCfg.itemsText, this).get(0).style.display = 'none'; }); jQuery(document).bind('mousemove', function (e) {
            var pointer = jQuery.iUtil.getPointer(e); var toAdd = 0; if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'center')
                var posx = pointer.x - el.fisheyeCfg.pos.x - (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) / 2 - el.fisheyeCfg.itemWidth / 2; else if (el.fisheyeCfg.halign && el.fisheyeCfg.halign == 'right')
                var posx = pointer.x - el.fisheyeCfg.pos.x - el.offsetWidth + el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size(); else
                var posx = pointer.x - el.fisheyeCfg.pos.x; var posy = Math.pow(pointer.y - el.fisheyeCfg.pos.y - el.offsetHeight / 2, 2); el.fisheyeCfg.items.each(function (nr) {
                    distance = Math.sqrt(Math.pow(posx - nr * el.fisheyeCfg.itemWidth, 2)
+ posy); distance -= el.fisheyeCfg.itemWidth / 2; distance = distance < 0 ? 0 : distance; distance = distance > el.fisheyeCfg.proximity ? el.fisheyeCfg.proximity : distance; distance = el.fisheyeCfg.proximity - distance; extraWidth = el.fisheyeCfg.maxWidth * distance / el.fisheyeCfg.proximity; this.style.width = el.fisheyeCfg.itemWidth + extraWidth + 'px'; this.style.left = el.fisheyeCfg.itemWidth * nr + toAdd + 'px'; toAdd += extraWidth;
                }); jQuery.iFisheye.positionContainer(el, toAdd);
        });
    })
}, positionContainer: function (el, toAdd) {
    if (el.fisheyeCfg.halign)
        if (el.fisheyeCfg.halign == 'center')
            el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) / 2 - toAdd / 2 + 'px'; else if (el.fisheyeCfg.halign == 'left')
            el.fisheyeCfg.container.get(0).style.left = -toAdd / el.fisheyeCfg.items.size() + 'px'; else if (el.fisheyeCfg.halign == 'right')
            el.fisheyeCfg.container.get(0).style.left = (el.offsetWidth - el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size()) - toAdd / 2 + 'px'; el.fisheyeCfg.container.get(0).style.width = el.fisheyeCfg.itemWidth * el.fisheyeCfg.items.size() + toAdd + 'px';
}, positionItems: function (el) {
    el.fisheyeCfg.items.each(function (nr)
    { this.style.width = el.fisheyeCfg.itemWidth + 'px'; this.style.left = el.fisheyeCfg.itemWidth * nr + 'px'; });
} 
}; jQuery.fn.Fisheye = jQuery.iFisheye.build; jQuery.iUtil = { getPosition: function (e) {
    var x = 0; var y = 0; var es = e.style; var restoreStyles = false; if (jQuery(e).css('display') == 'none') { var oldVisibility = es.visibility; var oldPosition = es.position; restoreStyles = true; es.visibility = 'hidden'; es.display = 'block'; es.position = 'absolute'; }
    var el = e; while (el) { x += el.offsetLeft + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderLeftWidth) || 0 : 0); y += el.offsetTop + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderTopWidth) || 0 : 0); el = el.offsetParent; }
    el = e; while (el && el.tagName && el.tagName.toLowerCase() != 'body')
    { x -= el.scrollLeft || 0; y -= el.scrollTop || 0; el = el.parentNode; }
    if (restoreStyles == true) { es.display = 'none'; es.position = oldPosition; es.visibility = oldVisibility; }
    return { x: x, y: y };
}, getPositionLite: function (el) {
    var x = 0, y = 0; while (el) { x += el.offsetLeft || 0; y += el.offsetTop || 0; el = el.offsetParent; }
    return { x: x, y: y };
}, getSize: function (e) {
    var w = jQuery.css(e, 'width'); var h = jQuery.css(e, 'height'); var wb = 0; var hb = 0; var es = e.style; if (jQuery(e).css('display') != 'none') { wb = e.offsetWidth; hb = e.offsetHeight; } else { var oldVisibility = es.visibility; var oldPosition = es.position; es.visibility = 'hidden'; es.display = 'block'; es.position = 'absolute'; wb = e.offsetWidth; hb = e.offsetHeight; es.display = 'none'; es.position = oldPosition; es.visibility = oldVisibility; }
    return { w: w, h: h, wb: wb, hb: hb };
}, getSizeLite: function (el)
{ return { wb: el.offsetWidth || 0, hb: el.offsetHeight || 0 }; }, getClient: function (e) {
    var h, w, de; if (e) { w = e.clientWidth; h = e.clientHeight; } else { de = document.documentElement; w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth; h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight; }
    return { w: w, h: h };
}, getScroll: function (e) {
    var t = 0, l = 0, w = 0, h = 0, iw = 0, ih = 0; if (e && e.nodeName.toLowerCase() != 'body') { t = e.scrollTop; l = e.scrollLeft; w = e.scrollWidth; h = e.scrollHeight; iw = 0; ih = 0; } else {
        if (document.documentElement) { t = document.documentElement.scrollTop; l = document.documentElement.scrollLeft; w = document.documentElement.scrollWidth; h = document.documentElement.scrollHeight; } else if (document.body) { t = document.body.scrollTop; l = document.body.scrollLeft; w = document.body.scrollWidth; h = document.body.scrollHeight; }
        iw = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0; ih = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
    }
    return { t: t, l: l, w: w, h: h, iw: iw, ih: ih };
}, getMargins: function (e, toInteger) {
    var el = jQuery(e); var t = el.css('marginTop') || ''; var r = el.css('marginRight') || ''; var b = el.css('marginBottom') || ''; var l = el.css('marginLeft') || ''; if (toInteger)
        return { t: parseInt(t) || 0, r: parseInt(r) || 0, b: parseInt(b) || 0, l: parseInt(l) }; else
        return { t: t, r: r, b: b, l: l };
}, getPadding: function (e, toInteger) {
    var el = jQuery(e); var t = el.css('paddingTop') || ''; var r = el.css('paddingRight') || ''; var b = el.css('paddingBottom') || ''; var l = el.css('paddingLeft') || ''; if (toInteger)
        return { t: parseInt(t) || 0, r: parseInt(r) || 0, b: parseInt(b) || 0, l: parseInt(l) }; else
        return { t: t, r: r, b: b, l: l };
}, getBorder: function (e, toInteger) {
    var el = jQuery(e); var t = el.css('borderTopWidth') || ''; var r = el.css('borderRightWidth') || ''; var b = el.css('borderBottomWidth') || ''; var l = el.css('borderLeftWidth') || ''; if (toInteger)
        return { t: parseInt(t) || 0, r: parseInt(r) || 0, b: parseInt(b) || 0, l: parseInt(l) || 0 }; else
        return { t: t, r: r, b: b, l: l };
}, getPointer: function (event)
{ var x = event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) || 0; var y = event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) || 0; return { x: x, y: y }; }, traverseDOM: function (nodeEl, func)
{ func(nodeEl); nodeEl = nodeEl.firstChild; while (nodeEl) { jQuery.iUtil.traverseDOM(nodeEl, func); nodeEl = nodeEl.nextSibling; } }, purgeEvents: function (nodeEl) {
    jQuery.iUtil.traverseDOM(nodeEl, function (el)
    { for (var attr in el) { if (typeof el[attr] === 'function') { el[attr] = null; } } });
}, centerEl: function (el, axis) {
    var clientScroll = jQuery.iUtil.getScroll(); var windowSize = jQuery.iUtil.getSize(el); if (!axis || axis == 'vertically')
        jQuery(el).css({ top: clientScroll.t + ((Math.max(clientScroll.h, clientScroll.ih) - clientScroll.t - windowSize.hb) / 2) + 'px' }); if (!axis || axis == 'horizontally')
        jQuery(el).css({ left: clientScroll.l + ((Math.max(clientScroll.w, clientScroll.iw) - clientScroll.l - windowSize.wb) / 2) + 'px' });
}, fixPNG: function (el, emptyGIF) { var images = jQuery('img[@src*="png"]', el || document), png; images.each(function () { png = this.src; this.src = emptyGIF; this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png + "')"; }); } 
}; [].indexOf || (Array.prototype.indexOf = function (v, n) {
    n = (n == null) ? 0 : n; var m = this.length; for (var i = n; i < m; i++)
        if (this[i] == v)
            return i; return -1;
});
