var onImagesLoaded = function(images, fn, max_time){
            max_time = max_time || 2000;
            var timeout = setTimeout(function(){
                fn.call(images);    
            },max_time);
            var amt = $(images).size();
            var loaded = 0;
            $(images).each(function(){
                onImageLoaded(this,function(){
                    loaded++;
                    if(loaded == amt){                        
                        clearTimeout(timeout);
                        fn.call(images)
                    }
                });
            })
        }

        var onEachImageLoaded = function(images, fn){
            $(images).each(function(){
                onImageLoaded(this,fn);    
            })
        }

        var onImageLoaded = function(image, fn){
            fn = fn || function(){}
            if(image.complete || image.readyState == "complete"){
                fn.call(image);
            }else{
                $(image).bind("load readystatechanged", fn);
            }
        }