/* 
* Preloader for PowerPHP
*
* ver 1.5
*
* History:
* 	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
*/

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 : '',		// image source 
	_alpha : 0.5,		// alpha transparency, from 0 to 1
	_text : 'Updating...',		// text, that showing with loader
	
	/* constructor */
	_init: function(params){
		
		if (typeof params != "undefined"){
			with (params){
				if (typeof mode != "undefined" && mode)
					this._mode = mode;
				if (typeof alpha != "undefined")
					this._alpha = alpha;
			}
			
			if (typeof params.skin_img_dir != "undefined" && params.skin_img_dir)
				this._skin_img_dir = params.skin_img_dir;
			else
				this._skin_img_dir = skin_img_dir;
		}
				
		this._items = {};
		
		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){
	
		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}));
			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 + '" /></span>';
			break;
		case 'standart' :
		default:
			obj.innerHTML = '<div class="loader" id="loader_'+ticket+'"><img src="' + this._src.src + '" /></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'});