
$(function () {

	// CSS-Dateien laden

	try {
		var path = $('script[src$="dblightbox.js"]').attr('src').split('dblightbox.js')[0];
		$.loadCSS( path + 'dblightbox.css' );
	} catch (e) {}
	
});


(function($){

	
	$.fn.extend({
	
		'zoomLens': function ( opt ) {
		
			var def = {
					url: '',
					onClick: false,
					offset: {left:0, top:0}
				};
				
			var opt = $.extend( def, opt);
			
			return this.each( function () {
				
				var bld = $(this);

				close();
				$(this).parent().append('<div class="nclupe_outer"><div class="nclupe">&nbsp;</div></div>');				
				var linse = $(this).parent().find('.nclupe');
				var linse_outer = linse.parent();
				
				var bgimg_size = {width:0, height:0};
				 
				var temp = linse.append('<img src="'+opt.url+'" />');
				
				linse.find('img').load( function () {
					linse.show();
					bgimg_size = {width:$(this).width(), height:$(this).height()};
					$(this).remove();
					linse.css({'background-image':'url('+opt.url+')'});
					bld.unbind('mousemove').mousemove(setPosition);
					$('.dblightbox').unbind('mousemove').mousemove(setPosition);
					linse.hide();
				});
				
				linse.click( function () {
					if (opt.onClick) opt.onClick();
				});
				
				function setPosition (e) {
				
					var ratio = {width:bgimg_size.width/bld.width(), height:bgimg_size.height/bld.height()};

					var leftPos = parseInt(e.pageX - bld.offset().left);
					var topPos = parseInt(e.pageY - bld.offset().top);
					
					var diffx = bld.offset().left - linse_outer.offset().left ;
					var diffy = bld.offset().top - linse_outer.offset().top;
					
					if (leftPos < 0 || topPos < 0 || leftPos > bld.width() || topPos > bld.height()) {
						linse.hide();
					} else {
						linse.show();
						
						bgX = e.pageX - bld.offset().left - opt.offset.left;
						bgX *= ratio.width;
						bgX -= linse.width()/2;
						bgX *= -1;
						
						
						bgY = e.pageY - bld.offset().top -opt.offset.top;
						bgY *= ratio.height;
						bgY -= linse.height()/2;
						bgY *= -1;
						//window.console.log(bgY);
						linse.css({ 'background-position': bgX + 'px ' + bgY + 'px' });
						
						linseX = e.pageX - bld.offset().left - linse.width()/2 + diffx;
						linseY = e.pageY - bld.offset().top - linse.height()/2 + diffy;
			
						//linse.find('.text').remove();
						//linse.prepend('<div class="text">'+(e.pageX +' '+bld.offset().left+' '+linse.width())+'</div>');
						
						linse.css({ left: linseX + 'px', top: linseY + 'px' });		
					}
				}
				
				function close () {
					$(this).parent().find('.nclupe').unbind('mousemove').remove();
					bld.unbind('mousemove');
					$(this).parent().find('.nclupe_outer').remove();
					$('.dblightbox').unbind('mousemove');
				}
			});
		}
	});
	
	
	
	$.extend({
	
		'loadCSS': function ( url ) {
			var tag = $('<link />');
			tag.attr( {type:'text/css', rel:'stylesheet', href:url } );
			$('head').append(tag);
		},
		
		'iframeBox': function ( opt ) {
			opt.loadAsFrame = true;
			$.urlBox( opt );
		},
		
		'urlBox': function ( opt ) {
		
			var def = {
					onLoad: false,
					url: false,
					target: 'body',
					width: 400,
					height: 200,
					offset: {left:0, top:0},
					loadAsFrame: false
				};
			
			var opt = $.extend( def, opt );
			var me = this;
			
			var _p = {
						open: false,
						frame: false,
						frame_inner: false,
						close_btn: false,
						preloader: false, 
						balken: false
					};
			
			me.init = function () {
				$('.dburlbox').remove();
				$('body').prepend('\
					<div class="dburlbox">\
						<div class="dburlbox_bg"></div>\
						<div class="dburlbox_close"></div>\
						<div class="dburlbox_preloader">\
							<div class="balken"></div>\
						</div>\
						<div class="dburlbox_frame">\
							<div class="dburlbox_frame_inner"></div>\
						</div>\
					</div>\
				');
				
				if (opt.addClass) $('.dblightbox').addClass(opt.addClass);
				
				_p.frame = $('.dburlbox_frame');
				_p.frame_inner = $('.dburlbox_frame_inner');
				_p.close_btn = $('.dburlbox_close');
				_p.preloader = $('.dburlbox_preloader');
				_p.balken = $('.dburlbox_preloader .balken');
			}
			
			me.open = function () {
				
				if (_p.open) return;
				_p.open = true;
				
				me.adjust_position();
				$('.dburlbox').hide().fadeIn('fast');
				$('.dburlbox_bg').unbind().click( me.close );
				_p.close_btn.unbind().click( me.close );
				
				_p.frame.css( {width:opt.width, height:opt.height} );
				
				$(window).resize( me.adjust_position );
				$(window).scroll( me.adjust_position );
				
			}

			me.close = function () {
				if (!_p.open) return;
				_p.open = false;
				$('.dburlbox').fadeOut( 'fast', function () {
					$('.dburlbox').hide();
					$(window).unbind( 'resize', me.adjust_position );
					$(window).unbind( 'scroll', me.adjust_position );
				});
			}
			
			me.adjust_position = function () {
				$('.dburlbox').css( {top:$(document).scrollTop() } );
				var w = $(window);				
				var oT = opt.offset.top;
				var oL = opt.offset.left;
				
				_p.frame.css( {top:(w.height()-_p.frame.height())/2+oT, left:(w.width()-_p.frame.width())/2+oL } );
				var o = _p.frame.position();
				_p.close_btn.css( {top:o.top-15, left:o.left+_p.frame.width()-25} );

			}

			me.display = function ( opt ) {

				_p.loaded = false;

				me.open();
				_p.frame.show();
				me.adjust_position();

				if (!opt.loadAsFrame) {
					_p.balken.stop(true, true).css({width:0}).animate({width:_p.preloader.width()}, 5000);
					_p.preloader.css( {top:$(window).height()/2, left:($(window).width()-_p.preloader.width())/2} ).stop(true, true).show().fadeIn('fast');

					$.ajax({
						url:	 opt.url,
						success: function ( data ) {
								_p.frame_inner.html( $(opt.target, data)[0] );
								_p.preloader.hide();
							}
					});
				} else {
					var div = '<iframe src="'+opt.url+'" width="'+opt.width+'" height="'+opt.height+'" scrolling="no" noresize border="0" frameborder="0" />';
					_p.frame.html( div );
				}
			}
			
			me.init();
			me.display( opt );
			
			return me;

		},
		
		'lightBox': function ( imgArr, cnt, opt ) {
		
			var def = { 
					onLoad: false,
					addClass: '',
					offset: {left:0, top:0}
				};
					
			var opt = $.extend( def, opt );
			
			var me = this;
			
			var _p = {
					open:			false,
					img: 			false,
					img_src_size:	{w:0, h:0},
					img_div:		false,
					close_div:		false,
					navi_div:		false,
					next_div:		false,
					back_div:		false,
					text_div:		false,
					preloader_div:	false,
					balken_div:		false,
					imgArr:			[],
					cnt:			0,
					loaded:			0
				};		
			
			me.init = function () {
				$('.dblightbox').remove();
				$('body').prepend('\
					<div class="dblightbox">\
						<div class="dblightbox_bg"></div>\
						<div class="dblightbox_close"></div>\
						<div class="dblightbox_navi">\
							<div class="back"></div>\
							<div class="next"></div>\
						</div>\
						<div class="dblightbox_preloader">\
							<div class="balken"></div>\
						</div>\
						<div class="dblightbox_info"></div>\
						<div class="dblightbox_img">\
							<img src="" />\
						</div>\
					</div>\
				');
				
				if (opt.addClass) $('.dblightbox').addClass(opt.addClass);
				
				_p.img = $('.dblightbox_img img');
				_p.img_div = $('.dblightbox_img');
				_p.close_div = $('.dblightbox_close');
				_p.navi_div = $('.dblightbox_navi');
				_p.next_div = $('.dblightbox_navi .next');
				_p.back_div = $('.dblightbox_navi .back');
				_p.preloader_div = $('.dblightbox_preloader');
				_p.balken_div = $('.dblightbox_preloader .balken');
				_p.text_div = $('.dblightbox_info');
			}
			
			me.open = function () {
				
				
				if (_p.open) return;
				_p.open = true;
				
				me.adjust_position();
				$('.dblightbox').hide().fadeIn('fast');
				$('.dblightbox_bg').unbind().click( me.close );
				_p.close_div.unbind().click( me.close );
				_p.next_div.unbind().click( me.next_image );
				_p.back_div.unbind().click( me.prev_image );
						
				$(window).resize( me.adjust_position );
				$(window).scroll( me.adjust_position );
				
			}
			
			me.close = function () {
				if (!_p.open) return;
				_p.open = false;
				$('.dblightbox').fadeOut( 'fast', function () {
					$('.dblightbox').hide();
					$(window).unbind( 'resize', me.adjust_position );
					$(window).unbind( 'scroll', me.adjust_position );			
					_p.img.attr('src', '');
					_p.img_div.hide();
				});
			}
			
			me.adjust_position = function () {
				$('.dblightbox').css( {top:$(document).scrollTop() } );
				var w = $(window);
				var f = Math.min( w.height() / _p.img_src_size.h, w.width() / _p.img_src_size.w)*0.95;
				if (f > 1) f = 1; 
				
				var oT = opt.offset.top;
				var oL = opt.offset.left;
				
				_p.img.css( {width:_p.img_src_size.w*f, height:_p.img_src_size.h*f} );
				_p.img_div.css( {top:($(window).height()-_p.img.height())/2+oT, left:($(window).width()-_p.img.width())/2+oL } );
				var o = _p.img_div.position();
				_p.close_div.css( {top:o.top-10, left:o.left+_p.img_div.width()-25} );
				_p.navi_div.css( {top:o.top+_p.img_div.height()-50, left:o.left+(_p.img_div.width()-_p.navi_div.width())/2 } );
				_p.text_div.css( {top:o.top+_p.img_div.height(), left:o.left, width:_p.img_div.width()} );

			}
			
			me.display = function ( objArr, cnt ) {
				
				_p.imgArr = $.isArray(objArr) ? objArr : [objArr];
				_p.cnt = cnt ? cnt : 0;
				_p.loaded = 0;
				
				me.open();
				me.fade_and_swop_image( _p.imgArr[_p.cnt] );
				if (_p.imgArr.length <= 1) _p.navi_div.remove();

			}
		
			me.fade_and_swop_image = function ( obj ) {
				_p.text_div.stop( true, true ).fadeOut('fast');
				_p.close_div.hide();
				_p.navi_div.hide();
				_p.img_div.stop( true, true ).fadeOut('fast', function () {
		
					_p.balken_div.stop(true, true).css({width:0});
					_p.balken_div.animate({width:_p.preloader_div.width()}, 5000);
					_p.preloader_div.stop(true, true).show().fadeIn('fast');
					
					_p.preloader_div.css( {top:$(window).height()/2, left:($(window).width()-_p.preloader_div.width())/2} );
					
					_p.img.css({width:'',height:''}).removeAttr('width').removeAttr('height');
								
					_p.img.unbind();
					_p.img.load( function () {
						_p.loaded++;
						_p.img_div.stop(true, true).fadeIn( 'fast' );
						_p.text_div.delay(500).stop(true, true).fadeIn( 'fast' );
						_p.preloader_div.stop(true, true).hide();
						_p.img.css({width:'auto', height:'auto'});
						_p.img_src_size = {w:_p.img.width(),h:_p.img.height()};
						_p.text_div.html( _p.imgArr[_p.cnt].text );
						me.adjust_position();
						_p.close_div.show();
						_p.navi_div.show();
						if (opt.onLoad) opt.onLoad( {img:_p.img, srcSize:_p.img_src_size, size:{width:_p.img.width(),height:_p.img.height()} } );
					});
					
					_p.img.attr('src', obj.full );
				});
			}
			
			me.next_image = function () {
				_p.cnt = (_p.cnt+1)%_p.imgArr.length;
				me.fade_and_swop_image( _p.imgArr[_p.cnt] );
			}
		
			me.prev_image = function () {
				_p.cnt--;
				if (_p.cnt < 0) _p.cnt = _p.imgArr.length-1;
				me.fade_and_swop_image( _p.imgArr[_p.cnt] );
			}
			
			
			me.init();
			me.display( imgArr, cnt );
			
			return me;
		}
	});
	
	

})(jQuery);

