+
+ id = ads.pop();
+ node = slots[id];
+
+ // node.append(id + ": " + node.attr('class'));
+
+ var result;
+ var script;
+ var src;
+ var inline;
+
+ while ((result = /<script/i.exec(OA_output[id])) != null) {
+ node.append(OA_output[id].slice(0,result.index));
+ /** Strip all text before "<script" from OA_output[id] */
+ OA_output[id] = OA_output[id].slice(result.index,OA_output[id].length);
+ result = /^([^>]*)>([\s\S]*?)<\\?\/script>/i.exec(OA_output[id]);
+ if (result == null) {
+ /** Invalid syntax in delivered banner-code: ignoring the rest of this banner-code! */
+ // alert(OA_output[id]);
+ OA_output[id] = "";
+ render_ad();
+ return;
+ }
+ /** Remember iinline-code, if present */
+ src = result[1]
+ inline = result[2];
+ /** Strip all text up to and including "</script>" from OA_output[id] */
+ OA_output[id] = OA_output[id].slice(result[0].length,OA_output[id].length);
+ result = /src\s*=\s*['"]([^'"]*)['"]/i.exec(src);
+ if (result == null) {
+ /** script-tag with inline-code: execute inline-code! */
+ eval(inline);
+ }
+ else {
+ /** script-tag with src-URL! */
+ script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.async = false;
+ script.defer = false;
+ script.src = result[1];
+ script.onload = render_ad;
+ /** The banner might not be rendered fully, or include more calls to document.write(). */
+ ads.push(id);
+ /** Load the script and halt all work until the script is loaded and executed... */
+ body.appendChild(script); // << The onload-event is only fired when appendChild is used!
+ return;
+ }
+ }
+ node.append(OA_output[id]);
+ OA_output[id] = "";
+
+ /** This statement will only reached, when no script-element was rendered! */
+ render_ad();
+
+ }
+
+ function render() {
+
+ if (id == undefined)
+ return;
+
+ var str = "";
+ for (var i=0; i < arguments.length; i++)
+ str += arguments[i];
+
+ OA_output[id] = str + OA_output[id];
+