$.crossForm = { callbacks: {} };

$.fn.crossForm = function(params, callback) {
    if(this == null) return null;
    
    $(this).find("input[@name='callback']").remove();
    
    var _$_ = this;
    var zzz_callback = callback;
    var url = $(this).attr("action");
    
    if(callback != null) {
        var clb = document.createElement("input");
        clb.type = "hidden";
        clb.name = "callback";
        clb.value = name(callback);
        $(this).append(clb);
    }
    
    if(params != null && params != undefined) {
        for(var key in params) {
            $(_$_).find("input[@name='" + key + "']").remove();
            var clb = document.createElement("input");
            clb.type = "hidden";
            clb.name = key;
            clb.value = params[key];
            $(this).append(clb);
        }
    }
    
    function name( callback ) {
        var id = (new Date).getTime();
        var name = 'json_' + id;
        
        var cb = $.crossForm.callbacks[id] = function( json ) {
            delete $.crossForm.callbacks[id];
            eval( 'delete ' + name );
            _$_.each( function() { callback(json); } );
        };
        
        eval( name + ' = cb' );
        return name;
    }
    
}
