/*
	ViewBox ver. 1.1 (Grudzień 2010)
	Zalecana wersja jQuery: 1.4 +
	-----------------------------------
	www.devplugin.pl
	-----------------------------------
	Wszystkie modyfikacje poniższego
	skryptu prosimy zgłaszać na:
	INFO@DEVPLUGIN.PL 
*/ 
(function($){
	$.fn.viewbox = function(settings) { 
		settings = $.extend({
			Speed		: 400,		//Szybkość animacji, która przez skrypt będzie modyfikowana
			heightWindow: 450,		//Wysokość okna VB
			widthWindow	: 650,		//Szerokość okna VB
			arrayEl		: [],		//Tablica z obrazami/elementami	
			arrayActEl	: 0,		//Tablica z aktywnym elementem		
			IMG			: 1,		//(true) wartość prawdziwa dla wczytywania obrazów
			frame		: 0,		//(false) wartość fałszywa dla wczytywania frame (ramki)
			inline		: 0,		//(false) wartość fałszywa dla inline
			inlineBg	: "#fff",	//(string) białe tło dla wyświetlania inline
			inlinePadding: 5,		//Padding zawartości dla inline
			inlineScroll: 1, 		//(true) wartość prawdziwa dla wyświetlania scrollbali w inline
			ajax		: 0,		//(false) wartość fałszywa dla wczytywania treści za pomocą Ajax
			ajaxType	: 0,		//(false) domyślne "GET" 
			ajaxData	: 0,		//
			ajaxSuccess	: 0,		//(false) możliwość dodania własnych instrukcji po poprawnym wczytaniu pliku
			titleThumb	: 0,		//(true) wartość prawdziwa dla tworzenia tytułów na miniaturach
			navigation	: 1,		//(true) wartość prawdziwa dla tworzenia nawigacji (strzałek)
			keyboard	: 1,		//(true) wartość prawdziwa dla sterowania VB za pomocą klawiatury
			keyClose	: "c",		//Klawisz "c"
			keyPrev		: "p",		//Klawisz "p"
			keyNext		: "n",		//Klawisz "n"
			numberEl	: 1			//(true) wartość prawdziwa dla wyświetlania ilości elementów
		}, settings);
		
		var el = $(this);
		
		//Click
		function _clickEl () {
			_viewbox(this, el);
			return false;
		}
				
		//Główna funkcja
		function _viewbox (ElClicked, el) {
			//Reset ustawień
			settings.arrayEl.length = 0;
			settings.arrayActEl = 0;
			//Jeśli jest do wczytania jakiś JEDEN element
			if ( el.length == 1) {
				//dodajemy do tablicy atrybuty elementu
				settings.arrayEl.push(new Array (
					ElClicked.getAttribute("href"), 	//[0] Ścieżka do pliku
					ElClicked.getAttribute("title"), 	//[1] Tytul
					$(ElClicked).children("img").attr("alt") //[2] Opis
				));
			} else {
				//Jeśli jest WIELE elementów
				for (var i = 0; i < el.length; i++) {
					settings.arrayEl.push(new Array (
						el[i].getAttribute("href"),  //[i] Ścieżka do pliku
						el[i].getAttribute("title"), //[i] Tytul
						$(el[i]).children("img").attr("alt")	 //[i] Opis
					));
				}
			}
//			//Dowanie elementów do tablicy za wyjątkiem aktywnego     
			while (settings.arrayEl[settings.arrayActEl][0] != ElClicked.getAttribute("href")) {
				settings.arrayActEl++;
			}
			//Tworzenie VB 
			createView(); 
		}
		//Tworzenie VB
		function createView () {
			//Dodawanie podstawowych elementów VB
			$("body").append("<div id='viewbox'></div><div class='srodek'><div class='zawartosc'><div class='zamknij'><a href='#'>Zamknij</a></div><div class='nast'><a href='#'> Następny</a></div><div class='poprz'><a href='#'>Poprzedni</a></div></div>");
			$("#viewbox, .srodek, .zawartosc, .zawartosc .nast, .zawartosc .poprz").hide();
				//Sprawdzanie czy ustawiono  możliwoźć nawigacji
				if (settings.navigation) {
					//Sprawdzanie czy jest więcej elementów, jeśli tak, to wyświetl strzałki
					NextAndPrev();
				}
				$(".srodek .poprz").unbind().bind("click", function () {
					Prev();
					return false;
				});
				$(".srodek .nast").unbind().bind("click", function () {
					Next();
					return false;
				});
				keyboardNav();
				
			$("#viewbox").css("opacity", 0.7).fadeIn(settings.Speed/1.6, function () {
				//Pobieranie rozmiarów okna przeglądarki
				arraySizeBrowser = sizeBrowser();
				var scroll;
				if($(document).scrollTop() == 0) {
					scroll = arraySizeBrowser[0]/2.4;
				} else {
					scroll = $(document).scrollTop()+arraySizeBrowser[0]/2.3;
				} 
				//Animacja okna VB
				$(".srodek").fadeIn(settings.Speed/1.2, function () {
					$(this).animate({
						height		: settings.heightWindow,
						width		: settings.widthWindow,
						top			: scroll,
						left		: arraySizeBrowser[1]-settings.widthWindow/2
					}, settings.Speed/1.2, function () {
			//Pobieranie elementów
			setElement();
						$(".srodek .zawartosc").delay(290).fadeIn(settings.Speed/1.5);
					});	
				}); 
			});
			//Zamykanie okna VB
			$("#viewbox, .zawartosc .zamknij a").click(function () {
				closeWindow();
				return false;
			});
		}		
		//Pobieranie elementów do VB
		function setElement () {
				//BADANIE DANYCH Z USTAWIEŃ
					//Jeśli obraz
					if (nImg(settings.arrayEl[settings.arrayActEl][0])) {				
						Img(settings.arrayEl[settings.arrayActEl][0]);						      		  
					} 
					//jeśli youtube
					if(nYT(settings.arrayEl[settings.arrayActEl][0])) {
						Film(settings.arrayEl[settings.arrayActEl][0]);
					} 
					//jeśli Vimeo
					if(nV(settings.arrayEl[settings.arrayActEl][0])){
						Vimeo(settings.arrayEl[settings.arrayActEl][0]);
					}
					
					//jeśli Player
					if(nPlayer(settings.arrayEl[settings.arrayActEl][0])) {
						Player(settings.arrayEl[settings.arrayActEl][0]);
					}
					
					//Jeśli Frame
					if(nFrame(settings.arrayEl[settings.arrayActEl][0])) {
						FrameObj(settings.arrayEl[settings.arrayActEl][0]);
					}
					
					//Jeśli inline
					if(nInline(settings.arrayEl[settings.arrayActEl][0])) {
						Inline(settings.arrayEl[settings.arrayActEl][0]);
					}
					//Jeśli Ajax
					if(nAjax(settings.arrayEl[settings.arrayActEl][0])) {
						Ajax(settings.arrayEl[settings.arrayActEl][0]);
					}
				
		}
	//Rozszerzenia obsługiwanych plików
		function nImg(hrefLink) {
			return hrefLink.indexOf("jpg", ".") > 0 || hrefLink.indexOf("png", ".") > 0 || hrefLink.indexOf("gif", ".") > 0;
		}
		function nYT(hrefLink) {
			return hrefLink.indexOf("youtube", ".") > 0;
		}
		function nV(hrefLink) {
			return hrefLink.indexOf("vimeo", ".") > 0;
		}
		function nPlayer (hrefLink) {
			return hrefLink.indexOf("mp3", ".") > 0 || hrefLink.indexOf("vmw", ".") > 0 || hrefLink.indexOf("avi", ".") > 0;
		}  
		function nFrame (hrefLink) {
			return settings.frame != 0 || hrefLink.indexOf("html", ".") > 0;
		}
		function nInline (hrefLink) {
			return settings.inline != 0 || hrefLink.indexOf("#") >= 0;
		}
		function nAjax (hrefLink) {
			return settings.ajax != 0 || hrefLink.indexOf("php", ".") > 0 || hrefLink.indexOf("txt", ".") > 0 || hrefLink.indexOf("js", ".") > 0;
		}
		
	//OBSŁUGA MEDIÓW
	//Funkcja pokazująca obraz
	 function Img (hrefImg) {
			   $(".zawartosc").append("<div class='obraz'><img /></div>");
			   $(".obraz").hide();
	   	  var ImgLoad = new Image (); 
		 	   ImgLoad.onload = function () {
					$(".obraz img").attr("src", ImgLoad.src);
					settings.heightWindow = ImgLoad.height;
					settings.widthWindow = ImgLoad.width;
						//Zmiana rozmiaru aktywnego okna
						resizeWindow(ImgLoad.height, ImgLoad.width);
					ImgLoad.onload = function(){}; 
			   };
			   ImgLoad.src = hrefImg;
			   
			   //Zmienne z opisem i tytulem 
			   var description = settings.arrayEl[settings.arrayActEl][2]; 
			   var title = settings.arrayEl[settings.arrayActEl][1];
			   
			   //Sprawdz czy jest tytul
			   if (title) {
			   	$(".zawartosc .obraz").append("<div class='tresc'><h1>"+title+"</h1></div>");
				$(".zawartosc .tresc ").hide();
				//Najechanie i zjechanie
				$(".srodek").hover(
	                function () {
	                    $(".zawartosc .tresc").stop(true, true).delay(200).slideDown(200);
	                },
	                function () {
	                    $(".zawartosc .tresc").stop(true, true).delay(200).slideUp(180);
	                }
	            );
			   }
			   if (description) {
			   	$(".zawartosc .tresc").append("<div class='opis'>"+description+"</div>")
			   }
   	} //koniec funkcji pokazywania obrazu
	 
	//Funkcja filmów
	function Film (hrefFilm) {
		$(".zawartosc").append("<div class='object'></div>"); 
		//Zmienne
		hrefY = "http://www.youtube.com/v/"+hrefFilm.substring(31, 42)+"&autoplay=1&loop=1&feature=related&showsearch=0";  
		$(".object").append("<object width='"+settings.widthWindow+"' height='"+settings.heightWindow+"'><param name='movie' value='"+hrefY+"'></param><param name='allowFullScreen' value='true'></param><param name='allowscriptaccess' value='always'></param><embed src='"+hrefY+"' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='"+settings.widthWindow+"' height='"+settings.heightWindow+"'></embed></object>"); 
	}//Koniec Film
	
	//Vimeo
	function Vimeo (link) {
		$(".zawartosc").append("<div class='object'></div>"); 
		//Zmienne
		hrefV = link.substring(21, 29);  
		$(".object").append("<object width='"+settings.widthWindow+"' height='"+settings.heightWindow+"'><param name='allowfullscreen' value='true' /><param name='allowscriptaccess' value='always' /><param name='movie' value='http://vimeo.com/moogaloop.swf?clip_id="+hrefV+"&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1' /><embed src='http://vimeo.com/moogaloop.swf?clip_id="+hrefV+"&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1' type='application/x-shockwave-flash' allowfullscreen='true' allowscriptaccess='always' width='"+settings.widthWindow+"' height='"+settings.heightWindow+"'></embed></object>");  
	}
	
	//Player
	function Player (hrefFile) {
		$(".zawartosc").append("<div class='object'></div>");
		$('.object').append("<object id='player' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' name='player' width='"+settings.widthWindow+"' height='"+settings.heightWindow+"'> <param name='movie' value='player/player.swf' /><param name='allowfullscreen' value='true' /> <param name='flashvars' value='file="+hrefFile+"&amp;skin=player/modieus.zip' /> <object type='application/x-shockwave-flash' data='player/player.swf' width='"+settings.widthWindow+"' height='"+settings.heightWindow+"'> <param name='movie' value='player/player.swf' /> <param name='allowfullscreen' value='true' /> <param name='flashvars' value='file="+hrefFile+"&amp;skin=player/modieus.zip' /></object>");
	}//Koniec Playe
	
	//Frame 
	function FrameObj (src) {
		$(".zawartosc").append("<iframe hspace='0' src='"+src+"' scrolling='auto' frameborder='0' height='"+settings.heightWindow+"' width='"+settings.widthWindow+"' ></iframe>");
	}
		//Nastepny, poprzedni element
		function NextAndPrev () { 
			if (settings.arrayActEl != 0) {
				$(".srodek .poprz").css("top", settings.heightWindow/2).show();
			} else {
				$(".srodek .poprz").hide();
			}
			//Następny element
			if (settings.arrayActEl != settings.arrayEl.length-1) {
				$(".srodek .nast").css("top", settings.heightWindow/2).show();
			} else {
				$(".srodek .nast").hide();
			}
			NumberElement();
		}
		
		//Inline
		function Inline (hrefAnhor) {
			ChangeStyle();
			$(".srodek .zawartosc .content").append($(hrefAnhor).html());
		}
		
		//Ajax
		function Ajax (hrefAjax) {
			ChangeStyle();
			 $.ajax({
			 	type: (!settings.ajaxType) ? "GET" : settings.ajaxType,
			 	url: hrefAjax,
				data: settings.ajaxData, 
				success: (!settings.ajaxSuccess) ? (function(data) { $(".srodek .zawartosc .content").html(data) }) : settings.ajaxSuccess 
			 });
		}
		
		function ChangeStyle () {
			//Zmiana tła z preloaderem
			$(".srodek").css("background", "url(img/ViewBox_bg.png)");
			$(".zawartosc .numer").hide();
			var scrollbar = (settings.inlineScroll) ? "auto" : "hidden";
			$(".srodek .zawartosc").append("<div class='content'></div>");
			$(".srodek .zawartosc .content").css({
				background	: settings.inlineBg,
				padding		: settings.inlinePadding,
				overflow	: scrollbar
			});
			$(".srodek .zawartosc .content").height(settings.heightWindow-10);
		}
		
		//Obsługa klawiatury
		function keyboardNav () {
			//Sterowanie klawiaturą
			if(settings.keyboard) {
				
				$(document.documentElement).unbind().bind("keyup", function (event) {
					//IE
					if ($.browser.msie) {
						codeAscii = event.keyCode;
					} else {
						codeAscii = event.keyCode;
					}
					KeyCode = String.fromCharCode(codeAscii).toLowerCase();
					
					//Strzalka w lewo
					if(event.keyCode == 37 || KeyCode == settings.keyPrev) {
						Prev();
					}
					//Strzalka w prawo
					if(event.keyCode == 39 || KeyCode == settings.keyNext) {
						Next();
					}
					//ESC
					if(event.keyCode == 27 || KeyCode == settings.keyClose) {
						closeWindow();
					}
				});
			}
	}
		//Poprzedni
		function Prev () {
			if (settings.arrayActEl != 0) {
				$(".srodek .zawartosc").fadeOut(settings.Speed / 1.4, function(){
					$(".zawartosc .obraz, .zawartosc .object").remove();
					settings.arrayActEl = settings.arrayActEl - 1;
					NumberElement();
					setElement();
					$(this).fadeIn(settings.Speed / 1.2);
					NextAndPrev();
				});
			}
		}
		//Następny
		function Next () {
			if (settings.arrayActEl != settings.arrayEl.length - 1) {
				$(".srodek .zawartosc").fadeOut(settings.Speed / 1.4, function(){
					$(".zawartosc .obraz, .zawartosc .object").remove();
					settings.arrayActEl = settings.arrayActEl + 1;
					NumberElement();
					setElement();
					$(this).fadeIn(settings.Speed / 1.2);
					NextAndPrev();
				});
			}
		}
		//Numer zdjęcia/elementu
		function NumberElement () {
			if(settings.numberEl) {
				$(".zawartosc .numer").remove();
				if(settings.arrayEl.length != 0) {
					function Words () {
						//Jeśli obraz
						if (nImg(settings.arrayEl[settings.arrayActEl][0])) {				
							return "Zdjęcie ";						      		  
						} 
						//jeśli youtube
						if(nYT(settings.arrayEl[settings.arrayActEl][0]) || nV(settings.arrayEl[settings.arrayActEl][0])) {
							return "Film ";
						} 
						//jeśli Player
						if(nPlayer(settings.arrayEl[settings.arrayActEl][0])) {
							return "Utwór ";
						}
						//jeśli Frame
						if(nFrame(settings.arrayEl[settings.arrayActEl][0])) {
							 return "Strona ";
						}
					}
					$(".zawartosc").append("<div class='numer'>"+Words()+(settings.arrayActEl+1)+" z "+settings.arrayEl.length+"</div>");
				}
			}
		}
	//Zmiana rozmiaru okna VB
	function resizeWindow (Height, Width, Callback) {
		//Pobieranie rozmiaru okna
		var contentHeight = $(".srodek").height();
		var contentWidth = $(".srodek").width();
		 		
		$(".srodek").stop(true, true).animate({
			left		: document.documentElement.clientWidth/2-Width/2,
			width		: Width,
			height		: Height
		}, settings.Speed/1.5);
			$(".srodek .obraz").hide().delay(settings.Speed/1.1).fadeIn(300);
		$(".nast, .poprz").css("top", Height/2);
	} 
		//Zamykanie 
		function closeWindow () {
			var arrPageSize = sizeBrowser();
			//Reset ustawień
			settings.arrayEl.length = 0;
			settings.arrayActEl = 0;
			$(".zawartosc").fadeOut(settings.Speed/1.6, function () {
				$(".srodek").animate({
					left	: arrPageSize[1],
					top		: arrPageSize[0],
					height	: 20,
					width	: 20
				}, settings.Speed/1.3, function () {
					$(this).fadeOut(settings.Speed/1.2, function () {
						$(this).remove();
						$("#viewbox").fadeOut(settings.Speed/1.5, function () {
							$("#viewbox").remove(); 
						});
					});
				});
			});
			
		}
		//Rozmiar okna przeglądarki
		function sizeBrowser () {
			var arraySize = new Array;
			//Wysokość
			arraySize[0] = document.documentElement.clientHeight/2;
			//Szerokość 
			arraySize[1] = document.documentElement.clientWidth/2; 
			return arraySize;
		}
		
		//Miniaturki
		if(settings.titleThumb) {
			jQuery.each(el, function() {
				var titleThumb = $(this).attr("title");
			$(this).children("img").parent("a").wrap("<div class='thumbdiv'></div>");
				$(this).parent(".thumbdiv").append("<div class='title'>"+titleThumb+"</div>");
				$(this).parent(".thumbdiv").children(".title").hide();
			});
			//Najechanie/zjechanie z miniaturki 
			$(".thumbdiv").hover(
				function(){
					$(this).children(".title").stop(true, true).delay(150).slideDown(200);
				},
				function(){
					$(this).children(".title").stop(true, true).delay(150).slideUp(200);
				}
			);
		}
		//Kliknięcie w Element 
		return this.unbind('click').click(_clickEl); 
	};
})(jQuery); //koniec pluginu 
