/*
 jQuery Fieldtag Plugin
 * Version 1.2
 * 2010-05-17 16:17:00
 * URL: http://ajaxcssblog.com/jquery/fieldtag-watermark-inputfields/
 * Description: jQuery Plugin to dynamically tag an inputfield, with a class and/or text
 * Author: Matthias Jäggli
 * Copyright: Copyright (c) 2010 Matthias Jäggli under dual MIT/GPL license.
 */
(function($) {
    $.fn.fieldtag = function(options) {
        var opt = $.extend({
            markedClass: "tagged",
            standardText: false
        }, options);
        var taggedInput = this;
        $(this).focus(function(){
            if (!taggedInput.changed) {
                taggedInput.clear();
            }
        }).blur(function() {
            if(!taggedInput.changed && $(taggedInput).val() != $(taggedInput).attr("value")) {
                taggedInput.changeMark();
            }
            if(!taggedInput.changed){
                taggedInput.addTag();
            }
        }).keyup(function(){
            taggedInput.changeMark();
        }).each(function(){

            taggedInput.title = $(taggedInput).attr("value"); //strange IE6 Bug, sometimes
            if ($(taggedInput).val() == $(taggedInput).attr("value")) {
                taggedInput.changed = false;
            }
            taggedInput.clear = function(){
                if(!taggedInput.changed){
                    $(taggedInput).val("").removeClass(opt.markedClass);
                }
            }
            taggedInput.addTag = function(){
                $(taggedInput).val(opt.standardText === false ? taggedInput.title : opt.standardText).addClass(opt.markedClass);
            }
            taggedInput.changeMark = function(){
                taggedInput.changed = ($(taggedInput).val() ? true : false);
            }
            if(taggedInput.form){
                taggedInput.form.tagFieldsToClear = taggedInput.form.tagFieldsToClear || [];
                taggedInput.form.tagFieldsToClear.push(taggedInput);

                if(taggedInput.form.tagFieldsAreCleared){
                    return true;
                }
                taggedInput.form.tagFieldsAreCleared = true;

                $(taggedInput.form).submit(function() {
                $(taggedInput.tagFieldsToClear).each(function() {
                taggedInput.clear();
                    });
                });
            }

            //fire the IE AutoComplete/Firefox form suggest (aso) change event
			//this happens on selecting previously entered values by mouse or keyboard
            $(taggedInput).bind('propertychange', function(e) {
                if(!taggedInput.changed && $(taggedInput).val() != $(taggedInput).attr("value")){
                    taggedInput.changeMark();
                }
            });
        }).keyup().blur();
        return $(this);
    }
})(jQuery);
