// JavaScript Document

$.fn.extend({flyout : function(options) {
		var shown=false;
		var animating=false;
		var $holder;
		var $thumb;
		var tloc;
		var th;
		var tw;
		var bigimg = new Image();
		var subType = 'img';
		var offset;
		
		this.click(function() {
			if (animating == true) { return false; }
			if (shown) { putAway(this); }
			else { flyOut(this); }
			return false;
		});
		
		var o = jQuery.extend({
			cookieLife : 500, /*czas życia cookie w sekundach */
			outSpeed : 1000,
			inSpeed : 500,
			outEase : 'swing',
			inEase : 'swing',
			loadingSrc: null,
			loader: 'loader',
			loaderZIndex: 500,
			widthMargin: 40,
			heightMargin: 40,
			loadingText : ".",
			closeTip : "Zamknij",
			destPadding: 20,
			startOffsetX: 0,
			startOffsetY: 0,
			startHeight: 0,
			startWidth: 0,
			imgOpacity: 1,
			flyOutStart: function(){},
			flyOutFinish: function(){},
			putAwayStart: function(){},
			putAwayFinish: function(){},
			shownClass: 'shown'
		}, options);
	
		function flyOut(it) {
			var cookieName = getCookie('F-A-2012-'+cookieLang);
			if (cookieName!=null && cookieName!=""){
				/* nie rób nic - ciasteczko jeszcze żyje */
			} else {
				animating = true;
				$holder = $(it);
				$thumb = $('img',it);
				bigimg = new Image(); 
				sL = $(window).scrollLeft();
				sT = $(window).scrollTop();
				tloc = $thumb.offset();
				tloc.left += o.startOffsetX;
				tloc.top += o.startOffsetY;
				th = (o.startHeight > 0 ? o.startHeight : $thumb.height());
				tw = (o.startWidth > 0 ? o.startWidth : $thumb.width());
				$('<div></div>').attr('id',o.loader)
								.appendTo('body')
								.css({'position':'absolute',
									'top':tloc.top,
									'left':tloc.left,
									'height':th,
									'width':tw,
									'opacity':.5,
									'display':'block',
									'border':'2px solid #fff',
									'cursor':'pointer',
									'z-index':o.loaderZIndex});

				if (o.loadingSrc) {
					$('#'+o.loader).append($('<img/>')
									.load(function() {
											$(this)
												.css({'position':'relative',
													 'top':th/2-(this.height/2),
													 'left':tw/2-(this.width/2)
													 })
												.attr('alt',o.loadingText);
											})
										.attr('src',o.loadingSrc)
									);
				} else {
					$('#'+o.loader).css('background-color','#000000')
									.append($('<span></span>')
													.text(o.loadingText)
												.css({'position':'relative',
													 'top':'2px',
													 'left':'2px',
													 'color':'#FFF',
													 'font-size':'9px'})
											);
				}
	
				$(bigimg).load(function() {
					imgtag = $('<img/>').attr('src',$holder.attr('href')).attr('title',$thumb.attr('title')+o.closeTip).attr('alt',$thumb.attr('alt')+o.closeTip).height(th).width(tw);
	
					o.flyOutStart.call(it);
	
					if (o.destElement) {
						var $dest = $(o.destElement);
						max_x = $dest.innerWidth() - (o.destPadding*2);
						max_y = $dest.innerHeight() - (o.destPadding*2);
					} else {
						max_x = $(window).width()-o.widthMargin;
						if ($.browser.opera) 
							wh = document.getElementsByTagName('html')[0].clientHeight;
						else 
							wh = $(window).height();
						max_y = wh-o.heightMargin;
					}
	
					width = bigimg.width;
					height = bigimg.height;
		
					x_dim = max_x / width;
					y_dim = max_y / height;
		
					if (x_dim <=y_dim) {
						y_dim = x_dim;
					} else {
						x_dim = y_dim;
					}
					
					dw = Math.round(width  * x_dim);
					dh = Math.round(height * y_dim);
					if (dw>width) {dw = width}
					if (dh>height) {dh = height}
					
					if (o.destElement) {
						dPos = $dest.offset();
						dl = Math.round(($dest.outerWidth()/2)-(dw/2)+dPos.left);
						dt = Math.round(($dest.outerHeight()/2)-(dh/2)+dPos.top);
					} else {
						dl = Math.round(($(window).width()/2)-(dw/2)+sL);
						if ($.browser.opera) 
							wh = document.getElementsByTagName('html')[0].clientHeight;
						else 
							wh = $(window).height();
						dt = Math.round((wh/2)-(dh/2)+sT);
					}
					
					$('#'+o.loader).empty().css('opacity',o.imgOpacity).append(imgtag).width('auto').height('auto').animate({top:dt, left:dl},{duration:o.outSpeed, queue:false, easing:o.outEase});
					$('#'+o.loader+' '+subType).animate({height:dh, width:dw}, o.outSpeed, o.outEase,
					function() {
						o.flyOutFinish.call(it);
						shown = it;
						$holder.addClass(o.shownClass);
						animating=false;
						$('#'+o.loader+' '+subType).click(function(){putAway(null)})
					});
					$('#'+o.loader).append($('<a title="Zamknij"></a>')
													.attr('href','#')
													.attr('title','Zamknij')
													.css({'position':'absolute',
													 'margin-top':'5px',
													 'margin-right':'5px',
													 'width':'30px',
													 'height':'30px',
													 'float':'right',
													 'display':'block'})
													).append($('<img/>').attr('src','images/closebox.png'));
					
				});
				
				bigimg.src = $holder.attr('href');
				setCookie('F-A-2012-'+cookieLang,'FESTIVAL-ANIMATOR-2012-BRANDMARK', o.cookieLife);
			}
		}
	
	
		function putAway(next) {
			// for future development:
			if (animating == true || shown == false) {return false;}
			o.putAwayStart.call(shown);
			
			animating = true;
			
			// check $thumb loc again, in case it moved...
			tloc = $thumb.offset();
			tloc.left += o.startOffsetX;
			tloc.top += o.startOffsetY;

			$('#'+o.loader).animate({top:tloc.top, left:tloc.left},{duration:o.inSpeed, queue:false, easing:o.inEase});
			$('#'+o.loader+' '+subType).animate({height:th, width:tw}, 
				o.inSpeed, o.inEase, 
				function() {
					$('#'+o.loader).css('display','none').remove(); 
					o.putAwayFinish.call(shown);
					animating=false;
					bigimg=null;			
					if (next && next != shown) {
						shown = false;
						flyOut(next);
					}
					shown = false;
					$holder.removeClass(o.shownClass);
				});
		}

		function setCookie(c_name,value,sec){
			var expiresec = sec*1000;
			var exdate=new Date();
			exdate.setTime(exdate.getTime()+expiresec);
			var expires = exdate.toGMTString();
			document.cookie=c_name+ "=" +escape(value) + ((expiresec==null) ? "" : ";expires="+expires);
		}
		
		function getCookie(c_name){
			if (document.cookie.length>0){
				c_start=document.cookie.indexOf(c_name + "=");
				if (c_start!=-1){
					c_start=c_start + c_name.length+1;
					c_end=document.cookie.indexOf(";",c_start);
					if (c_end==-1) c_end=document.cookie.length;
					return unescape(document.cookie.substring(c_start,c_end));
				}
			}
			return "";
		}
		
		return this;	// never break the chain
		
	}
});



