// Overwrite prototype of document.write()
var obj_current_zone = false;
var str_current_buffer = '';
var antiloop = 0;
document.write = function(str){
	if(typeof(obj_current_zone)!='undefined'){
		str_current_buffer = str_current_buffer + str;
		
		// innerHTML might encode to html entities, so constantly revert it
		str_current_buffer = str_current_buffer.replace('&lt;', '<');
		str_current_buffer = str_current_buffer.replace('&gt;', '>');
		
		if(str_current_buffer.indexOf('/script>')!=-1 || str_current_buffer.indexOf('/SCRIPT>')!=-1){
			//alert('Buffer contains a complete script tag to execute: ' + "\n" + str_current_buffer);
			if(antiloop < 5){
				antiloop++;
				
				// Clean old script tags
				//alert('Before clean innerJS: ' + "\n" + obj_current_zone.innerHTML);
				clean_innerjs(obj_current_zone);
				//alert('After clean innerJS: ' + "\n" + obj_current_zone.innerHTML);
				
				obj_current_zone.innerHTML = obj_current_zone.innerHTML + str_current_buffer;
				str_current_buffer = '';
				//alert('Executing: ' + obj_current_zone.innerHTML);
				exec_innerjs(obj_current_zone);
			}
		}
		else if(is_thread_done == true){
			if((str_current_buffer.indexOf('<script')!=-1 && str_current_buffer.indexOf('/script>')==-1) || str_current_buffer.indexOf('<SCRIPT')!=-1 && str_current_buffer.indexOf('/SCRIPT>')==-1){
				// Buffer contains a script tag that is not
				// yet complete, so do not concat
				//alert('Buffer contains a script tag that is not yet complete, so do not concat: ' + "\n" + str_current_buffer);
			}
			else{
				// Clean old script tags
				//alert('Before clean innerJS: ' + "\n" + obj_current_zone.innerHTML);
				clean_innerjs(obj_current_zone);
				//alert('After clean innerJS: ' + "\n" + obj_current_zone.innerHTML);
				
				//alert('Appending: ' + "\n" + str_current_buffer + "\n" + 'To: ' + "\n\n" + obj_current_zone.innerHTML);
				obj_current_zone.innerHTML = obj_current_zone.innerHTML + str_current_buffer;
				str_current_buffer = '';
				//alert('current_ad_index: ' + current_ad_index + "\n" + 'is_ad_done: ' + is_ad_done + "\n" + 'current innerHTML: ' + "\n" + "\n" + obj_current_zone.innerHTML);
				is_thread_done = false;
				exec_innerjs(obj_current_zone);
				is_ad_done = true;
			}
		}
	}
}

function clean_innerjs(obj){
	if(typeof(obj)!='undefined'){
		var tmp_innerHTML = obj.innerHTML;
		var antifreeze = 0;
		
		// innerHTML might encode to html entities, so constantly revert it
		tmp_innerHTML = tmp_innerHTML.replace('&lt;', '<');
		tmp_innerHTML = tmp_innerHTML.replace('&gt;', '>');
		
		// Firefox
		while(tmp_innerHTML.indexOf('<script')!=-1 && antifreeze < 5){
			antifreeze++;
			//alert('Stripping: ' + "\n" + "\n" + tmp_innerHTML.substring(tmp_innerHTML.indexOf('<script'), tmp_innerHTML.indexOf('/script>')+8));
			tmp_innerHTML = tmp_innerHTML.replace(tmp_innerHTML.substring(tmp_innerHTML.indexOf('<script'), tmp_innerHTML.indexOf('/script>')+8), '');
		}
		// IE
		while(tmp_innerHTML.indexOf('<SCRIPT')!=-1 && antifreeze < 5){
			antifreeze++;
			//alert('Stripping: ' + "\n" + "\n" + tmp_innerHTML.substring(tmp_innerHTML.indexOf('<SCRIPT'), tmp_innerHTML.indexOf('/SCRIPT>')+8));
			tmp_innerHTML = tmp_innerHTML.replace(tmp_innerHTML.substring(tmp_innerHTML.indexOf('<SCRIPT'), tmp_innerHTML.indexOf('/SCRIPT>')+8), '');
		}
		
		obj.innerHTML = tmp_innerHTML;
	}
}

var is_thread_done = true;
var is_ad_done = true;
function exec_innerjs(obj){
	if(typeof(obj)!='undefined'){
		var scripts = obj.getElementsByTagName('script');
		if(scripts != false){
			is_ad_done = false;
			is_thread_done = false;
			//alert("Executing innerHTML: " + obj.innerHTML);
			for(var i=0;i<scripts.length;i++){
				var scriptclone = document.createElement('script');
				if(scripts[i].attributes.length > 0){
					for(var j in scripts[i].attributes){
						if(typeof(scripts[i].attributes[j]) != 'undefined' && typeof(scripts[i].attributes[j].nodeName) != 'undefined' && scripts[i].attributes[j].nodeValue != null && scripts[i].attributes[j].nodeValue != ''){
							scriptclone.setAttribute(scripts[i].attributes[j].nodeName,scripts[i].attributes[j].nodeValue);
						}
					}
				}
				scriptclone.text = scripts[i].text;
				if(navigator.userAgent.indexOf("Opera")==-1){
					scripts[i].parentNode.replaceChild(scriptclone,scripts[i]);
				}
			}
			//alert("Done executing... innerHTML: " + obj.innerHTML);
			is_thread_done = true;
		}
		else{
			//alert("No script to execute in: " + obj.innerHTML);
		}
	}
}

var current_ad_index = -1;
var timeout_count = 0; 
function cron_ads_queue() {
	if(current_ad_index < arr_ad_zones.length-1){
		if(is_ad_done && is_thread_done){
			timeout_count = 0;
			current_ad_index++;
			
			antiloop = 0;
			is_ad_done = false;
			str_current_buffer = '';
			
			//alert('Processing: '+(current_ad_index+1)+'/'+arr_ad_zones.length);
			obj_current_zone = document.getElementById(arr_ad_zones[current_ad_index]);
			obj_current_zone.innerHTML = '<input type="hidden"/>' + Base64.decode(arr_ad_contents[current_ad_index]);
			exec_innerjs(obj_current_zone);
		}
		
		// Ad timeout effect
		if(timeout_count > 20){
			timeout_count = 0;
			is_ad_done = true;
			is_thread_done = true;
			//alert("La pub #" + current_ad_index + " (" + arr_ad_zones[current_ad_index] + ") semble rusher... Voici les détails:" + "\n" + "innerHTML actuel: " + "\n" + obj_current_zone.innerHTML);
		}
		timeout_count++;
		
		// Cron effect
		setTimeout("cron_ads_queue()", 100);
	}
}
if(typeof(arr_ad_zones)!="undefined"){
	cron_ads_queue();
}