/*****************************************************************
 *
 * alot better performance    
 * lazierLoad 0.4 - by Bramus! - http://www.bram.us/
 * inspired upon http://www.appelsiini.net/projects/lazyload/
 *
 *****************************************************************/
 
    /**
     * JS_BRAMUS Object
     * -------------------------------------------------------------
     */
     
        if (!JS_BRAMUS) { 
            var JS_BRAMUS = new Object(); 
        }
        
        
    /**
     * lazierLoad Class
     * -------------------------------------------------------------
     */

        JS_BRAMUS.lazierLoad                = Class.create();
        JS_BRAMUS.lazierLoad.prototype      = {
            elements                : new Hash(),
            lazyScroller        : null,

            checkDiv            : function(div) {
                var images = div.getElementsBySelector('img.delayload');
                for (var i = 0; i < images.length; ++i) {
                    this.add(images[i]);
                }

                this.lazyScroll();
            },

            specialDelayLoad            : function(div) {
                var images = div.getElementsBySelector('img.delayload');
                for (var i = 0; i < images.length; ++i) {
                    this.add(images[i]);
                }
                var images = div.getElementsBySelector('img.fubarlimitimgsize');
                for (var i = 0; i < images.length; ++i) {
                    this.add(images[i]);
                }

                this.lazyScroll();
            },

            initialize          : function() {               
                // find all images and lazyLoad 'm              
                var images = $$('img.delayload'); 
                for (var i = 0; i < images.length; ++i) {
                    this.add(images[i]);
                }

                this.lazyScroll();
            },

            add                 : function(image) {
                // the browser will start laoding images, so replace as fast as possible
                // then we will worry about position on screen after

                if (image.complete) {
                    //just let load
                    checkExternalImageSize(image);
                } else {
                    // get original source element (for further reference), the filename and the extension.
                    var id = image.identify();
                    var src = image.readAttribute('src');
                    this.elements.set(id,src);

                    // set blank and loading image
                    //image.src = '/imgs/fuloaderSmall.gif';
                    image.src        = '/imgs/bg_black.gif';

                    if (!this.lazyScroller) {
                        // observe the page scroll event
                        Event.observe(window, 'scroll', this.lazyScroll.bind(this));
                        this.lazyScroller = 1;
                    }
                }
             },      

             lazyScroll          : function() {
                var viewportHeight = z_getHeight();
                var viewportScroll = z_getScroll();

                var process = new Array();
                var elekeys = this.elements.keys();
                for(var x = 0; x < elekeys.size(); ++x) {
                    var id = elekeys[x];
                    var image = $(id);
                    if (image) {
                        var position = image.cumulativeOffset();

                        if ((viewportScroll + viewportHeight) >= position[1]) {
                            // load in the new image
                            var src = this.elements.get(id);
                      
                            var newImage    = new Image();
                            newImage.alt = id;
                            Event.observe(newImage, 'load', this.lazyLoaded.bind(this));
                            newImage.writeAttribute('src',src);

                            // image is in cache (IE6 & IE7 ... Firefox can handle the onload well even file was in cache);
                            if (newImage.complete) {
                                image.writeAttribute('src',src);
                                Event.stopObserving(newImage, 'load', this.lazyLoaded);
                                checkExternalImageSize(image);
                            }                
        
                            process.push(id);
                        }
                    } else {
                        //never in viewable are before delete
                        process.push(id);
                    }
                }

                for(var x = 0; x < process.size(); ++x) {
                    this.elements.unset(process[x]);
                }

                if (this.elements.size() == 0) {
                    Event.stopObserving(window, 'scroll', this.lazyScroll);
                    this.lazyScroller = 0;
                }
            },

            lazyLoaded                : function(event) {
                var newImage = $(Event.element(event));
                if (newImage) {
                    var id = newImage.readAttribute('alt');
                    var image = $(id);
                    if (image) {
                        var src = newImage.readAttribute('src');
                        image.writeAttribute('src',src);
                        checkExternalImageSize(image);
                    }
                }
                Event.stopObserving(newImage, 'load', this.lazyLoaded);
            }
        }
        
    /**
     * Hook lazierLoad to the dom:loaded event
     * -------------------------------------------------------------
     */
     
     function initLazierLoad() { myLL = new JS_BRAMUS.lazierLoad(); }
     Event.observe(document, 'dom:loaded', initLazierLoad, false);
        
