/* PreLoader class. Copyright by ADenis (adeniss@ukr.net) */

function PreLoader(){
	
	this.className = "preloader";
	
	var loaders = new Array();
	
	this.getLoadingObj = function() {
		var loadingObj = document.createElement("div");
		loadingObj.className = this.className;
		loadingObj.style.zIndex = 300;
		loadingObj.style.position = "absolute";
		loadingObj.style.display = "none";
		return loadingObj;
	}
	
	this.addLoader = function(target, message){
		this.removeLoader(target);
		
		var clone = this.getLoadingObj();
		var targetWidth = target.offsetWidth;
		var targetHeight = target.offsetHeight;

		if (message) {
			message = "<span>" + message + "</span>"
			clone.innerHTML = message;
		}

		clone.style.left = getX(target) + "px";
		clone.style.top = getY(target) + "px";
		clone.style.width = targetWidth + "px";
		clone.style.height = targetHeight + "px";
		
		document.body.appendChild(clone);
		
		clone.style.display = "block";
		
		var preLoader = new PreLoaderElement(target, clone);
		
		loaders.push(preLoader);
	}
	
	this.removeLoader = function(target){
		var index = this.getLoaderIndex(target);
		if(index > -1){
			var loader = loaders[index];
			var clone = loader.clone;		
			
			if(clone)
			if(clone.parentNode){		
				clone.parentNode.removeChild(clone);
				delete clone;
			}
				
			loaders.splice(index, 1);
		}
	}
	
	this.getLoaderIndex = function(target){
		for(var i in loaders){
			if(loaders[i].target == target)
				return i;
		}
		
		return -1
	}
	
	this.add = function(target, message){
		this.addLoader(target, message);
	}

	this.remove = function(target){
		this.removeLoader(target);
	}
	
	this.removeAll = function() {
		for(var i in loaders){
			this.removeLoader(loaders[i].target);
		}
	}	
}

function PreLoaderElement(target, clone){
	this.target = target;	
	this.clone = clone;
}

var preLoader = null;

function getPreLoader() {
	if (!preLoader) {
		preLoader = new PreLoader();
	}
	
	return preLoader;
}