var thisNamespace = 'modules.Advertisement.Slots.Setup';
var thisPackage   = {
	
	loadedBanners: {},

	
	initialize: function() {
		var module = modules.Advertisement.Slots.Setup;
		
		// Give the banners some time to load
		var tryCount = 0;
		setTimeout(function() {
			// The ready indicator element will be available as soon as
			// all banners are loaded (because it comes after them)
			if(readyIndicator = $('temporary-aads-ready-indicator')) {
				// Remove the ready indicator, because we don't
				// need it any further
				readyIndicator.remove();
				
				// Go through each loaded banner
				$$('#temporary-aads-container > div').each(function(divElm) {
					// Get the name of the target element for this banner
					var targetName = divElm.id.substr('temporary-'.length);
					// Move this banner to its final target and mark it as loaded
					if(module.loadBanner(divElm, targetName)) {
						module.loadedBanners[targetName] = true;
						Logger.info('loaded baaaner ' + targetName);
					}
				});
			// Give up after 80 tries (20 seconds)
			// Raised as our server responded sometimes too slowly.
			} else if(tryCount < 80) {
				++tryCount;
				setTimeout(arguments.callee, 100);
			}
		}, 250);
	},
	
	
	loadBanner: function(sourceElement, targetElement) {
		var sourceElement   = $(sourceElement);
		var targetElement   = $(targetElement);
		
		if(sourceElement && targetElement) {
			var targetElementId = targetElement.id;
			
			// Check whether the source element has any content
			// that is not only <script> elements (because otherwise
			// the banner was probably blocked by an ad blocker)
			var nonScriptElementsCount = sourceElement.select('*:not(script)').length;
			
			if(nonScriptElementsCount > 0) {
				// Cut out the temporary element and replace
				// the target element with it
				var copyOfSourceElement = sourceElement.remove();
				copyOfSourceElement.id = targetElementId;
				targetElement.replace(copyOfSourceElement);
				copyOfSourceElement.addClassName('loaded');
				
				return true;
			}
		}
		
		return false;
	}
	
};
addPackage(thisNamespace, thisPackage, true);