jQuery.fn.getJFrameTarget = function () {
	// Returns first parent jframe element, if exists
    var div = $(this).parents("div[@src]").get(0);
    if (div) {
		var target = $(this).attr("target");
		if (target) {
			return $("#" + target);
		}
    }
    return $(div);
};


jQuery.fn.loadJFrame = function(url, callback) {
	// like ajax.load, for jFrame. the onload attribute is supported
	var this_callback = $(this).attr("onload");
	callback = callback || function(){};
	url = url || $(this).attr("src");
	if (url && url != "#") {
		$(this).load(url, 
					 function() { 
						 $(this).attr("src", url);
						 $(this).activateJFrame(); 
						 $(this).find("div[@src]").each(function(i) {
								 $(this).loadJFrame();
							 } );
						 eval(this_callback);
						 callback();
					 });
	}
	else {
		$(this).activateJFrame(); 
	}
};

jQuery.fn.activateJFrame = function() {
	// Add an onclick event on all <a> and <input type="submit"> tags
    $(this).find("a")
	.unbind("click")
	.click(function() { 
            var target = $(this).getJFrameTarget();
            if (target.length) {
                var href = $(this).attr("href");
                if (href && href.indexOf('javascript:') != 0) {
                    target.loadJFrame(href);
                    return false;
                }
            }
            return true;
        } );

    $(this).find("input[@type='submit']", "button[@type='submit']")
	.unbind("click")
	.click(function() {
            var input = this;
            var target = $(input).getJFrameTarget();
            if (target.length) {
                var form = input.form;
				if (form.onsubmit && form.onsubmit()==false) {
					return false;
				}
                $(form).ajaxSubmit({ 
                        target: target,
                        beforeSubmit: function(formArray) { 
                            formArray.push({ 
                                name:"submit", 
                                value: $(input).attr("value") 
                            }); 
                        },
                        success: function() { 
							target.attr("src", $(form).attr("action"));
							eval(target.attr("onload"));
                            target.activateJFrame(); 
                        }
                    });
                return false;
            }
			return true;
        } );
        
	if ($(this).attr("src") && $(this).attr("src") != "#") {
		// Add reload DOM function on jframe 
		this.reload = function () { $(this).loadJFrame($(this).attr("src")); };
	}
};


$(document).ready(function() { 
	$(document).find("div[@src]").each(function(i) {
			$(this).loadJFrame();
		} );
} );
