function FormSubmitter(obj) {
    var _this = this;
    var isNode = obj.nodeName != null;
    //this.formID = isNode ? obj.id : obj.formID;
    this.form = isNode ? obj : obj.form;

    if(isNode) {
        //var subs = xpathQuery(obj, "//*[@formSubmitButton]");
        var subs = getNodesWithAttr(obj, "formSubmitButton");
        if(subs[0])
            this.submitButton = subs[0];
    } else {
        this.submitButton = $(obj.submitID);
    }

    this.postSubmitCallback = isNode ? eval(obj.getAttribute("postSubmitCallback")) : obj.postSubmitCallback;
    this.onSubmitCallback = isNode ? eval(obj.getAttribute("onSubmitCallback")) : obj.onSubmitCallback;

    if(!(this.form))
        throw(new Error("Form element or object not specified."));

    this.iframe = document.createElement("iframe");
    this.iframeID = "_target" + Math.floor(Math.random() * 1000);
    this.iframe.style.height = "0px";
    this.iframe.style.width = "0px";
    this.iframe.name = this.iframeID;
    this.iframe.id = this.iframeID;
    this.form.target = this.iframeID;
    document.body.appendChild(this.iframe);

    if(this.submitButton) {
        addEventListener(this.submitButton, "click", function(){_this.submit();});
    }

}

extend(FormSubmitter, Finder);

//FormSubmitter.prototype.xpath = "//*[@formSubmitter]";
FormSubmitter.prototype.baseattr = "formSubmitter";

FormSubmitter.prototype.submit = function(){
        //hack for IE, this needs to be set after the target is set
        if(self.frames && self.frames[this.iframeID]) 
            self.frames[this.iframeID].name = this.iframeID;

        if(this.onSubmitCallback){
            this.onSubmitCallback(this);
        }

        this.form.submit();
        if(this.postSubmitCallback)
            this.postSubmitCallback();

}

FormSubmitter.prototype.invoke("FormSubmitter");
