/*!
 * jquery.overlay 1.0.1. Overlay HTML with eyecandy.
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/overlay.html
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 *
 * Launch  : March 2008
 * Version : 1.0.1 - Wed Feb 18 2009 05:18:24 GMT-0000 (GMT+00:00)
 */
(function($)
		  {
			  var instances=[];
			  function fireEvent(opts,name,self,arg)
			  {
				  var fn=opts[name];
				  if($.isFunction(fn))
				  {
					  try{
						  return fn.call(self,arg);
					  }
					  catch(error){
						  if(opts.alert){
							  alert("Error calling overlay."+name+": "+error);
						  }else{
							  throw error;
						  }
						  return false;
					  }
				  }
				  return true;
			  }
			  function Overlay(el,opts){
			  
				  var self=this;
				  var trigger=null;
				  var w=$(window);
				  var jq=opts.target||el.attr("rel");
				  //alert(jq);
				  var o=jq?$(jq):null;
			      	  
				  if(!o){ o=el;}else{ trigger=el;}
				  
				  var bg=o.attr("overlay");
				   //alert("BG  :  "+bg + "  " +o);
				  if(!bg){
					  bg=o.css("backgroundImage");
					 
					  bg=bg.substring(bg.indexOf("(")+1,bg.indexOf(")"));
					  o.css("backgroundImage","none");
					  o.attr("overlay",bg);
				  }
				  if(!bg){
					  throw"background-image CSS property not set for overlay element: "+jq;
				  }
				  bg=bg.replace(/\"/g,"");
				  if(opts.preload){
					  $(window).load(function(){setTimeout(function(){var img=new Image();img.src=bg;},2000);});
				  }
				  var oWidth=o.outerWidth({margin:true});
				  var oHeight=o.outerHeight({margin:true});
				  var img=$('<img src="'+bg+'"/>');
				  img.css({border:0,position:'absolute'}).width(oWidth).hide();
				  $('body').append(img);
				  if(trigger){
					  trigger.bind("click.overlay",function(e){
															self.load(e.pageY-w.scrollTop(),e.pageX-w.scrollLeft());
															return e.preventDefault();
															});
				  }
				  if(!opts.close||!o.find(opts.close).length){
					  o.prepend('<div class="close"></div>');
					  opts.close="div.close";
				  }
				  var closeButton=o.find(opts.close);
				  $.extend(self,{load:function(top,left){
					   if(self.isOpened()){
						   return self;
					   }
					   if(opts.oneInstance){
						   $.each(instances,function(){this.close();});
					   }
					   if(fireEvent(opts,"onBeforeLoad",self)===false){return self;}
					   top=top||opts.start.top;left=left||opts.start.left;
					   var toTop=opts.finish.top;
					   var toLeft=opts.finish.left;
					   if(toTop=='center'){
						   toTop=Math.max((w.height()-oHeight)/2-30,0);
					   }
					   if(toLeft=='center'){
						   toLeft=Math.max((w.width()-oWidth)/2,0);
					   }
					   if(!opts.start.absolute){
						   top+=w.scrollTop();
						   left+=w.scrollLeft();
					   }
					   if(!opts.finish.absolute){
						   toTop+=w.scrollTop();toLeft+=w.scrollLeft();
					   }
					   img.css({top:top,left:left,width:opts.start.width,zIndex:opts.zIndex}).show();
					   img.animate({top:toTop,left:toLeft,width:oWidth},opts.speed,function(){
										o.css({position:'absolute',top:toTop,left:toLeft});
										var z=img.css("zIndex");closeButton.add(o).css("zIndex",++z);
										o.fadeIn(opts.fadeInSpeed,function(){
												fireEvent(opts,"onLoad",self);});});
					   return self;
					   },
					   getBackgroundImage:function(){return img;},
					   getContent:function(){return o;},
					   getTrigger:function(){return trigger;},
					   isOpened:function(){return o.is(":visible");},
					   getConf:function(){return opts;},
					   close:function(){
						   if(!self.isOpened()){
							   return self;
						   }
						   if(fireEvent(opts,"onClose",self)===false){return self;}
						   if(img.is(":visible")){img.hide();o.hide();}return self;
					   },
					   getVersion:function(){return[1,0,0];},
					   expose:function(){img.expose();}});
				  
				  closeButton.bind("click.overlay",function(){self.close();});
				  w.bind("keypress.overlay",function(evt){if(evt.keyCode==27){self.close();}});
				  if(opts.closeOnClick){
					  w.bind("click.overlay",function(evt){
						  if(!o.is(":visible, :animated")){return;}
						  var target=$(evt.target);
						  if(target.attr("overlay")){return;}
						  if(target.parents("[overlay]").length){return;}
						  self.close();
					  });
				  }}
				  jQuery.prototype.overlay=function(conf){
					  var api=this.eq(typeof conf=='number'?conf:0).data("overlay");
					  if(api){return api;}
					  var w=$(window);
					  var opts={
						  start:{
							  top:Math.round(w.height()/2),
							  left:Math.round(w.width()/2),
							  width:0,absolute:false},
						  finish:{
							  top:'center',left:'center',absolute:false
						  },
						  speed:'normal',fadeInSpeed:'fast',close:null,
						  oneInstance:true,closeOnClick:true,preload:true,zIndex:9999,target:null,alert:true
					  };
					  if($.isFunction(conf)){
						  conf={onBeforeLoad:conf};
					  }
					  $.extend(true,opts,conf);
					  this.each(function(){
						 var instance=new Overlay($(this),opts);
						 instances.push(instance);
						 $(this).data("overlay",instance);});
					  return this;};
		 })(jQuery);
