|
|
Line 1: |
Line 1: |
| <html> | | <html> |
| <script type="text/javascript"> | | <script type="text/javascript"> |
- | (function(){ | + | (function(){var DomReady=window.DomReady={};var userAgent=navigator.userAgent.toLowerCase();var browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:eval('(/msie/.test(userAgent))\x26\x26(!/opera/.test( userAgent ))'),mozilla:eval('(/mozilla/.test(userAgent))\x26\x26(!/(compatible|webkit)/.test(userAgent))')};var readyBound=false;var isReady=false;var readyList=[];function domReady(){if(!isReady){isReady=true;if(readyList){for(var fn=0;fn<readyList.length;fn++){readyList[fn].call(window,[]);}readyList=[];}}}function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){if(oldonload){oldonload();}func();};}}function bindReady(){if(readyBound){return;}readyBound=true;if(eval('document.addEventListener\x26\x26!browser.opera')){document.addEventListener("DOMContentLoaded",domReady,false);}if(eval('browser.msie\x26\x26window == top')){(function(){if(isReady){return;}try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}domReady();})();}if(browser.opera){document.addEventListener("DOMContentLoaded",function(){if(isReady){return;}for(var i=0;i<document.styleSheets.length;i++){if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}}domReady();},false);}if(browser.safari){var numStyles;(function(){if(isReady){return;}if(eval('document.readyState != "loaded"\x26\x26document.readyState != "complete"')){setTimeout(arguments.callee,0);return;}if(numStyles===undefined){var links=document.getElementsByTagName("link");for(var i=0;i<links.length;i++){if(links[i].getAttribute('rel')=='stylesheet'){numStyles++;}}var styles=document.getElementsByTagName("style");numStyles+=styles.length;}if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}domReady();})();}addLoadEvent(domReady);}DomReady.ready=function(fn,args){bindReady();if(isReady){fn.call(window,[]);}else{readyList.push(function(){return fn.call(window,[]);});}};bindReady();})(); |
- | | + | |
- | var DomReady = window.DomReady = {};
| + | |
- | | + | |
- | // Everything that has to do with properly supporting our document ready event. Brought over from the most awesome jQuery.
| + | |
- | | + | |
- | var userAgent = navigator.userAgent.toLowerCase();
| + | |
- | | + | |
- | // Figure out what browser is being used
| + | |
- | var browser = {
| + | |
- | version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1],
| + | |
- | safari: /webkit/.test(userAgent),
| + | |
- | opera: /opera/.test(userAgent),
| + | |
- | msie: eval('(/msie/.test(userAgent))\x26\x26(!/opera/.test( userAgent ))'),
| + | |
- | mozilla: eval('(/mozilla/.test(userAgent))\x26\x26(!/(compatible|webkit)/.test(userAgent))')
| + | |
- | };
| + | |
- | | + | |
- | var readyBound = false;
| + | |
- | var isReady = false;
| + | |
- | var readyList = [];
| + | |
- | | + | |
- | // Handle when the DOM is ready
| + | |
- | function domReady() {
| + | |
- | // Make sure that the DOM is not already loaded
| + | |
- | if(!isReady) {
| + | |
- | // Remember that the DOM is ready
| + | |
- | isReady = true;
| + | |
- |
| + | |
- | if(readyList) {
| + | |
- | for(var fn = 0; fn < readyList.length; fn++) {
| + | |
- | readyList[fn].call(window, []);
| + | |
- | }
| + | |
- |
| + | |
- | readyList = [];
| + | |
- | }
| + | |
- | }
| + | |
- | }
| + | |
- | | + | |
- | // From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
| + | |
- | function addLoadEvent(func) {
| + | |
- | var oldonload = window.onload;
| + | |
- | if (typeof window.onload != 'function') {
| + | |
- | window.onload = func;
| + | |
- | } else {
| + | |
- | window.onload = function() {
| + | |
- | if (oldonload) {
| + | |
- | oldonload();
| + | |
- | }
| + | |
- | func();
| + | |
- | };
| + | |
- | }
| + | |
- | }
| + | |
- | | + | |
- | // does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
| + | |
- | function bindReady() {
| + | |
- | if(readyBound) {
| + | |
- | return;
| + | |
- | }
| + | |
- |
| + | |
- | readyBound = true;
| + | |
- | | + | |
- | // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
| + | |
- | if (eval('document.addEventListener\x26\x26!browser.opera')) {
| + | |
- | // Use the handy event callback
| + | |
- | document.addEventListener("DOMContentLoaded", domReady, false);
| + | |
- | }
| + | |
- | | + | |
- | // If IE is used and is not in a frame
| + | |
- | // Continually check to see if the document is ready
| + | |
- | if (eval('browser.msie\x26\x26window == top')) {(function(){
| + | |
- | if (isReady){return;}
| + | |
- | try {
| + | |
- | // If IE is used, use the trick by Diego Perini
| + | |
- | // http://javascript.nwbox.com/IEContentLoaded/
| + | |
- | document.documentElement.doScroll("left");
| + | |
- | } catch(error) {
| + | |
- | setTimeout(arguments.callee, 0);
| + | |
- | return;
| + | |
- | }
| + | |
- | // and execute any waiting functions
| + | |
- | domReady();
| + | |
- | })();}
| + | |
- | | + | |
- | if(browser.opera) {
| + | |
- | document.addEventListener( "DOMContentLoaded", function () {
| + | |
- | if (isReady) {return;}
| + | |
- | for (var i = 0; i < document.styleSheets.length; i++){
| + | |
- | if (document.styleSheets[i].disabled) {
| + | |
- | setTimeout( arguments.callee, 0 );
| + | |
- | return;
| + | |
- | }
| + | |
- | }
| + | |
- | // and execute any waiting functions
| + | |
- | domReady();
| + | |
- | }, false);
| + | |
- | }
| + | |
- | | + | |
- | if(browser.safari) {
| + | |
- | var numStyles;
| + | |
- | (function(){
| + | |
- | if (isReady) {return;}
| + | |
- | if (eval('document.readyState != "loaded"\x26\x26document.readyState != "complete"')) {
| + | |
- | setTimeout( arguments.callee, 0 );
| + | |
- | return;
| + | |
- | }
| + | |
- | if (numStyles === undefined) {
| + | |
- | var links = document.getElementsByTagName("link");
| + | |
- | for (var i=0; i < links.length; i++) {
| + | |
- | if(links[i].getAttribute('rel') == 'stylesheet') {
| + | |
- | numStyles++;
| + | |
- | }
| + | |
- | }
| + | |
- | var styles = document.getElementsByTagName("style");
| + | |
- | numStyles += styles.length;
| + | |
- | }
| + | |
- | if (document.styleSheets.length != numStyles) {
| + | |
- | setTimeout( arguments.callee, 0 );
| + | |
- | return;
| + | |
- | }
| + | |
- |
| + | |
- | // and execute any waiting functions
| + | |
- | domReady();
| + | |
- | })();
| + | |
- | }
| + | |
- | | + | |
- | // A fallback to window.onload, that will always work
| + | |
- | addLoadEvent(domReady);
| + | |
- | }
| + | |
- | | + | |
- | // This is the public function that people can use to hook up ready.
| + | |
- | DomReady.ready = function(fn, args) {
| + | |
- | // Attach the listeners
| + | |
- | bindReady();
| + | |
- |
| + | |
- | // If the DOM is already ready
| + | |
- | if (isReady) {
| + | |
- | // Execute the function immediately
| + | |
- | fn.call(window, []);
| + | |
- | } else {
| + | |
- | // Add the function to the wait list
| + | |
- | readyList.push( function() { return fn.call(window, []); } );
| + | |
- | }
| + | |
- | };
| + | |
- |
| + | |
- | bindReady();
| + | |
- |
| + | |
- | })(); | + | |
| DomReady.ready(function() { | | DomReady.ready(function() { |
| if (Math.max(document.documentElement.scrollTop, document.body.scrollTop) === 0) { | | if (Math.max(document.documentElement.scrollTop, document.body.scrollTop) === 0) { |