function datejs_attach(input_elt, output_elt, main_elt, 
                       container_elt, label_elt) {
    var input_elt = $(input_elt), the_date = null;
    var main_elt = $(main_elt);
    var input_empty = "e.g. 1/1/09, yesterday";
    var container_elt = $(container_elt);
    var label_elt = $(label_elt);


    var validate = function() {
        if (input_elt.val().length == 0) {
            input_elt.val(input_empty).addClass("empty_field").removeClass("validation_error");
            main_elt.val("");
        } else if (main_elt.val().length == 0) {
            input_elt.addClass("validation_error");
        } else {
            input_elt.val(main_elt.val());
        }
    }
    validate();
    

    var update_field = function () {
        if (input_elt.val().length > 0) {
            the_date = Date.parse(input_elt.val());
            if (the_date != null) {
                input_elt.removeClass("validation_error");
                main_elt.val(the_date.toString("MMMM d, yyyy"));
            } else {
                main_elt.val("");
            }
        }
	}
    input_elt.keyup(update_field);
    input_elt.change(update_field);
    

    input_elt.focus(function (e) {
	    if (input_elt.hasClass("empty_field")) {
		    input_elt.val("").removeClass("empty_field");
            main_elt.val("");
	    }
	});

    input_elt.blur(validate);

    
    var hide_container = function () {
        input_elt.data('saved_value', input_elt.val());
        input_elt.val("");
        main_elt.data('saved_value', main_elt.val());
        main_elt.val("");
        
        container_elt.hide();
    }
    main_elt.data('hide', hide_container);

    var show_container = function () {
        input_elt.val(input_elt.data('saved_value'));
        main_elt.val(main_elt.data('saved_value'));
        
        container_elt.show();
    }
    main_elt.data('show', show_container);

    var rename_elt = function (t) {
        label_elt.text(t);
    }
    main_elt.data('rename', rename_elt);
}
