jQuery(function($) {

    $("form")
        // sf_clear doesn't submit, put sf_submit on too if you want to submit blank form
        .find('.sf_clear').click(function() {$(this.form).clearForm();}).end()
        .find('.sf_reset').click(function() {$(this.form).resetForm();}).end()
        // various ways of submitting forms with submitId
        .find(':image,:submit').click(function () {sfSetSubmitId(this);}).end()
        .find('select.sf_submit').change(function () {sfAutoSubmit(this);}).end()
        .find(':radio.sf_submit').click(function () {sfAutoSubmit(this);}).end()
        .find(':checkbox.sf_submit').click(function () {sfAutoSubmit(this);}).end()
        .find('a.sf_submit').click(function () {sfAutoSubmit(this);});
    // focus the first element with class "sf_focus"
    $('.sf_focus:first').focus();

    $.fn.setField = function (name, val) {
        this.find("input[@name=" + name + "]").val(val);
        return this;
    };
    
    /**
     * use current element's NAME or ID attr as form's submitId
     */
    function sfSetSubmitId (obj, isAuto) {
        var jq = jQuery(obj);
        var id = jq.attr("name");
        if (!id)
            id = jq.attr("id");        
        if (isAuto)
            id += "_submit";
        if (id)
            jQuery('input[@name=submitId]', sfGetForm(obj)).val(id);
        return true;
    }
    
    function sfAutoSubmit (obj) {
        sfSetSubmitId(obj, true);
        sfGetForm(obj).submit();
    }

    // works for non form elements inside a form
    function sfGetForm (obj) {
        return $(obj).parents("form")[0];
    }

});
