// jFrame
// $Revision: 1.132 $
// Author: Frederic de Zorzi
// Contact: fredz@_nospam_pimentech.net
// Revision: $Revision: 1.132 $
// Date: $Date: 2009-01-21 11:55:29 $
// Copyright: 2007-2008 PimenTech SARL
// Tags: ajax javascript pimentech english jquery

jQuery.fn.waitingJFrame = function () {
	var pl = $(this).attr("preload"); 
	if(pl == 'yes') { 
		$(this).html('<div style="width: 100%;text-align:center;padding:2px;"><img src="/images/site/misc/loading.gif" alt="Loading..." /></div>');
	}
}

function _jsattr(elem, key) {
	var res = jQuery(elem).attr(key);
	if (res == undefined) {
		return function() {};}
	if (jQuery.browser.msie) {
		return function() {eval(res);};
	}
	return res;
}

function jFrameSubmitInput(input) {
    var target = jQuery(input).getJFrameTarget();
    if (target.length) {
        var form = input.form;
        if (form.onsubmit && form.onsubmit() == false
            || target.preloadJFrame() == false) {
            return false;
        }
        jQuery(form).ajaxSubmit({
            target: target,
                    beforeSubmit: function(formArray) {
                    formArray.push({ name:"submit", value: jQuery(input).attr("value") });
                },
                    success: function() {
                    target.attr("src", jQuery(form).attr("action"));
					_jsattr(target, "onload")();
                    target.activateJFrame();
                }
            });
        return false;
    }
    return true;
}

jQuery.fn.preloadJFrame = function(initial) {
	if (!initial && _jsattr(this, "onunload")() == false) {
		return false;
	}
    jQuery(this).waitingJFrame();
}

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

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

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

    jQuery(this).find("a")
    .filter("[vframe='yes']")
    .unbind("click")
    .click(function() {
            var target = jQuery(this).getJFrameTarget();
            if (target.length) {
                var href = jQuery(this).attr("href");
                if (href && href.indexOf('javascript:') != 0) {
					target.fadeOut('fast');
					target.loadJFrame(href);
					target.fadeIn('slow');
                    return false;
                }
            }
            return true;
        });

    jQuery(":image,:submit,:button", this)
    .filter("[jframe='yes']")
    .unbind("click")
    .click(function() {
			return jFrameSubmitInput(this);
		});

    jQuery(":image,:submit,:button", this)
    .filter("[vframe='yes']")
    .unbind("click")
    .click(function() {
			return jFrameSubmitInput(this);
		});

	// Only for IE6 : enter key invokes submit event
    jQuery(this).find("form")
	.filter("[vframe='yes']")
    .unbind("submit")
    .submit(function() {
			return jFrameSubmitInput(jQuery(":image,:submit,:button", this).get(0));
    });
};

jQuery(document).ready(function() {
    jQuery(document).find("div[src]").each(function(i) {
            jQuery(this).loadJFrame(undefined, undefined, true);
    });
});