var QueryLoader = {
	/*
	 * QueryLoader		Preload your site before displaying it!
	 * Author:			Gaya Kessler
	 * Date:			23-09-09
	 * URL:				http://www.gayadesign.com
	 * Version:			1.0
	 * 
	 * A simple jQuery powered preloader to load every image on the page and in the CSS
	 * before displaying the page to the user.
	 */
	
	overlay: "",
	loadBar: "",
	loadLogo: "",
    loadText: "",
	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") {
			return false;
		}
        if (navigator.userAgent.match(/MSIE/) == "MSIE") {
			//break if IE
			return false;
		}
		if (QueryLoader.selectorPreload == "body") {
			QueryLoader.spawnLoader();
			QueryLoader.getImages(QueryLoader.selectorPreload);
            QueryLoader.createPreloading();
            return true;
		}
        else {
			$(document).ready(function() {
				QueryLoader.spawnLoader();
				QueryLoader.getImages(QueryLoader.selectorPreload)
                QueryLoader.createPreloading();
			});
            return true;
		}
		
		//help IE drown if it is trying to die :)
		QueryLoader.ieTimeout = setTimeout("QueryLoader.ieLoadFix()", QueryLoader.ieLoadFixTime);
	},
	
	ieLoadFix: function() {
		if ($.browser.msie6 == $.browser.msie && /MSIE 6\.0/i.test(window.navigator.userAgent) && !/MSIE 7\.0/i.test(window.navigator.userAgent)) {
			while ((100 / QueryLoader.doneStatus) * QueryLoader.doneNow < 100) {
				QueryLoader.imgCallback();
			}
		}
	},
	
	imgCallback: function() {
		QueryLoader.doneNow ++;
		QueryLoader.animateLoader();
	},
	
	getImages: function(selector) {
		$(selector).find("*:not(script)").each(function() {
			var url = "";
			
			if ($(this).css("background-image") != "none") {
				url = $(this).css("background-image");
			}
            else if (typeof($(this).attr("src")) != "undefined" && $(this).attr("tagName").toLowerCase() == "img") {
				url = $(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 = $("<div></div>").appendTo(QueryLoader.selectorPreload);
		$(QueryLoader.preloader).css({
			height:     "0px",
			width:      "0px",
			overflow:   "hidden",
            position:   "absolute",
            top:        "0px",
            left:       "0px",
            zIndex:     "9999"
		});
		
		var length = QueryLoader.items.length; 
		QueryLoader.doneStatus = length;
		
		for (var i = 0; i < length; i++) {
			var imgLoad = $('<img width="20"></img>');
			$(imgLoad)
                .attr("src", QueryLoader.items[i])
                .appendTo($(QueryLoader.preloader))
                .unbind("load")
                .bind("load", function() {
            QueryLoader.imgCallback();
            //$('#load').append($(this).attr("src")+"&nbsp; &nbsp;");
        });
		}
	},

	spawnLoader: function() {
        var height = $(window).height();
        var width = $(window).width();
        var position = "fixed";
		if (QueryLoader.selectorPreload == "body") {
            height = $(window).height();
            width = $(window).width();
            position = "fixed";
		} 
        else {
			height = $(QueryLoader.selectorPreload).outerHeight();
			width = $(QueryLoader.selectorPreload).outerWidth();
			position = "absolute";
		}
		var left = $(QueryLoader.selectorPreload).offset()['left'];
		var top = $(QueryLoader.selectorPreload).offset()['top'];
		
		QueryLoader.overlay = $('<div></div>').appendTo($(QueryLoader.selectorPreload));
		$(QueryLoader.overlay).addClass("QOverlay").css({
			position: position,
			top: top,
			left: left,
			width: width + "px",
			height: height + "px"
		});
		
		QueryLoader.loadLogo = $('<div align="center"><img src="./gfx/purple_logo_splash.jpg" alt="lade..." /></div>').appendTo($(QueryLoader.overlay));
		$(QueryLoader.loadLogo).css({
			position: "absolute",
			top: "100px",
			width: "100%"
		});

        QueryLoader.loadText = $('<div align="center"><div id="perc" style="width: 800px;"></div><br/><div id="load" style="width: 800px;"></div></div>').appendTo($(QueryLoader.overlay));
		$(QueryLoader.loadText).css({
			position: "absolute",
			top: "420px",
			width: "100%"
		});

        QueryLoader.loadBar = $("<div></div>").appendTo($(QueryLoader.overlay));
		$(QueryLoader.loadBar).addClass("QLoader");

		$(QueryLoader.loadBar).css({
			position: "relative",
			top: "400px",
			width: "0%"
		});
	},
	
	animateLoader: function() {
		var perc = (100 / QueryLoader.doneStatus) * QueryLoader.doneNow;
        //$('#perc').text(Math.ceil(perc) + "%");
		if (perc > 99) {
			$(QueryLoader.loadBar).stop().animate({
				width: perc + "%"
			}, 10, "linear", function() {
				QueryLoader.doneLoad();
			});
		}
        else {
			$(QueryLoader.loadBar).stop().animate({
				width: perc + "%"
			}, 10, "linear");
		}
	},
	
    doneLoad: function() {
        //prevent IE from calling the fix
        clearTimeout(QueryLoader.ieTimeout);

        var height = 0;
        //determine the height of the preloader for the effect
        if (QueryLoader.selectorPreload == "body") {
            height = $(window).height();
		} else {
			height = $(QueryLoader.selectorPreload).outerHeight();
		}
		
		//The end animation, adjust to your likings
		$(QueryLoader.loadBar).animate({
			height: height + "px",
			top: 0
		}, 500, "linear", function() {
			$(QueryLoader.overlay).fadeOut(800);
			$(QueryLoader.preloader).remove();
		});
	}
}