//Archetypon Loader Type Two - www.archetypon.net 
var jQ=jQuery.noConflict();
var QueryLoader = {
	overlay: "",
	loadBar: "",
	preloader: "",
	items: new Array(),
	doneStatus: 0,
	doneNow: 0,
	selectorPreload: "body",
	ieLoadFixTime: 1000,
	ieTimeout: "",
		
	init: function() {
		if (navigator.userAgent.match(/MSIE (\d+(?:\.\d+)+(?:b\d*)?)/) == "MSIE 6.0,6.0") {
			//break if IE6			
			return false;
		}
		if (QueryLoader.selectorPreload == "body") {
			QueryLoader.spawnLoader();
			QueryLoader.getImages(QueryLoader.selectorPreload);
			QueryLoader.createPreloading();
		} else {
			jQ(document).ready(function() {
				QueryLoader.spawnLoader();
				QueryLoader.getImages(QueryLoader.selectorPreload);
				QueryLoader.createPreloading();
			});
		}
		
		//help IE drown if it is trying to die :)
		QueryLoader.ieTimeout = setTimeout("QueryLoader.ieLoadFix()", QueryLoader.ieLoadFixTime);
	},
	
	ieLoadFix: function() {		
		if(jQ.browser.msie){
			if ((70 / QueryLoader.doneStatus) * QueryLoader.doneNow < 70) {
				QueryLoader.imgCallback();
				QueryLoader.ieTimeout = setTimeout("QueryLoader.ieLoadFix()", QueryLoader.ieLoadFixTime);
			}
		}
	},		
	
	imgCallback: function() {
		QueryLoader.doneNow ++;
		QueryLoader.animateLoader();
	},
	
	getImages: function(selector) {
		var everything = jQ(selector).find("*:not(script)").each(function() {
			var url = "";
			
			if (jQ(this).css("background-image") != "none") {
				var url = jQ(this).css("background-image");
			} else if (typeof(jQ(this).attr("src")) != "undefined" && jQ(this).attr("tagName").toLowerCase() == "img") {
				var url = jQ(this).attr("src");
			}
			
			url = url.replace("url(\"", "");
			url = url.replace("url(", "");
			url = url.replace("\")", "");
			url = url.replace(")", "");
			
			if (url.length > 0 ) {
				QueryLoader.items.push(url);
			}
		});
	},
	
	createPreloading: function() {
		QueryLoader.preloader = jQ("<div></div>").appendTo(QueryLoader.selectorPreload);
		jQ(QueryLoader.preloader).css({
			height: 	"0px",
			width:		"0px",
			overflow:	"hidden"
		});
		
		var length = QueryLoader.items.length; 
		QueryLoader.doneStatus = length;
		
		for (var i = 0; i < length; i++) {
			var imgLoad = jQ("<img></img>");
			jQ(imgLoad).attr("src", QueryLoader.items[i]);
			jQ(imgLoad).unbind("load");
			jQ(imgLoad).bind("load", function() {
				QueryLoader.imgCallback();
			});
			jQ(imgLoad).appendTo(jQ(QueryLoader.preloader));
		}
	},

	spawnLoader: function() {
		if (QueryLoader.selectorPreload == "body") {
			var height = jQ(window).height();
			var width = jQ(window).width();
			var position = "fixed";
		} else {
			var height = jQ(QueryLoader.selectorPreload).outerHeight();
			var width = jQ(QueryLoader.selectorPreload).outerWidth();
			var position = "absolute";
		}
		var left = 0;
		var top = 0;

		QueryLoader.overlay = jQ("<div></div>").appendTo(jQ(QueryLoader.selectorPreload));
		jQ(QueryLoader.overlay).addClass("QOverlay");
		jQ(QueryLoader.overlay).css({
			position: position,
			top: top,
			left: left,
			width: width + "px",
			height: height + "px"
		});
		
		
		QueryLoader.loadBar = jQ("<div></div>").appendTo(jQ(QueryLoader.overlay));
		jQ(QueryLoader.loadBar).addClass("QLoader");
		jQ(QueryLoader.loadBar).css({
			position: "relative",
			width: "0%"
		});
		
		QueryLoader.loadAmt = jQ("<div>0%</div>").appendTo(jQ(QueryLoader.overlay));
		jQ(QueryLoader.loadAmt).addClass("QAmt");
		jQ(QueryLoader.loadAmt).css({
			position: "relative",
			left: "50%"
		});
		
	},
	
	animateLoader: function() {
		var perc = (100 / QueryLoader.doneStatus) * QueryLoader.doneNow;
		if (perc > 99){
			jQ(QueryLoader.loadAmt).html(LoaderMesssage+"100%");
			jQ(QueryLoader.loadBar).stop().animate({
				width: perc + "%"
			}, LoaderSpeed, "linear", function() { 
				QueryLoader.doneLoad();
			});
		} else {
			jQ(QueryLoader.loadBar).stop().animate({
				width: perc + "%"
			}, LoaderSpeed, "linear", function() { });
			jQ(QueryLoader.loadAmt).html(LoaderMesssage+Math.floor(perc)+"%");
		}
	},

	doneLoad: function() {
		//prevent IE from calling the fix
		clearTimeout(QueryLoader.ieTimeout);
		
		//determine the height of the preloader for the effect
		if (QueryLoader.selectorPreload == "body") {
			var height = jQ(window).height();
		} else {
			var height = jQ(QueryLoader.selectorPreload).outerHeight();
		}
		
		//The end animation, adjust to your likings
		jQ(QueryLoader.loadlogo).hide();
		jQ(QueryLoader.loadAmt).hide();
		jQ(QueryLoader.loadBar).animate({
			height: height + "px",
			top: 0
		}, OverFade, "linear", function() {
			jQ(QueryLoader.overlay).fadeOut(OverFade);
			jQ(QueryLoader.preloader).remove();
		});
	}
}

jQ.timer = function(time,func,callback){
	var a = {timer:setTimeout(func,time),callback:null}
	if(typeof(callback) == 'function'){a.callback = callback;}
	return a;
};

jQ.clearTimer = function(a){
	clearTimeout(a.timer);
	if(typeof(a.callback) == 'function'){a.callback();};
	return this;
};
