(function (b) {
    var l = "function",
        j = "password",
        d = "maxLength",
        f = "type",
        c = true,
        a = "",
        e = false,
        t = "watermark",
        u, m = t,
        i = "watermarkClass",
        q = "watermarkFocus",
        k = "watermarkSubmit",
        o = "watermarkMaxLength",
        h = "watermarkPassword",
        g = "watermarkText",
        s = ":data(" + m + ")",
        n = ":text,:password,:search,textarea",
        p = ["Page_ClientValidate"],
        r = e;
    b.extend(b.expr[":"], {
        search: function (b) {
        	result = false;
        	try {
        		result = "search" === (b.type || a);
        	}catch(e){
        		// do nothing
        	}
        	return result;
        },
        data: function (g, i, h) {
            var f, d = /^((?:[^=!^$*]|[!^$*](?!=))+)(?:([!^$*]?=)(.*))?$/.exec(h[3]);
            if (d) {
                f = b(g).data(d[1]);
                if (f !== u) {
                    if (d[2]) {
                        f = a + f;
                        switch (d[2]) {
                        case "=":
                            return f == d[3];
                        case "!=":
                            return f != d[3];
                        case "^=":
                            return f.slice(0, d[3].length) == d[3];
                        case "$=":
                            return f.slice(-d[3].length) == d[3];
                        case "*=":
                            return f.indexOf(d[3]) !== -1
                        }
                    }
                    return c
                }
            }
            return e
        }
    });
    b.watermark = {
        version: "3.0.6",
        options: {
            className: t,
            useNative: c
        },
        hide: function (a) {
            b(a).filter(s).each(function () {
                b.watermark._hide(b(this))
            })
        },
        _hide: function (b, n) {
            var m = b.val() || a,
                k = b.data(g) || a,
                l = b.data(o) || 0,
                j = b.data(i);
            if (k.length && m == k) {
                b.val(a);
                if (b.data(h)) if ((b.attr(f) || a) === "text") {
                    var e = b.data(h) || [],
                        c = b.parent() || [];
                    if (e.length && c.length) {
                        c[0].removeChild(b[0]);
                        c[0].appendChild(e[0]);
                        b = e
                    }
                }
                if (l) {
                    b.attr(d, l);
                    b.removeData(o)
                }
                if (n) {
                    b.attr("autocomplete", "off");
                    window.setTimeout(function () {
                        b.select()
                    }, 1)
                }
            }
            j && b.removeClass(j)
        },
        show: function (a) {
            b(a).filter(s).each(function () {
                b.watermark._show(b(this))
            })
        },
        _show: function (e) {
            var t = e.val() || a,
                k = e.data(g) || a,
                p = e.attr(f) || a,
                s = e.data(i);
            if ((t.length == 0 || t == k) && !e.data(q)) {
                r = c;
                if (e.data(h)) if (p === j) {
                    var n = e.data(h) || [],
                        m = e.parent() || [];
                    if (n.length && m.length) {
                        m[0].removeChild(e[0]);
                        m[0].appendChild(n[0]);
                        e = n;
                        e.attr(d, k.length)
                    }
                }
                if (p === "text" || p === "search") {
                    var l = e.attr(d) || 0;
                    if (l > 0 && k.length > l) {
                        e.data(o, l);
                        e.attr(d, k.length)
                    }
                }
                s && e.addClass(s);
                e.val(k)
            } else b.watermark._hide(e)
        },
        hideAll: function () {
            if (r) {
                b.watermark.hide(n);
                r = e
            }
        },
        showAll: function () {
            b.watermark.show(n)
        }
    };
    b.fn.watermark = function (r, o) {
        var p = "string";
        if (!this.length) return this;
        var s = e,
            t = typeof r === p;
        if (typeof o === "object") {
            s = typeof o.className === p;
            o = b.extend({}, b.watermark.options, o)
        } else if (typeof o === p) {
            s = c;
            o = b.extend({}, b.watermark.options, {
                className: o
            })
        } else o = b.watermark.options;
        if (typeof o.useNative !== l) o.useNative = o.useNative ?
        function () {
            return c
        } : function () {
            return e
        };
        return this.each(function () {
            var v = "dragleave",
                u = "dragenter",
                x = this,
                e = b(x);
            if (!e.is(n)) return;
            if (e.data(m)) {
                if (t || s) {
                    b.watermark._hide(e);
                    t && e.data(g, r);
                    s && e.data(i, o.className)
                }
            } else {
                if (o.useNative.call(x, e)) if ((a + e.css("-webkit-appearance")).replace("undefined", a) !== a && (e.attr("tagName") || a) !== "TEXTAREA") {
                    t && e.attr("placeholder", r);
                    return
                }
                e.data(g, t ? r : a);
                e.data(i, o.className);
                e.data(m, 1);
                if ((e.attr(f) || a) === j) {
                    var y = e.wrap("<span>").parent(),
                        l = b(y.html().replace(/type=["']?password["']?/i, 'type="text"'));
                    l.data(g, e.data(g));
                    l.data(i, e.data(i));
                    l.data(m, 1);
                    l.attr(d, r.length);
                    l.focus(function () {
                        b.watermark._hide(l, c)
                    }).bind(u, function () {
                        b.watermark._hide(l)
                    }).bind("dragend", function () {
                        window.setTimeout(function () {
                            l.blur()
                        }, 1)
                    });
                    e.blur(function () {
                        b.watermark._show(e)
                    }).bind(v, function () {
                        b.watermark._show(e)
                    });
                    l.data(h, e);
                    e.data(h, l)
                } else e.focus(function () {
                    e.data(q, 1);
                    b.watermark._hide(e, c)
                }).blur(function () {
                    e.data(q, 0);
                    b.watermark._show(e)
                }).bind(u, function () {
                    b.watermark._hide(e)
                }).bind(v, function () {
                    b.watermark._show(e)
                }).bind("dragend", function () {
                    window.setTimeout(function () {
                        b.watermark._show(e)
                    }, 1)
                }).bind("drop", function (c) {
                    var b = c.originalEvent.dataTransfer.getData("Text");
                    e.val().replace(b, a) === e.data(g) && e.val(b);
                    e.focus()
                });
                if (x.form) {
                    var p = x.form,
                        w = b(p);
                    if (!w.data(k)) {
                        w.submit(b.watermark.hideAll);
                        if (p.submit) {
                            w.data(k, p.submit);
                            p.submit = function (c, a) {
                                return function () {
                                    var d = a.data(k);
                                    b.watermark.hideAll();
                                    if (d.apply) d.apply(c, Array.prototype.slice.call(arguments));
                                    else d()
                                }
                            }(p, w)
                        } else {
                            w.data(k, 1);
                            p.submit = function (a) {
                                return function () {
                                    b.watermark.hideAll();
                                    delete a.submit;
                                    a.submit()
                                }
                            }(p)
                        }
                    }
                }
            }
            b.watermark._show(e)
        })
    };
    p.length && b(function () {
        for (var a, c, d = p.length - 1; d >= 0; d--) {
            a = p[d];
            c = window[a];
            if (typeof c === l) window[a] = function (a) {
                return function () {
                    b.watermark.hideAll();
                    return a.apply(null, Array.prototype.slice.call(arguments))
                }
            }(c)
        }
    })
})(jQuery);
