var ajaxLBshown = 0;
var ajaxLBCounter = 0;
jQuery.fn.ajaxLB = function(_options){
	// defaults options	
	var _options = jQuery.extend({
		initObj: false,
		faderOpacity: 0.8,
		faderBackground: '#000000',
		closeLink:'a.close, a.btn-close',
		ajaxURL: false,
		duration: 400,
		onDOMreadyLoad: false,
		hideOnfadeClick: false,
		onLoad: null,
		onShow: null,
		onClick: null,
		onClose: null,
		fixed: false
	},_options);
	
	return this.each(function(){
		var _this = $(this);
		_this.shownFlag = false;
		var _d = $.browser.msie ? 0: _options.duration;
		//init function 
//create container
			jQuery('body').append('<div class="truelightbox lightbox-content'+ajaxLBCounter+'"></div>');
			if (!jQuery('div.lightbox-fader').length)
					jQuery('body').append('<div class="lightbox-fader"></div>');
			if (!jQuery('div.lightbox-loader').length)
				jQuery('body').append('<div class="lightbox-loader"><img src="/images/loader.gif" alt="image"></div>');

			var _lightbox = jQuery('.lightbox-content'+ajaxLBCounter);
			
			var _loader = jQuery('div.lightbox-loader');
			var _fader = jQuery('div.lightbox-fader');
//default style
			_lightbox.css({
				position: 'absolute',
				zIndex: 999,
				top: '-9999px',
				left: '-9999px'
			});
			_loader.css({
				display:'none',
				position:'absolute',
				//top: '50%',
				top: 0,
				left:'50%',
				zIndex:999
			});
			_fader.css({
				opacity: _options.faderOpacity,
				backgroundColor: _options.faderBackground,
				display:'none',
				position:'fixed',
				top:0,
				left:0,
				zIndex:998,
				textIndent: -9999
			}).text('&nbsp;');
			//for IE 6
			if(typeof(document.body.style.maxHeight) == 'undefined'){
				var _frame = $('<iframe src="javascript:false" />');
				_frame.css({opacity: 0,clear: 'both',position: 'absolute',left: 0,top: 0,width: "100%",height: "100%",zIndex: 0});
				_fader.html(_frame);
			};
			if(_options.onDOMreadyLoad){
				if(_options.ajaxURL){
					var _lbIsLoaded = $('body > div').filter('[loader*='+_options.ajaxURL+']:eq(0)');
					if(_lbIsLoaded.length){
						_this.shownFlag = true;
						showLB(_lbIsLoaded);
					}else{
						loadLB(_options.ajaxURL, _lightbox);
					}
				};
			}else{
				if(_options.initObj && $(_options.initObj).length){
					$(_options.initObj).click(function(){
						var _url = _options.ajaxURL ? _options.ajaxURL : $(this).attr('href');
						var _lbIsLoaded = $('body > div').filter('[loader*='+_url+']:eq(0)');
						if(_lbIsLoaded.length){
							_this.shownFlag = true;
  						
						showLB(_lbIsLoaded);

						}else{
							var _url = _options.ajaxURL ? _options.ajaxURL : $(this).attr('href');
							loadLB(_url, _lightbox);
						}
						return false;
					});
				}
			};
			ajaxLBCounter++;
//loadLB
		function loadLB(_url, _lightbox){
			_fader.show();
			//_loader.show();
			_lightbox.attr('loader', _url);
			$.ajax({
				url: _url,
				success: function(msg){
					_lightbox.html(msg);
					var _content = _lightbox.children(':eq(0)').show();
					if (jQuery.isFunction(_options.onLoad)){
						_options.onLoad.apply(_lightbox);
					}
										
					var _images = _lightbox.find('img');
					if (_images.length){
						var _imgCount = _images.length;
						var _imgLoaded = 0;
            
						_images.each(function(){
							var _img = new Image();
							_img.onload = function(){
								_imgLoaded =_imgLoaded+1;
								if(_imgLoaded >= _imgCount) {
									
									_this.shownFlag = true;
									showLB(_lightbox, _this.shownFlag);
								};
							};
							_img.src = $(this).attr('src');
						});
					}else{
						_this.shownFlag = true;
						showLB(_lightbox, _this.shownFlag);
					};
				},
				error: function(){
					alert('Ajax error. Maybe incorect link to popup file.');
				}
			});


			jQuery(document).keydown(function (e){
				if (!e) evt = window.event;
				if (e.keyCode == 27){
					_lightbox.hide();
					_fader.fadeOut(300);
					_loader.fadeOut(300);
					_this.shownFlag = false;
				}
			});
		};
//positionLB
		function positionLB(_lbox){
			if(_this.shownFlag){
				var _content = _lbox.children(':eq(0)').show();
				var _h = _content.innerHeight(true);
				var _w = _content.innerWidth(true);
				_lbox.css({
					width: _w,
					height: _h
				});

				var _height = 0;
				var _width = 0;
				var _minWidth = jQuery('body > div:eq(0)').outerWidth();
				if (window.innerHeight) {
					_height = window.innerHeight;
					_width = window.innerWidth;
				} else {
					_height = document.documentElement.clientHeight;
					_width = document.documentElement.clientWidth;
				}
				var _thisHeight = _lbox.outerHeight();
				var _page = jQuery('body > div:eq(0)');
				if (_lbox.length){
					if (_height > _thisHeight){
						if (_height > _page.outerHeight(true)) _fader.css('height',_height); else _fader.css('height',_page.innerHeight());
					}else{
						if (_height > _page.outerHeight(true)) _fader.css('height',_height); else _fader.css('height',_thisHeight);
					}
					if (_width < _minWidth){_fader.css('width',_minWidth);} else {_fader.css('width','100%');}
					if (_height > _thisHeight){
            _lbox.css({
              position:'absolute',
              top: (document.documentElement.scrollTop + (_height - _thisHeight) / 2)+"px"
              //top: document.documentElement.scrollTop + "px"
            });
					}else{
            
              _lbox.css({
                position:'absolute',
                top: 0
              });
            
						_lbox.css({
							height:_thisHeight
						});
					};
					if (_width > _lbox.outerWidth()) _lbox.css({left:(_width - _lbox.outerWidth()) / 2 + "px"});
					else _lbox.css({position:'absolute',left: 0});
				};
			}
		};
//showLB
		function showLB(_lbox){
			positionLB(_lbox);
			if(_this.shownFlag){				
				_loader.hide();

				_fader.fadeIn(300, function(){
					_this.shownFlag = true;
					_lbox.fadeIn(_d,function(){
						ajaxLBshown++;
						if (jQuery.isFunction(_options.onShow)){
							_options.onShow.apply(_lbox);
						}
					});
					positionLB(_lbox);
				});

				jQuery(_options.closeLink, _lbox).click(function(){
					/* is overwritten
					_lbox.fadeOut(_d, function(){
						--ajaxLBshown;
						if(!ajaxLBshown) {
							_fader.fadeOut(300);
						}
					});
					*/
					return false;
				});

				if(_options.hideOnfadeClick){
					_fader.click(function(){
						_lbox.fadeOut(_d, function(){
							--ajaxLBshown;
							if(!ajaxLBshown) _fader.fadeOut(300);
						});
						return false;
					});
				}
			}
		};

		jQuery(window).resize(function(){
			positionLB(_lightbox);
		});
		jQuery(window).scroll(function(){
			//positionLB(_lightbox);
		});
	});
}
