(function($) {
	var settings;
		
	$.lightbox = function(callerSettings) {
		settings = $.extend({
			previousControl: null,
			nextControl: null,
			closeControl: null
		}, callerSettings || {});
		
		settings.thumbnailsOuter = $(".lightbox_gallery_item_outer");
		settings.lightboxPhotos = $(".lightbox_thumbnail").filter("img");//thumbnails imgs
		settings.photoContainerOuter = $("#lightbox_photo_outer");
		settings.photoContainer = $("#lightbox_photo");//large photo
		settings.lightboxContent = $("#lightbox_content");//all popup content
		settings.currentPhoto = $("#lightbox_current_photo");
		settings.totalPhotos = $("#lightbox_total_photos");
		
		settings.previousControl = $(settings.previousControl);
		settings.nextControl = $(settings.nextControl);
		settings.closeControl = $(settings.closeControl);
		
		settings.currentPhotoPos = null;
		settings.lightboxPhotosLength = settings.lightboxPhotos.length;
		
		settings.photoPadding = 5;
		settings.photoContainerOuter.css("padding", settings.photoPadding);
		
		settings.originalImageSrcs = lightboxImageSrcs;
		settings.originalImageTitles = lightboxImageTitles;
		settings.originalImageAlts = lightboxImageAlts;
		settings.originalGalleryId = lightboxGalleryId;
		
		//attach events
		settings.thumbnailsOuter.mouseenter(function() {
			$(this).addClass("active_lightbox_gallery_item");
		}).mouseleave(function() {
			$(this).removeClass("active_lightbox_gallery_item");
		});
		
		settings.lightboxPhotos.click(function() {
			openLightbox(this);
		});
		
		settings.previousControl.click(function() {
			var newPos = (((settings.lightboxPhotosLength + settings.currentPhotoPos - 1) % settings.lightboxPhotosLength) + 0);
			settings.currentPhotoPos = newPos;
			changeImage(newPos);
		});
		
		settings.nextControl.add(settings.photoContainer).click(function() {
			var newPos = (((settings.currentPhotoPos + 1) % settings.lightboxPhotosLength) + 0);
			settings.currentPhotoPos = newPos;
			changeImage(newPos);
		});
		
		settings.closeControl.click(function() {
			closeLightBox();
			
			//restore previous values
			lightboxImageSrcs = settings.originalImageSrcs;
			lightboxImageTitles = settings.originalImageTitles;
			lightboxImageAlts = settings.originalImageAlts;
			lightboxGalleryId = settings.originalGalleryId;
		});
		
		var isOldIE = ($.browser.msie && parseInt($.browser.version) <= 6);
		
		var scrollTop = (isOldIE) ? self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop) : 0;
		var scrollLeft = (isOldIE) ?  self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft) : 0;
		
		$("#lightbox_left a").click(function() {
			//change gallery
			
			//normalize all links
			$(".lightbox_inactive_gallery").removeClass("lightbox_active_gallery");
			
			//add active state for selected gallery
			$(this).parent().addClass("lightbox_active_gallery");
			
			//find new page id
			pageId = $(this).attr("id").substring("sat_".length);
			
			$.get(EEHttp+"action.php", {action: "get_lightbox_gallery_srcs", page_id: pageId}, function(data, textStatus) {
				//change gallery
				settings.currentPhotoPos = 0;
				settings.lightboxPhotosLength = lightboxImageSrcs.length;
				changeImage(0);
			}, "script");
		});
		
		var openLightbox = function(imgObj) {
			
			//current photo
			settings.currentPhotoPos = parseInt(imgObj.getAttribute("id").substring(1));
			
			//prepare window
			var photo = new Image();
			photo.src = (lightboxImageSrcs[settings.currentPhotoPos] !="") ? lightboxPathPrefix + lightboxGalleryId + "/" + lightboxImageSrcs[settings.currentPhotoPos] : lightboxNotAvialableImage ;
			photo.onload = function() {
				var imgWidth = photo.width;
				var imgHeight = photo.height;
				
				settings.photoContainer.css({width: imgWidth, height: imgHeight});//with animation
				$("#lightbox_right").css({width: imgWidth + settings.photoPadding * 2});
				
				settings.lightboxContent.css({width: $("#lightbox_left").width() + 16 + (imgWidth + settings.photoPadding * 2), left: ($(window).width() - ($("#lightbox_left").width() + 16 + (imgWidth + settings.photoPadding * 2))) / 2 + scrollLeft, top: ($(window).height() - (imgHeight + settings.photoPadding * 2 + 25)) / 2 + scrollTop});
			}
			
			changeImage(settings.currentPhotoPos);
			
			settings.photoContainerOuter.css({opacity: 0, visibility: "visible"}).animate({opacity: 1}, 500);
			$("#black_overlay").css({opacity: 0, visibility: "visible"}).animate({opacity: 0.9}, 500);
			if(isOldIE) {
				$("#black_overlay").css({top: scrollTop+"px", left: scrollLeft+"px"});
			}
			settings.lightboxContent.css({opacity: 0, visibility: "visible"}).animate({opacity: 1}, 500);
		}
		
		var changeImage = function(imgNum) {
			//clear previous image
			settings.photoContainer.fadeTo(250, 0).html("");
	
			var photo = new Image();
			
			photo.onload = function() {
			
				var imgWidth = photo.width;
				var imgHeight = photo.height;
			
				settings.currentPhoto.html(settings.currentPhotoPos + 1);
				settings.totalPhotos.html(settings.lightboxPhotosLength);
			
				//set image description
				jQuery("#lightbox_description").html(lightboxImageTitles[imgNum] || "&nbsp;");
			
				settings.lightboxContent.animate({width: $("#lightbox_left").width() + 16 + (imgWidth + settings.photoPadding * 2), left: ($(window).width() - ($("#lightbox_left").width() + 16 + (imgWidth + settings.photoPadding * 2))) / 2 + scrollLeft, top: ($(window).height() - (imgHeight + settings.photoPadding * 2 + 25)) / 2 + scrollTop}, 500, "linear");
				$("#lightbox_right").animate({width: imgWidth + settings.photoPadding * 2}, 500, "linear");
			
				//set width and height of photo
				settings.photoContainer.animate({width: imgWidth, height: imgHeight}, 500, "linear", function() {
					//change image and show it
					settings.photoContainer.html('<img src="'+photo.src+'" width="'+imgWidth+'" height="'+imgHeight+'" title="'+lightboxImageAlts[imgNum]+'" alt="'+lightboxImageAlts[imgNum]+'">').fadeTo(250, 1);
				});//with animation
			
			};
			
			photo.src = (lightboxImageSrcs[imgNum] !="") ? lightboxPathPrefix + lightboxGalleryId + "/" + lightboxImageSrcs[imgNum] : lightboxNotAvialableImage ;
			
			//image wasn't uploaded
			///photo.onerror = function() {
			///	alert('error');
			///};
		
		}
		
		var closeLightBox = function() {
			settings.lightboxContent.add(settings.photoContainerOuter).add("#black_overlay").animate({opacity: 0}, 500, function() {$(this).css({visibility: "hidden", opacity: 1})});
		}
	}
})(jQuery);
