var preloading =
{
	loadBar: "",
	preloader: "",
	items: new Array(),
	doneStatus: 0,
	doneNow: 0,
	selectorPreload: "body",
	ieLoadFixTime: 2000,
	ieTimeout: "",

	init: function()
	{
		if (navigator.userAgent.match(/MSIE (\d+(?:\.\d+)+(?:b\d*)?)/) == "MSIE 6.0,6.0")
		{
			/* break if IE6 */
			return false;
		}

		if (preloading.selectorPreload == "body")
		{
			preloading.spawnLoader();
			preloading.getImages(preloading.selectorPreload);
			preloading.createPreloading();
		}
		else
		{
			$(document).ready(function()
			{
				preloading.spawnLoader();
				preloading.getImages(preloading.selectorPreload);
				preloading.createPreloading();
			});
		}

		/* help IE drown if it is trying to die :) */

		preloading.ieTimeout = setTimeout("preloading.ieLoadFix()", preloading.ieLoadFixTime);
	},

	ieLoadFix: function()
	{
		var ie = navigator.userAgent.match(/MSIE (\d+(?:\.\d+)+(?:b\d*)?)/);

		if (ie[0].match("MSIE"))
		{
			while ((100 / preloading.doneStatus) * preloading.doneNow < 100)
			{
				preloading.imgCallback();
			}
		}
	},

	imgCallback: function()
	{
		preloading.doneNow++;
		preloading.animateLoader();
	},

	getImages: function(selector)
	{
		var everything = $(selector).find("*:not(script)").each(function()
		{
			var url = "";

			if ($(this).css("background-image") != "none")
			{
				var url = $(this).css("background-image");
			}
			else if (typeof($(this).attr("src")) != "undefined" && $(this).attr("tagName").toLowerCase() == "img")
			{
				var url = $(this).attr("src");
			}

			url = url.replace("url(\"", "");
			url = url.replace("url(", "");
			url = url.replace("\")", "");
			url = url.replace(")", "");

			if (url.length > 0)
			{
				preloading.items.push(url);
			}
		});
	},

	createPreloading: function()
	{
		preloading.preloader = $("<div></div>").appendTo(preloading.selectorPreload);
		$(preloading.preloader).css
		({
			height: 	"0px",
			width:		"0px",
			overflow:	"hidden"
		});

		var length = preloading.items.length; 
		preloading.doneStatus = length;

		for (var i = 0; i < length; i++)
		{
			var imgLoad = $("<img></img>");
			$(imgLoad).attr("src", preloading.items[i]);
			$(imgLoad).unbind("load");
			$(imgLoad).bind("load", function()
			{
				preloading.imgCallback();
			});
			$(imgLoad).appendTo($(preloading.preloader));
		}
	},

	spawnLoader: function()
	{
		if (preloading.selectorPreload == "body")
		{
			var height = $(window).height();
			var width = $(window).width();
			var position = "fixed";
		}
		else
		{
			var height = $(preloading.selectorPreload).outerHeight();
			var width = $(preloading.selectorPreload).outerWidth();
			var position = "absolute";
		}

		var left = $(preloading.selectorPreload).offset()['left'];
		var top = $(preloading.selectorPreload).offset()['top'];

		preloading.loadBar = $("<div></div>").appendTo($(preloading.selectorPreload));
		$(preloading.loadBar).addClass("pre-loader");

		$(preloading.loadBar).css
		({
			position: position,
			top: "50%",
			width: "0%"
		});
	},

	animateLoader: function()
	{
		var perc = (100 / preloading.doneStatus) * preloading.doneNow;
		if (perc > 99)
		{
			$(preloading.loadBar).stop().animate
			({
				width: perc + "%"
			}, 500, "linear", function() {
				preloading.doneLoad();
			});
		}
		else
		{
			$(preloading.loadBar).stop().animate
			({
				width: perc + "%"
			}, 500, "linear", function() { });
		}
	},

	doneLoad: function()
	{
		clearTimeout(preloading.ieTimeout);

		if (preloading.selectorPreload == "body")
		{
			var height = $(window).height();
		}
		else
		{
			var height = $(preloading.selectorPreload).outerHeight();
		}
	
		$(preloading.loadBar).animate
		({
			height: height + "px",
			top: 0
		}, 0, "linear", function() {
			$(preloading.loadBar).fadeOut(0);
			$(preloading.preloader).remove();
		});
	}
}
