;jQuery.imgPreloader = function(settings){
	
	var allImgs = [],
		loaded = 0,
		loadedImages = 0,
		sources = [],
		images = [],
		imgUrls = [],
		thisSheetRules,	
		errorTimer;
	
	function finishDownloading() {
		$(".bgLoading").addClass("bg");
		$(".bgLoading").removeClass("bgLoading");
		$(".wrap").show();
	}
	
	function onImgComplete(){
		clearTimeout(errorTimer);
		
//		if (loaded < imgUrls.length) {
		if (loaded < 12) {
			loaded++;
			loadImgs();
			
		}else {			
			initContentPreload();
		}
	}
	
	function loadImgs(){
		var img = new Image();
		img.src = imgUrls[loaded];
		if(!img.complete){
			jQuery(img).bind('error load onreadystatechange', onImgComplete);
		} else {
			onImgComplete();
		}
		errorTimer = setTimeout(onImgComplete, 10);
	}
	
	function parseCSS(sheets, urls) {
		var w3cImport = false,
			imported = [],
			importedSrc = [],
			baseURL;
		var sheetIndex = sheets.length;
		while(sheetIndex--){
			
			var cssPile = '';
			
			if(urls && urls[sheetIndex]){
				baseURL = urls[sheetIndex];
			} else {
				var csshref = (sheets[sheetIndex].href) ? sheets[sheetIndex].href : 'window.location.href';
				var baseURLarr = csshref.split('/');
				baseURLarr.pop();
				baseURL = baseURLarr.join('/');
				if (baseURL) {
					baseURL += '/';
				}
			}
			if(sheets[sheetIndex].cssRules || sheets[sheetIndex].rules){
				thisSheetRules = (sheets[sheetIndex].cssRules) ?
					sheets[sheetIndex].cssRules :
					sheets[sheetIndex].rules;
				var ruleIndex = thisSheetRules.length;
				while(ruleIndex--){
					if(thisSheetRules[ruleIndex].style && thisSheetRules[ruleIndex].style.cssText){
						var text = thisSheetRules[ruleIndex].style.cssText;
						if(text.toLowerCase().indexOf('url') != -1){
							cssPile += text;
						}
					} else if(thisSheetRules[ruleIndex].styleSheet) {
						imported.push(thisSheetRules[ruleIndex].styleSheet);
						w3cImport = true;
					}
					
				}
			}

			var tmpImage = cssPile.match(/[^\("]+\.(gif|jpg|jpeg|png)/g);
			if(tmpImage){
				var i = tmpImage.length;
				while(i--){
					var imgSrc = (tmpImage[i].charAt(0) == '/' || tmpImage[i].match('://')) ?
						tmpImage[i] : 
						baseURL + tmpImage[i];
					
					if(jQuery.inArray(imgSrc, imgUrls) == -1){
						imgUrls.push(imgSrc);
					}
				}
			}
			
			if(!w3cImport && sheets[sheetIndex].imports && sheets[sheetIndex].imports.length) {
				for(var iImport = 0, importLen = sheets[sheetIndex].imports.length; iImport < importLen; iImport++){
					var iHref = sheets[sheetIndex].imports[iImport].href;
					iHref = iHref.split('/');
					iHref.pop();
					iHref = iHref.join('/');
					if (iHref) {
						iHref += '/';
					}
					var iSrc = (iHref.charAt(0) == '/' || iHref.match('://')) ?
						iHref : 
						baseURL + iHref;
					
					importedSrc.push(iSrc);
					imported.push(sheets[sheetIndex].imports[iImport]);
				}
			}
		}
		
		if(imported.length){
			parseCSS(imported, importedSrc);
			return false;
		}
		var downloads = 2;
		while( downloads--){
			setTimeout(loadImgs, downloads);
		}
	}
	parseCSS(document.styleSheets);
	return imgUrls;
	
	function initContentPreload() {
		// retrieving content sources
		$("img").each(function(){
			sources.push($(this).attr("src"));
		});

		// starting sownload
		//for(var i = 0; i < sources.length;i++) {
  	    for(var i = 0; i < 12;i++) {	
			images[i] = new Image();
			var currImg = images[i];
			$(currImg).load(function(){
				onImgLoaded();
			}).attr("src",sources[i]);
		}
	}
	
	function onImgLoaded() {
	
		loadedImages += 1;
		loadedImages++;
		if(loadedImages >= sources.length) {
			finishDownloading();
			
		}
	}
};






