var BF_UniversalDOM=function(){this.UNIVERSAL_DOM_CLASS="bf_dom";this.UNIVERSAL_DOM_ATTR="rel:bf_bucket";this.UNIVERSAL_DOM_DATA_ATTR="rel:bf_bucket_data";this.UNIVERSAL_DOM_BUCKET_DATA_ATTR="rel:bf_data";this._bucket={};this._element_assignment_lookup={};this.init=function(){universal_dom._bucket={};$$("."+universal_dom.UNIVERSAL_DOM_CLASS).each(function(el){universal_dom._assign(el)})};this.get_bucket_elements=function(bucket){if(typeof universal_dom._bucket[bucket]=="undefined"){return[]}var elements=[];universal_dom._bucket[bucket].elements.each(function(obj){elements.push(obj.element)});return elements};this.get_bucket_elements_with_data=function(bucket,data){if(typeof universal_dom._bucket[bucket]=="undefined"){return[]}var elements=[];universal_dom._bucket[bucket].elements.each(function(el){var matches=true;for(var each in data){if(typeof el.data[each]=="undefined"||el.data[each]!=data[each]){matches=false}}if(matches){elements.push(el.element)}});return elements};this.class_regex=new RegExp(this.UNIVERSAL_DOM_CLASS);this.update=function(snippet){var s=$(snippet);if(s){var elements=s.select('[class~="'+universal_dom.UNIVERSAL_DOM_CLASS+'"]');if(elements.length==0&&s.innerHTML.match(universal_dom.class_regex)){elements=new Array();universal_dom.extract_dom_class_elements(snippet,elements)}elements.each(function(el){universal_dom._assign(el)})}};this.extract_dom_class_elements=function(snippet,list){if(snippet.className&&snippet.className.match(universal_dom.class_regex)){list.push(snippet)}for(var i=0;i(e-bf_prog_load.lookahead_pixels)){if(bf_prog_load.DEBUG){g.style.border="solid red 1px"}if(!a.progload2){g.src=(f.indexOf("http://")==0)?f:BF_STATIC.image_root+f}else{a.load_image(g,((f.indexOf("http://")==0)?f:BF_STATIC.image_root+f))}}else{var h={el:g,position:e,src:f};bf_prog_load.images.set(""+bf_prog_load.index,h);bf_prog_load.index++}});if((Prototype.Browser.IE&&parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5))==6)||Prototype.Browser.Opera||!!window.fb_app){bf_prog_load.bad_browser=1;setTimeout(function(){bf_prog_load.scrolled("all")},500)}else{Event.observe(window,"scroll",function(f){bf_prog_load.scrolled()})}}catch(d){console.error(d)}universal_dom.assign_handler({bucket:"add_to_prog_load",handler:bf_prog_load.add});if(a.progload2){a.autoload_images()}};this.autoload_images=function(){a.autoload=true;if(a.DEBUG){console.info("Starting image autoload")}var b;b=setInterval(function(){if(!bf_prog_load.images.size()){if(a.DEBUG){console.info("End image autoload")}a.autoload=false;clearInterval(b)}else{bf_prog_load.images.each(function(d){var c=d.value.el.getAttribute("rel:bf_image_src");if(c==d.value.el.src){return}if(a.DEBUG){d.value.el.style.border="solid orange 1px"}a.load_image(d.value.el,((d.value.src.indexOf("http://")==0)?d.value.src:BF_STATIC.image_root+d.value.src));bf_prog_load.images.unset(d.key);throw $break})}},a.autoload_interval)};this.image_watcher=function(c,e,d,b){this.maxRetries=3;this.retry=0;this.retryTimeout=[10000,20000,30000];this.el=c;this.src=e;this.success=d;this.error=b;this.load=function(){if(a.DEBUG){console.log((this.retry==0?"First":("Try #"+this.retry))+" load "+this.src)}this.image=new Image();this.image.onload=function(f){return function(){f.onsuccess.call(f)}}(this);this.image.onabort=function(f){return function(){f.timeout.call(f)}}(this);this.image.onerror=function(f){return function(){f.timeout.call(f)}}(this);this.image.src=this.src};this.onsuccess=function(){this.image=null;this.success(this)};this.timeout=function(){this.image=null;if(this.retry>=this.maxRetries){this.error(this);return}if(a.DEBUG){console.log("Waiting "+this.retryTimeout[this.retry]+" ms on "+this.src)}setTimeout(function(f){return function(){f.load.call(f)}}(this),this.retryTimeout[this.retry]);this.retry++}};this.load_image=function(b,c){new this.image_watcher(b,c,function(d){if(a.DEBUG){console.info("Image %s was loaded successfully.",d.src)}b.src=c},function(d){if(a.DEBUG){console.error("Image %s wasn't loaded.",d.src)}b.src=BF_STATIC.image_root+"/static/images/public/backgrounds/trans.gif"}).load()};this.scrolled=function(b){try{bf_prog_load.images.each(function(f){var e=document.viewport.getScrollOffsets();var d=e[1];d=document.viewport.getHeight()+d;if(d>(f.value.position-bf_prog_load.lookahead_pixels)||b){if(bf_prog_load.DEBUG){console.log("SCROLL viewport: %s image offset: %s image: %s",d,f.value.position,f.value.src);if(b){f.value.el.style.border="solid green 1px"}else{f.value.el.style.border="solid blue 1px"}}if(!a.progload2){f.value.el.src=(f.value.src.indexOf("http://")==0)?f.value.src:BF_STATIC.image_root+f.value.src}else{a.load_image(f.value.el,((f.value.src.indexOf("http://")==0)?f.value.src:BF_STATIC.image_root+f.value.src))}bf_prog_load.images.unset(f.key)}})}catch(c){console.error(c)}};this.add=function(f){var d=f.getAttribute("rel:bf_image_src");var b=f.cumulativeOffset()[1];var g=document.viewport.getScrollOffsets();var c=g[1];c=document.viewport.getHeight()+c;if(c>(b-bf_prog_load.lookahead_pixels)||bf_prog_load.bad_browser){if(bf_prog_load.DEBUG){f.style.border="solid yellow 1px";console.log("SHOW (add). offset: %s image: %s lookahead: %s pixels",b,d,bf_prog_load.lookahead_pixels)}if(!a.progload2){f.src=(d.indexOf("http://")==0)?d:BF_STATIC.image_root+d}else{a.load_image(f,((d.indexOf("http://")==0)?d:BF_STATIC.image_root+d))}}else{var i={el:f,position:b,src:d};if(bf_prog_load.DEBUG){console.log("ADDING image. offset: %s image: %s lookahead: %s pixels",b,d,bf_prog_load.lookahead_pixels)}bf_prog_load.images.set(""+bf_prog_load.index,i);bf_prog_load.index++;if(a.progload2){if(!a.autoload){a.autoload_images()}}}var e=f.getAttribute("rel:bf_bucket");var h=e.replace("add_to_prog_load","xx");f.setAttribute("rel:bf_bucket",h)}};var bf_prog_load=new BF_ProgLoad_Images();BuzzLoader.register(function(){bf_prog_load.init()},2);