﻿(function ($) {

    // plugin definition
    $.fn.overlabel = function (options) {

        // build main options before element iteration
        var opts = $.extend({}, $.fn.overlabel.defaults, options);

        var selection = this.filter('label[for]').map(function () {

            var label = $(this);
            var id = label.attr('for');
            var field = $("[id$=_" + id + "]");
            if (!field) return;

            // build element specific options
            var o = $.meta ? $.extend({}, opts, label.data()) : opts;

            label.addClass(o.label_class);

            var hide_label = function () { label.css(o.hide_css) };
            var show_label = function () { this.value || label.css(o.show_css) };

            $(field)
                 .parent().addClass(o.wrapper_class).end()
                 .focus(hide_label).blur(show_label).each(hide_label).each(show_label);
            alert(field.attr("id"));

            return this;

        });

        return opts.filter ? selection : selection.end();
    };

    // publicly accessible defaults
    $.fn.overlabel.defaults = {

        label_class: 'overlabel-apply',
        wrapper_class: 'overlabel-wrapper',
        hide_css: { 'text-indent': '-10000px' },
        show_css: { 'text-indent': '0px', 'cursor': 'text' },
        filter: false

    };

})(jQuery);
