/** 
* Preloader class for web-T::CMS
*
* @author goshi
* @version 1.6
* @package javascript::share
*
* Changelog:
* 	1.6	06.03.10/goshi	add share dir for loaders, remove from constructor images initialization
* 	1.5	02.07.09/goshi	added 'float-mini' mode
* 	1.4	13.05.09/goshi	added 'mini' mode, add parsing skin_img_dir
* 	1.3	02.05.09/goshi	fixes bug with opacity in IE
* 	1.2	17.04.09/goshi	add custom alpha setting
* 	1.1	07.04.09/goshi	add _src property
*/

/**
* @constructor
*/
function pphpPreLoader(params){
	this._init(params);
}

pphpPreLoader.prototype = {

	_items : null,
	_mode : 'standart',		// standart mode for showing - can be 'standart','float','float-mini' and 'mini' (mini is like a standart, but using mini image)
	_src : null,			// image source 
	_src_mini : null,		// image mini source
	_skin_img_dir : null, 
	_alpha : 0.8,			// alpha transparency, from 0 to 1
	_text : 'Updating...',	// text, that showing with loader
	
	/* constructor */
	_init: function(params){
		
		this.addParams(params);				
		this._items = {};
						
	},
	
	addParams : function (params){
	
		if (typeof params != "undefined"){
			for (var i in params){
				if (typeof this['_'+i] != "undefined")
					this['_'+i] = params[i];
			}
			
			if (typeof this._skin_img_dir == null)
				this._skin_img_dir = skin_img_dir+share_dir;
		}
	
	},
	
	_init_images : function(){
		this._src = new Image();
		this._src_mini = new Image();
		this._src.src = this._skin_img_dir + "loader.gif";
		this._src_mini.src = this._skin_img_dir + "loader_mini.gif";
		
	},
	
	create : function(objid, params){
	
		// if not found images - create them
		if (this._src == null){
			this._init_images();
		}
		
		var tmpdt = new Date;
		// generate uniq id - we need to initialize date object each time for unique id
		var ticket = tmpdt.getTime();
		var tmode = (typeof params != "undefined" && params.mode ? params.mode : this._mode);
		var alpha = (typeof params != "undefined" && params.alpha ? params.alpha : this._alpha);
		var obj = (typeof objid != "undefined" && objid ? $_(objid) : document.body);
		
		this._items[ticket] = {'mode' : tmode, 'owner' : obj};
		
		switch (tmode){
		
		case 'float' :
		case 'float-mini' :
			var el = elem('div', {'class' : (tmode == 'float' ? 'loader-abs' : 'loader-mini-abs'), 'id' : 'loader_'+ticket});
			
			var el_inn = elem('div', {});
			el_inn.style.opacity = el.style["'-khtml-opacity"] = el.style["-moz-opacity"] = alpha;
			if (/MSIE/.test(navigator.userAgent)) {
				el_inn.style.filter = alpha === '' ? '' : "alpha(opacity=" + (alpha * 100) + ")";
				if (!el_inn.currentStyle || !el_inn.currentStyle.hasLayout)
					el_inn.style.display = 'inline-block';
			}
			el.appendChild(el_inn);
			el.appendChild(elem('img', {'src' : this._src.src, 'class' : 'ldr'}));
			if (tmode == 'float-mini'){
				el.appendChild(elem('span', false, false, this._text));	
			}
			
			obj.appendChild(el);
			break;
					
		case 'mini' :
			obj.innerHTML = '<span class="loader" id="loader_'+ticket+'"><img src="' + this._src_mini.src + '" class="ldr" /></span>';
			break;
		case 'standart' :
		default:
			obj.innerHTML = '<div class="loader" id="loader_'+ticket+'"><img src="' + this._src.src + '" class="ldr" /></div>';
			break;
		}
		
		return ticket;
	
	},
	
	destroy : function(ticket){
	
		if (this._items[ticket]){
			switch (this._items[ticket].mode){
			case 'float':
			case 'float-mini':
				this._items[ticket].owner.removeChild($_('loader_'+ticket)); break;
			case 'standart':
			default: 
				this._items[ticket].owner.innerHTML = '';
			}
			delete this._items[ticket];
		}
	
	}	

}

// adding preloader to portal
portal.loader = new pphpPreLoader({'mode' : 'standart'});
