var FS_DOM = {

    timer: null,

    callback: function(){},

    init: function() {
        if (arguments.callee.done) return;
        arguments.callee.done = true;

        if (FS_DOM.timer) {
            clearInterval(FS_DOM.timer);
            FS_DOM.timer = null;
		}

        FS_DOM.callback();
    },

    onload: function(callback) {

        if (typeof callback != 'function') {
            callback = function(){};
        }

        FS_DOM.callback = callback;

        // safari
        if (/WebKit/i.test(navigator.userAgent)) {
            FS_DOM.timer = setInterval(function() {
                if (/loaded|complete/.test(document.readyState)) {
                    FS_DOM.init();
                }
            }, 30);

        // Mozilla
        } else if (document.addEventListener && !/Opera/i.test(navigator.userAgent)) {
            document.addEventListener("DOMContentLoaded", FS_DOM.init, false);
        }

        // IE
        /*@cc_on @*/
        /*@if (@_win32)
        document.write("<script id=__ie_onload defer src=javascript:void(0)></script>");
        var script = document.getElementById("__ie_onload");
        script.onreadystatechange = function() {
            if (this.readyState == "complete") {
                FS_DOM.init();
            }
        };
    	/*@end @*/

    	// others
	    window.onload = FS_DOM.init;
    }
};
