(function($) {$.tools = $.tools || {};$.tools.overlay = {version: '1.1.0',addEffect: function(name, loadFn, closeFn) {effects[name] = [loadFn, closeFn];},conf: {top: '10%',left: 'center',absolute: false,speed: 'normal',closeSpeed: 'fast',effect: 'default',close: null,	oneInstance: true,closeOnClick: true,closeOnEsc: true,api: false,expose: null,target: null }};var effects = {};$.tools.overlay.addEffect('default', function(onLoad) { this.getOverlay().fadeIn(this.getConf().speed, onLoad); }, function(onClose) {this.getOverlay().fadeOut(this.getConf().closeSpeed, onClose); });var instances = [];function Overlay(trigger, opts) {var self = this, w = $(window),closers,
overlay, opened,expose = opts.expose && $.tools.expose.version;var jq = opts.target || trigger.attr("rel");overlay = jq ? $(jq) : null || trigger;	if (trigger) {trigger.click(function(e) {self.load();return e.preventDefault();});}function bind(name, fn) {$(self).bind(name, function(e, args)  {if (fn && fn.call(this) === false && args) {args.proceed = false;}});return self;}$.each(opts, function(name, fn) {if ($.isFunction(fn)) { bind(name, fn); }});$.extend(self, {load: function() {if (self.isOpened()) { return self; } if (opts.oneInstance) {$.each(instances, function() {this.close();});}var p = {proceed: true};$(self).trigger("onBeforeLoad", p);				if (!p.proceed) { return self; }if (expose) { overlay.expose().load(); }var top = opts.top;if (typeof top == 'string')  {top = parseInt(top, 10) / 100 * w.height();}var left = opts.left;var oWidth = overlay.outerWidth({margin:true});var oHeight = overlay.outerHeight({margin:true});if (top == 'center') { top = Math.max((w.height() - oHeight) / 2, 0); }if (left == 'center') { left = Math.max((w.width() - oWidth) / 2, 0); }if (!opts.absolute)  {top += w.scrollTop();left += w.scrollLeft();}overlay.css({top: top, left: left, position: 'absolute'});effects[opts.effect][0].call(self, function() {$(self).trigger("onLoad");opened = true;});if (opts.closeOnClick) {					$(document).bind("click.overlay", function(evt) {if (!self.isOpened()) { return; }var et = $(evt.target); if (et.parents(overlay).length > 1) { return; }$.each(instances, function() {this.close();});});}if (opts.closeOnEsc) {$(document).unbind("keydown.overlay").bind("keydown.overlay", function(evt) {if (evt.keyCode == 27) {$.each(instances, function() {this.close();});}});}return self;},close: function() {if (!self.isOpened()) { return self; }var p = {proceed: true};$(self).trigger("onBeforeClose", p);if (!p.proceed) { return self; }effects[opts.effect][1].call(self, function() {opened = false;$(self).trigger("onClose");});var allClosed = true;$.each(instances, function() {if (this.isOpened()) { allClosed = false; }});if (allClosed) {$(document).unbind("click.overlay").unbind("keydown.overlay");}return self;},getContent: function() {return overlay;},getOverlay: function() {return overlay;},getTrigger: function() {return trigger;},getClosers: function() {return closers;},isOpened: function(){return opened;},getConf: function() {return opts;},onBeforeLoad: function(fn) {return bind("onBeforeLoad", fn);},onLoad: function(fn) {return bind("onLoad", fn);},onBeforeClose: function(fn) {return bind("onBeforeClose", fn);},onClose: function(fn) {return bind("onClose", fn);}});if (expose) {if (typeof opts.expose == 'string') { opts.expose = {color: opts.expose}; }$.extend(opts.expose, {api: true,closeOnClick: opts.closeOnClick,closeOnEsc: false});var e = overlay.expose(opts.expose);e.onBeforeClose(function() {self.close();});self.onClose(function() {e.close();});}closers = overlay.find(opts.close || ".close");if (!closers.length && !opts.close) {closers = $('<div class="close"></div>');overlay.prepend(closers);}closers.click(function() {self.close();});}$.fn.overlay = function(conf) {var el = this.eq(typeof conf == 'number' ? conf : 0).data("overlay");if (el) { return el; }if ($.isFunction(conf)) {conf = {onBeforeLoad: conf};}var opts = $.extend({}, $.tools.overlay.conf);$.extend(true, opts, conf);this.each(function() {el = new Overlay($(this), opts);instances.push(el);$(this).data("overlay", el);});return opts.api ? el: this;};})(jQuery);
