﻿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;
});
