var QueryLoader = {
	/*
	 * QueryLoader		Preload your site before displaying it!
	 * Author:			Gaya Kessler
	 * Date:			23-09-09
	 * URL:				http://www.gayadesign.com
	 * Version:			1.0
	 */
	
	overlay: '',
	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 (QueryLoader.selectorPreload == 'body') {
			QueryLoader.spawnLoader();
			QueryLoader.getImages(QueryLoader.selectorPreload);
			QueryLoader.createPreloading();
		} else {
			$q(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() {
		var ie = navigator.userAgent.match(/MSIE (\d+(?:\.\d+)+(?:b\d*)?)/);

		if (ie!=null && ie[0].match('MSIE')) {		
			while ((100 / QueryLoader.doneStatus) * QueryLoader.doneNow < 100) {
				QueryLoader.imgCallback();
			}
		}
	},
	
	imgCallback: function() {
		QueryLoader.doneNow ++;
		QueryLoader.animateLoader();
	},
	
	getImages: function(selector) {
		var everything = $q(selector).find('*:not(script, iframe)').each(function() {
			var url = '';
			
			if ($q(this).css('background-image') != 'none') {
				var url = $q(this).css('background-image');
			} else if (typeof($q(this).attr('src')) != 'undefined' && $q(this).attr('tagName').toLowerCase() == 'img') {
				var url = $q(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 = $q('<div></div>').appendTo(QueryLoader.selectorPreload);
		$q(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 = $q('<img></img>');
			$q(imgLoad).attr('src', QueryLoader.items[i]);
			$q(imgLoad).unbind('load');
			$q(imgLoad).bind('load', function() {
				QueryLoader.imgCallback();
			});
			$q(imgLoad).appendTo($q(QueryLoader.preloader));
		}
	},

	spawnLoader: function() {
		QueryLoader.overlay = $q('#screen-overlay');
		QueryLoader.overlay.css('display', 'block');
		QueryLoader.overlay.children('div.bg').css('opacity', '.8');
		QueryLoader.loadBar = QueryLoader.overlay.find('div.loader-bar div');
		QueryLoader.loadAmt = QueryLoader.overlay.find('div.loader-amt span');
	},
	
	animateLoader: function() {
		var perc = (100 / QueryLoader.doneStatus) * QueryLoader.doneNow;
		if (perc > 99) {
			$q(QueryLoader.loadAmt).html('100%');
			$q(QueryLoader.loadBar).stop().animate({
				width: perc + '%'
			}, 500, 'linear', function() { 
				QueryLoader.doneLoad();
			});
		} else {
			$q(QueryLoader.loadBar).stop().animate({
				width: perc + '%'
			}, 500, 'linear', function() { });
			$q(QueryLoader.loadAmt).html(Math.floor(perc)+'%');
		}
	},
	
	doneLoad: function() {
		//prevent IE from calling the fix
		clearTimeout(QueryLoader.ieTimeout);
		
		//determine the height of the preloader for the effect
		$q(QueryLoader.overlay).fadeOut(800);
	}
}
