// jFrame
// $Revision: 1.50 $
// Author: Frederic de Zorzi
// Contact: fredz@_nospam_pimentech.net
// Revision: $Revision: 1.50 $
// Date: $Date: 2007/08/10 09:59:56 $
// Copyright: 2007 PimenTech SARL
// Tags: ajax javascript pimentech english jquery

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) {
			div = $("#" + target).get(0);
		}
    }
    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(){};
	$(this).load(url, 
				 function() { 
					 $(this).attr("src", url);
					 $(this).activateJFrames(); 
					 eval(this_callback);
					 callback();
				 });
};


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

    $(this).find("input[@type='submit']")
	.unbind("click")
	.click(function() {
            var input = this;
            var target = $(input).getJFrameTarget();
            if (target) {
                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).activateJFrames(); 
                        }
                    });
                return false;
            }
			return true;
        } );
        
    $(this).find("div[@src]").each(function(i) {
            if ($(this).attr("src") != "#") {
                // Add reload DOM function on jframe 
                this.reload = function () { $(this).loadJFrame($(this).attr("src")); };
                $(this).loadJFrame($(this).attr("src"));
            }
        });
};


$(document).ready(function() { $(document).activateJFrames(); } );