// http://net.tutsplus.com/tutorials/javascript-ajax/how-to-create-an-awesome-image-preloader/
$.fn.preloader = function(options){
	var defaults = {
		delay:150,
		preload_parent:"a",
		check_timer:250,
		ondone:function(){ },
		oneachload:function(image){  },
		fadein:150
	};
	// variables declaration and precaching images and parent container
	var options = $.extend(defaults, options),
	root = $(this) , images = root.find("img").css({"visibility":"hidden",opacity:0}) ,  timer ,  counter = 0, i=0 , checkFlag = [] , delaySum = options.delay ,
	init = function(){
		timer = setInterval(function(){
			if(counter>=checkFlag.length){
				clearInterval(timer);
				options.ondone();
				return;
			}
			for(i=0;i<images.length;i++){
				if(images[i].complete==true){
					if(checkFlag[i]==false){
						checkFlag[i] = true;
						options.oneachload(images[i]);
						counter++;
						delaySum = delaySum + options.delay;
					}
					$(images[i]).css("visibility","visible").delay(delaySum).animate({opacity:0.5},options.fadein,
					function(){ $(this).parent().removeClass("preloader"); });
				}
			}
		},options.check_timer) 
	};
	images.each(function(){
		if($(this).parent(options.preload_parent).length==0)
			$(this).wrap("<a class='preloader' />");
		else
			$(this).parent().addClass("preloader");
		checkFlag[i++] = false;
	});
	images = $.makeArray(images);
	var icon = jQuery("<img />",{
		id : 'loadingicon' ,
		src : '_img/loader.gif'
	}).hide().appendTo("body");
	timer = setInterval(function(){
		if(icon[0].complete==true){
			clearInterval(timer);
			init();
			icon.remove();
			return;
		}
	},100);
}

