no no no!

this looks like mootools 1.11...
first off, in mootools you should use .delay() or .periodical and not setTimeout and setInterval (wrappers that are chained and without string eval and support scoping - eg, function.delay(nnn, this); ). as alien51 pointed out, if you must use setInterval etc, drop the quotes or use an anonymous function if you have to, else a new instance of the js interpreter needs to be launched to figure and evaluate your string, big performance hit and bad practice.
second, don't use any of that anyway

is a bad idea to organise the repetition in such a way...
now, you mention a problem with the domready firing--it won't be as it fires start once just fine ok and does try to run start() through setInterval, which comes as undefined in the global scope.
the problem:
setInterval("start()",100);
start is defined within the anonymous function for domready. move it outside so the instance of the js interpreter that runs the setInterval code can access it. as a whole, there can be problems with defining functions within functions that affect scope as mentioned above, in particular since the setInterval here has none (so, Window is implied). with start not defined there but within the anonymous domready wrapper, it just won't work...
anyway, none of that matters much - you should refactor things slightly for mootools anyway...
PHP Code:
// this can be used by start to cancel repetition (check bottom) later
var myTimer, start = function() {
// define stuff. no self calls to as it creates an infinite loop.
// if you want to stop due to some response coming back or user action
$clear(myTimer);
};
window.addEvent("domready", function() {
start();
// or if you want to wait anyway
(function() {
start();
}).delay(100);
// if you want to run it every 100ms then do this instead:
myTimer = (function() {
start();
}).periodical(100);
});
i would also add, with ajax being asynchronous - it can be delayed etc and returns can badly overlap.depends largely on latency and speed of server etc, 100ms is just way too short a timespan, most GET requests within the visitor's own country finish within 100-150ms unless there's little data and no waiting.
another thing you should consider is the onComplete event on the ajax object, you can call start() from within there, thus insuring requests wont overlap... this will negate the need for the periodical as well but i'd give it a delay like 500ms before calling the parent function again.
eg:
PHP Code:
var runInfinitechecks = function() {
new Ajax("someurl", {
onComplete: function() {
// do something with this.response.text
// repeat after 300ms
(function() {
// runInfiniteChecks(); or .pass() or .attempt()
runInfiniteChecks();
}).delay(300);
}
}).request("action=foo&id=44");
};