(function (b) {
var a = function () {
var R = {}, c, M = 65, t, O = '
', B = {eventName: "click", onShow: function () {
}, onBeforeShow: function () {
}, onHide: function () {
}, onChange: function () {
}, onSubmit: function () {
}, color: "ff0000", livePreview: true, flat: false}, I = function (S, U) {
var T = j(S);
b(U).data("colorpicker").fields.eq(1).val(T.r).end().eq(2).val(T.g).end().eq(3).val(T.b).end()
}, u = function (S, T) {
b(T).data("colorpicker").fields.eq(4).val(S.h).end().eq(5).val(S.s).end().eq(6).val(S.b).end()
}, g = function (S, T) {
b(T).data("colorpicker").fields.eq(0).val(Q(S)).end()
}, l = function (S, T) {
b(T).data("colorpicker").selector.css("backgroundColor", "#" + Q({h: S.h, s: 100, b: 100}));
b(T).data("colorpicker").selectorIndic.css({left: parseInt(150 * S.s / 100, 10), top: parseInt(150 * (100 - S.b) / 100, 10)})
}, F = function (S, T) {
b(T).data("colorpicker").hue.css("top", parseInt(150 - 150 * S.h / 360, 10))
}, h = function (S, T) {
b(T).data("colorpicker").currentColor.css("backgroundColor", "#" + Q(S))
}, E = function (S, T) {
b(T).data("colorpicker").newColor.css("backgroundColor", "#" + Q(S))
}, n = function (S) {
var U = S.charCode || S.keyCode || -1;
if ((U > M && U <= 90) || U == 32) {
return false
}
var T = b(this).parent().parent();
if (T.data("colorpicker").livePreview === true) {
e.apply(this)
}
}, e = function (T) {
var U = b(this).parent().parent(), S;
if (this.parentNode.className.indexOf("_hex") > 0) {
U.data("colorpicker").color = S = m(y(this.value))
} else {
if (this.parentNode.className.indexOf("_hsb") > 0) {
U.data("colorpicker").color = S = f({h: parseInt(U.data("colorpicker").fields.eq(4).val(), 10), s: parseInt(U.data("colorpicker").fields.eq(5).val(), 10), b: parseInt(U.data("colorpicker").fields.eq(6).val(), 10)})
} else {
U.data("colorpicker").color = S = i(L({r: parseInt(U.data("colorpicker").fields.eq(1).val(), 10), g: parseInt(U.data("colorpicker").fields.eq(2).val(), 10), b: parseInt(U.data("colorpicker").fields.eq(3).val(), 10)}))
}
}
if (T) {
I(S, U.get(0));
g(S, U.get(0));
u(S, U.get(0))
}
l(S, U.get(0));
F(S, U.get(0));
E(S, U.get(0));
U.data("colorpicker").onChange.apply(U, [S, Q(S), j(S)])
}, o = function (S) {
var T = b(this).parent().parent();
T.data("colorpicker").fields.parent().removeClass("colorpicker_focus")
}, J = function () {
M = this.parentNode.className.indexOf("_hex") > 0 ? 70 : 65;
b(this).parent().parent().data("colorpicker").fields.parent().removeClass("colorpicker_focus");
b(this).parent().addClass("colorpicker_focus")
}, H = function (S) {
var U = b(this).parent().find("input").focus();
var T = {el: b(this).parent().addClass("colorpicker_slider"), max: this.parentNode.className.indexOf("_hsb_h") > 0 ? 360 : (this.parentNode.className.indexOf("_hsb") > 0 ? 100 : 255), y: S.pageY, field: U, val: parseInt(U.val(), 10), preview: b(this).parent().parent().data("colorpicker").livePreview};
b(document).bind("mouseup", T, s);
b(document).bind("mousemove", T, K)
}, K = function (S) {
S.data.field.val(Math.max(0, Math.min(S.data.max, parseInt(S.data.val + S.pageY - S.data.y, 10))));
if (S.data.preview) {
e.apply(S.data.field.get(0), [true])
}
return false
}, s = function (S) {
e.apply(S.data.field.get(0), [true]);
S.data.el.removeClass("colorpicker_slider").find("input").focus();
b(document).unbind("mouseup", s);
b(document).unbind("mousemove", K);
return false
}, w = function (S) {
var T = {cal: b(this).parent(), y: b(this).offset().top};
T.preview = T.cal.data("colorpicker").livePreview;
b(document).bind("mouseup", T, r);
b(document).bind("mousemove", T, k)
}, k = function (S) {
e.apply(S.data.cal.data("colorpicker").fields.eq(4).val(parseInt(360 * (150 - Math.max(0, Math.min(150, (S.pageY - S.data.y)))) / 150, 10)).get(0), [S.data.preview]);
return false
}, r = function (S) {
I(S.data.cal.data("colorpicker").color, S.data.cal.get(0));
g(S.data.cal.data("colorpicker").color, S.data.cal.get(0));
b(document).unbind("mouseup", r);
b(document).unbind("mousemove", k);
return false
}, x = function (S) {
var T = {cal: b(this).parent(), pos: b(this).offset()};
T.preview = T.cal.data("colorpicker").livePreview;
b(document).bind("mouseup", T, A);
b(document).bind("mousemove", T, q)
}, q = function (S) {
e.apply(S.data.cal.data("colorpicker").fields.eq(6).val(parseInt(100 * (150 - Math.max(0, Math.min(150, (S.pageY - S.data.pos.top)))) / 150, 10)).end().eq(5).val(parseInt(100 * (Math.max(0, Math.min(150, (S.pageX - S.data.pos.left)))) / 150, 10)).get(0), [S.data.preview]);
return false
}, A = function (S) {
I(S.data.cal.data("colorpicker").color, S.data.cal.get(0));
g(S.data.cal.data("colorpicker").color, S.data.cal.get(0));
b(document).unbind("mouseup", A);
b(document).unbind("mousemove", q);
return false
}, v = function (S) {
b(this).addClass("colorpicker_focus")
}, P = function (S) {
b(this).removeClass("colorpicker_focus")
}, p = function (T) {
var U = b(this).parent();
var S = U.data("colorpicker").color;
U.data("colorpicker").origColor = S;
h(S, U.get(0));
U.data("colorpicker").onSubmit(S, Q(S), j(S));
U.hide()
}, D = function (S) {
var W = b("#" + b(this).data("colorpickerId"));
W.data("colorpicker").onBeforeShow.apply(this, [W.get(0)]);
var X = b(this).offset();
var V = z();
var U = X.top + this.offsetHeight;
var T = X.left;
if (U + 176 > V.t + V.h) {
U -= this.offsetHeight + 176
} else {
U += 5
}
if (T + 356 > V.l + V.w) {
T -= 356
}
W.css({left: T + "px", top: U + "px"});
if (W.data("colorpicker").onShow.apply(this, [W.get(0)]) != false) {
W.show()
}
b(document).bind("mousedown", {cal: W}, N);
return false
}, N = function (S) {
if (!G(S.data.cal.get(0), S.target, S.data.cal.get(0))) {
if (S.data.cal.data("colorpicker").onHide.apply(this, [S.data.cal.get(0)]) != false) {
S.data.cal.hide()
}
b(document).unbind("mousedown", N)
}
}, G = function (U, T, S) {
if (U == T) {
return true
}
if (U.contains) {
return U.contains(T)
}
if (U.compareDocumentPosition) {
return !!(U.compareDocumentPosition(T) & 16)
}
var V = T.parentNode;
while (V && V != S) {
if (V == U) {
return true
}
V = V.parentNode
}
return false
}, z = function () {
var S = document.compatMode == "CSS1Compat";
return{l: window.pageXOffset || (S ? document.documentElement.scrollLeft : document.body.scrollLeft), t: window.pageYOffset || (S ? document.documentElement.scrollTop : document.body.scrollTop), w: window.innerWidth || (S ? document.documentElement.clientWidth : document.body.clientWidth), h: window.innerHeight || (S ? document.documentElement.clientHeight : document.body.clientHeight)}
}, f = function (S) {
return{h: Math.min(360, Math.max(0, S.h)), s: Math.min(100, Math.max(0, S.s)), b: Math.min(100, Math.max(0, S.b))}
}, L = function (S) {
return{r: Math.min(255, Math.max(0, S.r)), g: Math.min(255, Math.max(0, S.g)), b: Math.min(255, Math.max(0, S.b))}
}, y = function (U) {
var S = 6 - U.length;
if (S > 0) {
var V = [];
for (var T = 0; T < S; T++) {
V.push("0")
}
V.push(U);
U = V.join("")
}
return U
}, d = function (S) {
var S = parseInt(((S.indexOf("#") > -1) ? S.substring(1) : S), 16);
return{r: S >> 16, g: (S & 65280) >> 8, b: (S & 255)}
}, m = function (S) {
return i(d(S))
}, i = function (T) {
var S = {};
S.b = Math.max(Math.max(T.r, T.g), T.b);
S.s = (S.b <= 0) ? 0 : Math.round(100 * (S.b - Math.min(Math.min(T.r, T.g), T.b)) / S.b);
S.b = Math.round((S.b / 255) * 100);
if ((T.r == T.g) && (T.g == T.b)) {
S.h = 0
} else {
if (T.r >= T.g && T.g >= T.b) {
S.h = 60 * (T.g - T.b) / (T.r - T.b)
} else {
if (T.g >= T.r && T.r >= T.b) {
S.h = 60 + 60 * (T.g - T.r) / (T.g - T.b)
} else {
if (T.g >= T.b && T.b >= T.r) {
S.h = 120 + 60 * (T.b - T.r) / (T.g - T.r)
} else {
if (T.b >= T.g && T.g >= T.r) {
S.h = 180 + 60 * (T.b - T.g) / (T.b - T.r)
} else {
if (T.b >= T.r && T.r >= T.g) {
S.h = 240 + 60 * (T.r - T.g) / (T.b - T.g)
} else {
if (T.r >= T.b && T.b >= T.g) {
S.h = 300 + 60 * (T.r - T.b) / (T.r - T.g)
} else {
S.h = 0
}
}
}
}
}
}
}
S.h = Math.round(S.h);
return S
}, j = function (S) {
var U = {};
var Y = Math.round(S.h);
var X = Math.round(S.s * 255 / 100);
var T = Math.round(S.b * 255 / 100);
if (X == 0) {
U.r = U.g = U.b = T
} else {
var Z = T;
var W = (255 - X) * T / 255;
var V = (Z - W) * (Y % 60) / 60;
if (Y == 360) {
Y = 0
}
if (Y < 60) {
U.r = Z;
U.b = W;
U.g = W + V
} else {
if (Y < 120) {
U.g = Z;
U.b = W;
U.r = Z - V
} else {
if (Y < 180) {
U.g = Z;
U.r = W;
U.b = W + V
} else {
if (Y < 240) {
U.b = Z;
U.r = W;
U.g = Z - V
} else {
if (Y < 300) {
U.b = Z;
U.g = W;
U.r = W + V
} else {
if (Y < 360) {
U.r = Z;
U.g = W;
U.b = Z - V
} else {
U.r = 0;
U.g = 0;
U.b = 0
}
}
}
}
}
}
}
return{r: Math.round(U.r), g: Math.round(U.g), b: Math.round(U.b)}
}, C = function (S) {
var T = [S.r.toString(16), S.g.toString(16), S.b.toString(16)];
b.each(T, function (U, V) {
if (V.length == 1) {
T[U] = "0" + V
}
});
return T.join("")
}, Q = function (S) {
return C(j(S))
};
return{init: function (S) {
S = b.extend({}, B, S || {});
if (typeof S.color == "string") {
S.color = m(S.color)
} else {
if (S.color.r != undefined && S.color.g != undefined && S.color.b != undefined) {
S.color = i(S.color)
} else {
if (S.color.h != undefined && S.color.s != undefined && S.color.b != undefined) {
S.color = f(S.color)
} else {
return this
}
}
}
S.origColor = S.color;
return this.each(function () {
if (!b(this).data("colorpickerId")) {
var U = "collorpicker_" + parseInt(Math.random() * 1000);
b(this).data("colorpickerId", U);
var T = b(O).attr("id", U);
if (S.flat) {
T.appendTo(this).show()
} else {
T.appendTo(document.body)
}
S.fields = T.find("input").bind("keydown", n).bind("change", e).bind("blur", o).bind("focus", J);
T.find("span").bind("mousedown", H);
S.selector = T.find("div.colorpicker_color").bind("mousedown", x);
S.selectorIndic = S.selector.find("div div");
S.hue = T.find("div.colorpicker_hue div");
T.find("div.colorpicker_hue").bind("mousedown", w);
S.newColor = T.find("div.colorpicker_new_color");
S.currentColor = T.find("div.colorpicker_current_color");
T.data("colorpicker", S);
T.find("div.colorpicker_submit").bind("mouseenter", v).bind("mouseleave", P).bind("click", p);
I(S.color, T.get(0));
u(S.color, T.get(0));
g(S.color, T.get(0));
F(S.color, T.get(0));
l(S.color, T.get(0));
h(S.color, T.get(0));
E(S.color, T.get(0));
if (S.flat) {
T.css({position: "relative", display: "block"})
} else {
b(this).bind(S.eventName, D)
}
}
})
}, showPicker: function () {
return this.each(function () {
if (b(this).data("colorpickerId")) {
D.apply(this)
}
})
}, hidePicker: function () {
return this.each(function () {
if (b(this).data("colorpickerId")) {
b("#" + b(this).data("colorpickerId")).hide()
}
})
}, setColor: function (S) {
if (typeof S == "string") {
S = m(S)
} else {
if (S.r != undefined && S.g != undefined && S.b != undefined) {
S = i(S)
} else {
if (S.h != undefined && S.s != undefined && S.b != undefined) {
S = f(S)
} else {
return this
}
}
}
return this.each(function () {
if (b(this).data("colorpickerId")) {
var T = b("#" + b(this).data("colorpickerId"));
T.data("colorpicker").color = S;
T.data("colorpicker").origColor = S;
I(S, T.get(0));
u(S, T.get(0));
g(S, T.get(0));
F(S, T.get(0));
l(S, T.get(0));
h(S, T.get(0));
E(S, T.get(0))
}
})
}}
}();
b.fn.extend({ColorPicker: a.init, ColorPickerHide: a.hide, ColorPickerShow: a.show, ColorPickerSetColor: a.setColor})
})(jQuery);