/*
 * In-Field Label jQuery Plugin
 * http://fuelyourcoding.com/scripts/infield.html
 *
 * Copyright (c) 2009 Doug Neiner
 * Dual licensed under the MIT and GPL licenses.
 * Uses the same license as jQuery, see:
 * http://docs.jquery.com/License
 *
 * @version 0.1
 */
(function($){
    $.InFieldLabels = function(b, c, d){
        var f = this;
        f.$label = $(b);
        f.label = b;
        f.$field = $(c);
        f.field = c;
        f.$label.data("InFieldLabels", f);
        f.showing = true;
        f.init = function(){
            f.options = $.extend({}, $.InFieldLabels.defaultOptions, d);
            if (f.$field.val() != "") {
                f.$label.hide();
                f.showing = false
            };
            f.$field.focus(function(){
                f.fadeOnFocus()
            }).blur(function(){
                f.checkForEmpty(true)
            }).bind('keydown.infieldlabel', function(e){
                f.hideOnChange(e)
            }).change(function(e){
                f.checkForEmpty()
            }).bind('onPropertyChange', function(){
                f.checkForEmpty()
            })
        };
        f.fadeOnFocus = function(){
            if (f.showing) {
                f.setOpacity(f.options.fadeOpacity)
            }
        };
        f.setOpacity = function(a){
            f.$label.stop().animate({
                opacity: a
            }, f.options.fadeDuration);
            f.showing = (a > 0.0)
        };
        f.checkForEmpty = function(a){
            if (f.$field.val() == "") {
                f.prepForShow();
                f.setOpacity(a ? 1.0 : f.options.fadeOpacity)
            }
            else {
                f.setOpacity(0.0)
            }
        };
        f.prepForShow = function(e){
            if (!f.showing) {
                f.$label.css({
                    opacity: 0.0
                }).show();
                f.$field.bind('keydown.infieldlabel', function(e){
                    f.hideOnChange(e)
                })
            }
        };
        f.hideOnChange = function(e){
            if ((e.keyCode == 16) || (e.keyCode == 9)) 
                return;
            if (f.showing) {
                f.$label.hide();
                f.showing = false
            };
            f.$field.unbind('keydown.infieldlabel')
        };
        f.init()
    };
    $.InFieldLabels.defaultOptions = {
        fadeOpacity: 0.5,
        fadeDuration: 300
    };
    $.fn.inFieldLabels = function(c){
        return this.each(function(){
            var a = $(this).attr('for');
            if (!a) 
                return;
            var b = $("input#" + a + "[type='text']," + "input#" + a + "[type='password']," + "textarea#" + a);
            if (b.length == 0) 
                return;
            (new $.InFieldLabels(this, b[0], c))
        })
    }
})(jQuery);

