/*
 * image loading 
 *
 * Copyright (c) 2008 hehuihai	(ocean)
 *
 * version 0.2
 *
 * Date: 2008-06-03 16:42:05
 *
 */
 
(function($){
	//img loading
	$.fn.imgLoading=function(){
		var params=arguments[0] || {};
		params=$.extend({
			version:'1',					//调用版本 1 / 2
			src:'',
			loadingImg:'',
			func_loaded:function(self){},		// 图片加载完成
			func_completed:function(self){},		// 图片加载并完全显示完成
			error:function(selfObj){}
		},params);
		
		var self=this;
		
		// params.version
		if(params.version=='1'){
			
			var wrapTagObj=$('<div></div>')
			.css({'width':self.width(),'height':self.height(),'background':'url('+params.loadingImg+') no-repeat center center'})
			.appendTo(self);
			//----
			var img = new Image();
			$(img).load(function(){
				$(this).css('display','none'); 						// .hide() doesn't work in Safari when the element isn't on the DOM already
				wrapTagObj.css({'background':'','opacity':0}).append(this);
				wrapTagObj.css({'background':'url('+params.src+') no-repeat center center'});
				wrapTagObj.animate({'opacity':1},'normal');
				params.func_loaded(self);
			}).error(function(){
				params.error(self);
			}).attr('src',params.src);
			
		}else if(params.version=='2'){
			// 不选择div, 生成一个图片
			self.css({'background-image':'url('+params.loadingImg+')'});
			//----
			var img = new Image();
			$(img).load(function(){
				var imgObj=$(this).css('display','none');
				self.css({'background-image':'','opacity':0}).append(this);
				self.css({'background-image':'url('+params.src+')'});
				self.animate({'opacity':1},'normal',function(){
					self.css({'background-image':''});
					imgObj.css('display','');
					params.func_completed(self);
				});
				params.func_loaded(self);
			}).error(function(){
				params.error(self);
			}).attr('src',params.src);
			
		}
		
		return self;
	}
	
	//---------------------
	//file loading
	$.fn.fileLoading=function(){
		var params=arguments[0] || {};
		params=$.extend({
			url:'',
			data:{},
			async:true,
			loadingImg:'',
			isAddWrapDiv:true,
			func_start:function(selfObj,wrapTagObj){},
			func_loaded:function(selfObj){},
			error:function(selfObj){}
		},params);
		
		var self=this;
		
		function bind_Fun(){
			var wrapTagObj=$('<div></div>');
			if(params.isAddWrapDiv){
				wrapTagObj.css({'width':self.width(),'height':self.height(),'background':'url('+params.loadingImg+') no-repeat center center'});
			}
			//.hide()
			wrapTagObj.appendTo(self);
			//----
			params.func_start(self,wrapTagObj);
			
			$.ajax({
				type: "POST",
				url: params.url,
				data:params.data,
				timeout: 5000,
				async:params.async,
				dataType: "html",
				error: function(){
					params.error(self);
				},
				success: function(reData){
					wrapTagObj
					//.css({'background':'','opacity':0})
					.css({'background':'','display':'none'})
					.html(reData)
					//.animate({'opacity':1},'normal');
					.fadeIn('fast');
					params.func_loaded(self);
				}
			});
		}
		bind_Fun();
		self.bind('reload',function(){
			self.html('');
			bind_Fun();
		});
		
		return self;
	}
	
})(jQuery);
