(function(a) { a.fn.powerFloat = function(d) { return a(this).each(function() { var f = a.extend({}, b, d || {}); var g = function(i, h) { if (c.target && c.target.css("display") !== "none") { c.targetHide() } c.s = i; c.trigger = h }, e; switch (f.eventType) { case "hover": a(this).hover(function() { if (c.timerHold) { c.flagDisplay = true } var h = parseInt(f.showDelay, 10); g(f, a(this)); if (h) { if (e) { clearTimeout(e) } e = setTimeout(function() { c.targetGet.call(c) }, h) } else { c.targetGet() } }, function() { if (e) { clearTimeout(e) } if (c.timerHold) { clearTimeout(c.timerHold) } c.flagDisplay = false; c.targetHold() }); if (f.hoverFollow) { a(this).mousemove(function(h) { c.cacheData.left = h.pageX; c.cacheData.top = h.pageY; c.targetGet.call(c); return false }) } break; case "click": a(this).click(function(h) { if (c.display && c.trigger && h.target === c.trigger.get(0)) { c.flagDisplay = false; c.displayDetect() } else { g(f, a(this)); c.targetGet(); if (!a(document).data("mouseupBind")) { a(document).bind("mouseup", function(k) { var i = false; if (c.trigger) { var j = c.target.attr("id"); if (!j) { j = "R_" + Math.random(); c.target.attr("id", j) } a(k.target).parents().each(function() { if (a(this).attr("id") === j) { i = true } }); if (f.eventType === "click" && c.display && k.target != c.trigger.get(0) && !i) { c.flagDisplay = false; c.displayDetect() } } return false }).data("mouseupBind", true) } } }); break; case "focus": a(this).focus(function() { var h = a(this); setTimeout(function() { g(f, h); c.targetGet() }, 200) }).blur(function() { c.flagDisplay = false; setTimeout(function() { c.displayDetect() }, 190) }); break; default: g(f, a(this)); c.targetGet(); a(document).unbind("mouseup").data("mouseupBind", false) } }) }; var c = { targetGet: function() { if (!this.trigger) { return this } var h = this.trigger.attr(this.s.targetAttr), g = typeof this.s.target == "function" ? this.s.target.call(this.trigger) : this.s.target; switch (this.s.targetMode) { case "common": if (g) { var i = typeof(g); if (i === "object") { if (g.size()) { c.target = g.eq(0) } } else { if (i === "string") { if (a(g).size()) { c.target = a(g).eq(0) } } } } else { if (h && a("#" + h).size()) { c.target = a("#" + h) } } if (c.target) { c.targetShow() } else { return this } break; case "ajax": var d = g || h; this.targetProtect = false; if (!d) { return } if (!c.cacheData[d]) { c.loading() } var f = new Image(); f.onload = function() { var m = f.width, q = f.height; var p = a(window).width(), s = a(window).height(); var r = m / q, o = p / s; if (r > o) { if (m > p / 2) { m = p / 2; q = m / r } } else { if (q > s / 2) { q = s / 2; m = q * r } } var n = ''; c.cacheData[d] = true; c.target = a(n); c.targetShow() }; f.onerror = function() { if (/(\.jpg|\.png|\.gif|\.bmp|\.jpeg)$/i.test(d)) { c.target = a('
图片加载失败。
'); c.targetShow() } else { a.ajax({ url: d, success: function(m) { if (typeof(m) === "string") { c.cacheData[d] = true; c.target = a('
' + m + "
"); c.targetShow() } }, error: function() { c.target = a('
数据没有加载成功。
'); c.targetShow() } }) } }; f.src = d; break; case "list": var k = '"; c.target = a(k); this.targetProtect = false; c.targetShow(); break; case "remind": var l = g || h; this.targetProtect = false; if (typeof(l) === "string") { c.target = a("" + l + ""); c.targetShow() } break; default: var e = g || h, i = typeof(e); if (e) { if (i === "string") { if (/^.[^:#\[\.,]*$/.test(e)) { if (a(e).size()) { c.target = a(e).eq(0); this.targetProtect = true } else { if (a("#" + e).size()) { c.target = a("#" + e).eq(0); this.targetProtect = true } else { c.target = a("
" + e + "
"); this.targetProtect = false } } } else { c.target = a("
" + e + "
"); this.targetProtect = false } c.targetShow() } else { if (i === "object") { if (!a.isArray(e) && e.size()) { c.target = e.eq(0); this.targetProtect = true; c.targetShow() } } } } } return this }, container: function() { var d = this.s.container, e = this.s.targetMode || "mode"; if (e === "ajax" || e === "remind") { this.s.sharpAngle = true } else { this.s.sharpAngle = false } if (this.s.reverseSharp) { this.s.sharpAngle = !this.s.sharpAngle } if (e !== "common") { if (d === null) { d = "plugin" } if (d === "plugin") { if (!a("#floatBox_" + e).size()) { a('
').appendTo(a("body")).hide() } d = a("#floatBox_" + e) } if (d && typeof(d) !== "string" && d.size()) { if (this.targetProtect) { c.target.show().css("position", "static") } c.target = d.empty().append(c.target) } } return this }, setWidth: function() { var d = this.s.width; if (d === "auto") { if (this.target.get(0).style.width) { this.target.css("width", "auto") } } else { if (d === "inherit") { this.target.width(this.trigger.width()) } else { this.target.css("width", d) } } return this }, position: function() { if (!this.trigger || !this.target) { return this } var h, x = 0, k = 0, m = 0, y = 0, s, o, e, E, u, q, f = this.target.data("height"), C = this.target.data("width"), r = a(window).scrollTop(), B = parseInt(this.s.offsets.x, 10) || 0, A = parseInt(this.s.offsets.y, 10) || 0, w = this.cacheData; if (!f) { f = this.target.outerHeight(); if (this.s.hoverFollow) { this.target.data("height", f) } } if (!C) { C = this.target.outerWidth(); if (this.s.hoverFollow) { this.target.data("width", C) } } h = this.trigger.offset(); x = this.trigger.outerHeight(); k = this.trigger.outerWidth(); s = h.left; o = h.top; var l = function() { if (s < 0) { s = 0 } else { if (s + x > a(window).width()) { s = a(window).width() - k } } }, i = function() { if (o < 0) { o = 0 } else { if (o + x > a(document).height()) { o = a(document).height() - x } } }; if (this.s.hoverFollow && w.left && w.top) { if (this.s.hoverFollow === "x") { s = w.left; l() } else { if (this.s.hoverFollow === "y") { o = w.top; i() } else { s = w.left; o = w.top; l(); i() } } } var g = ["4-1", "1-4", "5-7", "2-3", "2-1", "6-8", "3-4", "4-3", "8-6", "1-2", "7-5", "3-2"], v = this.s.position, d = false, j; a.each(g, function(F, G) { if (G === v) { d = true; return } }); if (!d) { v = "4-1" } var D = function(F) { var G = "bottom"; switch (F) { case "1-4": case "5-7": case "2-3": G = "top"; break; case "2-1": case "6-8": case "3-4": G = "right"; break; case "1-2": case "8-6": case "4-3": G = "left"; break; case "4-1": case "7-5": case "3-2": G = "bottom"; break } return G }; var n = function(F) { if (F === "5-7" || F === "6-8" || F === "8-6" || F === "7-5") { return true } return false }; var t = function(H) { var I = 0, F = 0, G = (c.s.sharpAngle && c.corner) ? true: false; if (H === "right") { F = s + k + C + B; if (G) { F += c.corner.width() } if (F > a(window).width()) { return false } } else { if (H === "bottom") { I = o + x + f + A; if (G) { I += c.corner.height() } if (I > r + a(window).height()) { return false } } else { if (H === "top") { I = f + A; if (G) { I += c.corner.height() } if (I > o - r) { return false } } else { if (H === "left") { F = C + B; if (G) { F += c.corner.width() } if (F > s) { return false } } } } } return true }; j = D(v); if (this.s.sharpAngle) { this.createSharp(j) } if (this.s.edgeAdjust) { if (t(j)) { (function() { if (n(v)) { return } var G = { top: { right: "2-3", left: "1-4" }, right: { top: "2-1", bottom: "3-4" }, bottom: { right: "3-2", left: "4-1" }, left: { top: "1-2", bottom: "4-3" } }; var H = G[j], F; if (H) { for (F in H) { if (!t(F)) { v = H[F] } } } })() } else { (function() { if (n(v)) { var G = { "5-7": "7-5", "7-5": "5-7", "6-8": "8-6", "8-6": "6-8" }; v = G[v] } else { var H = { top: { left: "3-2", right: "4-1" }, right: { bottom: "1-2", top: "4-3" }, bottom: { left: "2-3", right: "1-4" }, left: { bottom: "2-1", top: "3-4" } }; var I = H[j], F = []; for (name in I) { F.push(name) } if (t(F[0]) || !t(F[1])) { v = I[F[0]] } else { v = I[F[1]] } } })() } } var z = D(v), p = v.split("-")[0]; if (this.s.sharpAngle) { this.createSharp(z); m = this.corner.width(), y = this.corner.height() } if (this.s.hoverFollow) { if (this.s.hoverFollow === "x") { e = s + B; if (p === "1" || p === "8" || p === "4") { e = s - (C - k) / 2 + B } else { e = s - (C - k) + B } if (p === "1" || p === "5" || p === "2") { E = o - A - f - y; q = o - y - A - 1 } else { E = o + x + A + y; q = o + x + A + 1 } u = h.left - (m - k) / 2 } else { if (this.s.hoverFollow === "y") { if (p === "1" || p === "5" || p === "2") { E = o - (f - x) / 2 + A } else { E = o - (f - x) + A } if (p === "1" || p === "8" || p === "4") { e = s - C - B - m; u = s - m - B - 1 } else { e = s + k - B + m; u = s + k + B + 1 } q = h.top - (y - x) / 2 } else { e = s + B; E = o + A } } } else { switch (z) { case "top": E = o - A - f - y; if (p == "1") { e = s - B } else { if (p === "5") { e = s - (C - k) / 2 - B } else { e = s - (C - k) - B } } q = o - y - A - 1; u = s - (m - k) / 2; break; case "right": e = s + k + B + m; if (p == "2") { E = o + A } else { if (p === "6") { E = o - (f - x) / 2 + A } else { E = o - (f - x) + A } } u = s + k + B + 1; q = o - (y - x) / 2; break; case "bottom": E = o + x + A + y; if (p == "4") { e = s + B } else { if (p === "7") { e = s - (C - k) / 2 + B } else { e = s - (C - k) + B } } q = o + x + A + 1; u = s - (m - k) / 2; break; case "left": e = s - C - B - m; if (p == "2") { E = o - A } else { if (p === "6") { E = o - (C - k) / 2 - A } else { E = o - (f - x) - A } } u = e + m; q = o - (C - m) / 2; break } } if (y && m && this.corner) { this.corner.css({ left: u, top: q, zIndex: this.s.zIndex + 1 }) } this.target.css({ position: "absolute", left: e, top: E, zIndex: this.s.zIndex }); return this }, createSharp: function(g) { var j, k, f = "", d = ""; var i = { left: "right", right: "left", bottom: "top", top: "bottom" }, e = i[g] || "top"; if (this.target) { j = this.target.css("background-color"); if (parseInt(this.target.css("border-" + e + "-width")) > 0) { k = this.target.css("border-" + e + "-color") } if (k && k !== "transparent") { f = 'style="color:' + k + ';"' } else { f = 'style="display:none;"' } if (j && j !== "transparent") { d = 'style="color:' + j + ';"' } else { d = 'style="display:none;"' } } var h = '
"; if (!a("#floatCorner_" + g).size()) { a("body").append(a(h)) } this.corner = a("#floatCorner_" + g); return this }, targetHold: function() { if (this.s.hoverHold) { var d = parseInt(this.s.hideDelay, 10) || 200; if (this.target) { this.target.hover(function() { c.flagDisplay = true }, function() { if (c.timerHold) { clearTimeout(c.timerHold) } c.flagDisplay = false; c.targetHold() }) } c.timerHold = setTimeout(function() { c.displayDetect.call(c) }, d) } else { this.displayDetect() } return this }, loading: function() { this.target = a('
'); this.targetShow(); this.target.removeData("width").removeData("height"); return this }, displayDetect: function() { if (!this.flagDisplay && this.display) { this.targetHide(); this.timerHold = null } return this }, targetShow: function() { c.cornerClear(); this.display = true; this.container().setWidth().position(); this.target.show(); if (a.isFunction(this.s.showCall)) { this.s.showCall.call(this.trigger, this.target) } return this }, targetHide: function() { this.display = false; this.targetClear(); this.cornerClear(); if (a.isFunction(this.s.hideCall)) { this.s.hideCall.call(this.trigger) } this.target = null; this.trigger = null; this.s = {}; this.targetProtect = false; return this }, targetClear: function() { if (this.target) { if (this.target.data("width")) { this.target.removeData("width").removeData("height") } if (this.targetProtect) { this.target.children().hide().appendTo(a("body")) } this.target.unbind().hide() } }, cornerClear: function() { if (this.corner) { this.corner.remove() } }, target: null, trigger: null, s: {}, cacheData: {}, targetProtect: false }; a.powerFloat = {}; a.powerFloat.hide = function() { c.targetHide() }; var b = { width: "auto", offsets: { x: 0, y: 0 }, zIndex: 999, eventType: "hover", showDelay: 0, hideDelay: 0, hoverHold: true, hoverFollow: false, targetMode: "common", target: null, targetAttr: "rel", container: null, reverseSharp: false, position: "4-1", edgeAdjust: true, showCall: a.noop, hideCall: a.noop } })(jQuery);