/**
 * jQuery.Preload - Multifunctional preloader
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
 * Dual licensed under MIT and GPL.
 * Date: 3/25/2009
 * @author Ariel Flesler
 * @version 1.0.8
 */
;(function($){

	var h=$.preload=function(c,d){
		if(c.split)c=$(c);
		d=$.extend({},h.defaults,d);
		var f=$.map(c,function(a){
			if(!a)return;
			if(a.split)return d.base+a+d.ext;
			var b=a.src||a.href;
			if(typeof d.placeholder=='string'&&a.src)a.src=d.placeholder;
			//alert(myimg.css("margin-top"));
			//myimg.margin({top: 0});
			//this.margin({top: 100});
			//alert(a.src);
			//$(this).css("margin-top", "100px");
			if(b&&d.find)b=b.replace(d.find,d.replace);
			return b||null}),data={loaded:0,failed:0,next:0,done:0,total:f.length};
			
		if(!data.total)return finish();
		var g=$(Array(d.threshold+1).join('<img/>')).load(handler).error(handler).bind('abort',handler).each(fetch);

			
		function handler(e){
			data.element=this;
			data.found=e.type=='load';
			data.image=this.src;
			data.index=this.index;
			var a=data.original=c[this.index];
			data[data.found?'loaded':'failed']++;
			data.done++;

			if(d.enforceCache)h.cache.push($('<img/>').attr('src',data.image)[0]);
			//if(d.enforceCache)h.cache.push($('<img/>').margin({top: 100})[0]);
			//if(d.placeholder&&a.src)myimg.margin({top: 0});
			if(d.placeholder&&a.src)a.src=data.found?data.image:d.notFound||a.src;						
			if(d.onComplete)d.onComplete(data);
			if(data.done<data.total)fetch(0,this);
			else{
			if(g&&g.unbind)g.unbind('load').unbind('error').unbind('abort');
			g=null;
			finish()}
		};

		function fetch(i,a,b){
			if(a.attachEvent&&data.next&&data.next%h.gap==0&&!b){setTimeout(function(){fetch(i,a,1)},0);
			return!1}if(data.next==data.total)return!1;
			a.index=data.next;
			
			//alert(a.src);
			//if(a.src!="")var myimg = $('#images');myimg.css("margin-top", "0px");
		
			a.src=f[data.next++];
			
			//alert(a.src);
			if(d.onRequest){
			data.index=a.index;
			data.element=a;
			data.image=a.src;
			data.original=c[data.next-1];
			d.onRequest(data)}
		};
		
		function finish(){if(d.onFinish)d.onFinish(data);
			//var myimg = $('#images');
			//myimg.css("margin-top", "0px");
		}
	};
	h.gap=14;
	h.cache=[];
	h.defaults={threshold:2,base:'',ext:'',replace:''};
	
	$.fn.preload=function(a){
	h(this,a);
	return this}
		
	//var myImg = $('#images');
	//myImg.margin({top: 100});
})(jQuery);
