/*
Name:       Preload Over Images
Version:    0.2.3 (2010. Június 10.)
Author:     Balku Tamás
Support:    http://blog.btamas.hu/

Licence:    Szabadon felhasználható
            
Credits:    jQuery plugin, amely lehetővé teszi az over/active
			képek automatikus betöltését, valamint beállítja az out
			és over egérállapotot.
*/

(function($) {
	$.fn.preloadOverImages = function( options, callBackFunction )
	{
		var opts = $.extend({}, $.fn.preloadOverImages.defConfig, options);
		
		var items     = this;
		var imgs      = new Array();
		var imgsCount = 0;
		
		/* Elemek bejárása */
		for( var i=0; i<=( items.length - 1 ); i++ )
		{
			var objsrc = $(items[i]).attr('src');
			var objbg  = $(items[i]).css('background-image');
			
			/* Képek azonosítása */
			if( objsrc != '' && opts.imgregex.test(objsrc) ){
				saveImg( objsrc );
			}
			if( objbg != 'none' && opts.imgregex.test(objbg) ){
				var regex = /url\("?(.*)"?\)/i;
				objbg = regex.exec( objbg );
				objbg = objbg[1];
				objbg = objbg.replace('"', ''); //Chrome miatt kell, mert ott nincs idézőjel
				saveImg( objbg, true );
			}
		}
		
		/* Megtalált képek betöltése */
		loadImages();
		
		/**
		 * Megtalált képek lementése tömbbe
		 * és átalakítás a megfelelő állapotokra
		 **/
		function saveImg( img, isBg )
		{
			var srcArray = img.split('/');
			srcArray[(srcArray.length - 1)] = srcArray[(srcArray.length - 1)].replace(opts.out, opts.over);
			var srcOverLink = srcArray.join('/');
			imgs[imgsCount] = (srcArray.length > 1)? srcOverLink : srcArray;
			imgsCount++;
			
			/* Out és Over egér állapotok beállítása */
			if( opts.addMouseAction ){
				if( !isBg )
				{
					$(items[i]).mouseout(function(){
						$(this).attr('src', img);
					});
					$(items[i]).mouseover(function(){
						$(this).attr('src', srcOverLink);
					});
				}
				else
				{
					$(items[i]).mouseout(function(){
						$(this).css('background-image', 'url('+img+')');
					});
					$(items[i]).mouseover(function(){
						$(this).css('background-image', 'url('+srcOverLink+')');
					});
				}
			}
			
			if( opts.active !== false ){
				var srcArray = img.split('/');
				srcArray[(srcArray.length - 1)] = srcArray[(srcArray.length - 1)].replace(opts.out, opts.active);
				imgs[(imgs.length + 1)] = srcArray.join('/');
				imgsCount++;
			}
		}
		
		/**
		 * Képek betöltése
		 **/
		function loadImages()
		{
			var loadImgLength = (imgs.length - 1);
			printLoading( 0 );
			
			for( var i=0; i<=loadImgLength; i++ )
			{
				var limg = new Image();
				limg.src = imgs[i];
				
				printLoading( i );
			}
			
			if (typeof callBackFunction == 'function') {
	            callBackFunction.call();
	        }
		}
		
		/**
		 * Betöltés állapotának visszajelzése
		 **/
		function printLoading( count )
		{
			count = (count + 1);
			if( opts.status === true ){
				window.status = "Képek betöltése: "+count+" - "+imgs.length;
			}
			
			if( count == imgs.length ){
				setTimeout(function(){ window.status = ""; }, 2500);
			}
		}
	};
	
	/**
	 * Preload Over Images alap beállításai
	 **/
	$.fn.preloadOverImages.defConfig = {
		out:    '-out', //Out állapot suffixe
		over:   '-over', //Over állapot suffixe
		active: false, //Active állapot suffixe
		addMouseAction: false, //Out és Over egérállapotok beillesztése
		status: false, //Betöltés állapotának visszajelzése
		imgregex: /(\.jpg|\.png|\.gif|\.bmp|\.jpeg)/i //Betölthető képek kiterjesztése
	};
})(jQuery);
