(function($){
   $.fn.aqLayer = function(options) {

	  // First pass, to get values that will extend the other options
      var opts = $.extend({
      	 imagePath: '/js/aqlayer/'
      }, options);

	  opts.imagePath += (opts.imagePath.substr(opts.imagePath.length-1, 1) == '/') ? '' : '/';

      opts = $.extend({
         attach: 'nw', offsetX: 0, offsetY: 0, 
         show: false, opacity: 0.9,
         closeBtn: false, closeImg: opts.imagePath + 'close.gif',
         noClose: false, 
         clone: false,
         layerCss: { 
				zIndex: 2, display: 'none', width: '185px', position: 'absolute',
            background: 'transparent url('+opts.imagePath+'layercss.gif) repeat' },
         topCss: { 
            height: '20px', 
            background: 'transparent url('+opts.imagePath+'topcss.gif) no-repeat top left' },
         botCss: { 
            height: '4px', 
            background: 'transparent url('+opts.imagePath+'botcss.gif) no-repeat bottom left' },
         midCss: { 
            color: '#222', 
            padding: '6px', margin: '0px', 
            float: 'none', clear: 'both', textAlign: 'left' }
      }, options);

      return this.each(function() {
         if ($('div',this).hasClass('aqLayer')) {
            if (typeof options == 'string') {
               if (options == 'hide') {
                  $(this).find('.aqLayer').fadeOut();
                  return false;
               } else if (options != 'show')
                  $(this).find('.aqLayer .mid').html(options);

               $(this).find('.aqLayer').show();
               return false;
            }

            $(this).find('.aqLayer').show();
            return false;
         }

         obj = $(this);
         var html = null;

         if (opts.clone) {
            html = obj.html();
            obj.empty().show();
         }

         $('<div class="aqLayer"><div class="top"><\/div><div class="mid"><\/div><div class="bot"><\/div><\/div>')
            .appendTo(obj);

         var $layer = $('.aqLayer', obj);
         $layer.find('.top').css(opts.topCss);
         $layer.find('.bot').css(opts.botCss);
         $layer.find('.mid').css(opts.midCss);
         
         var pos = obj.position();
         if (opts.position)
            pos = opts.position;

         var y = (opts.attach.match(/n/) ? 0 
            : (opts.attach.match(/s/) ? obj.height()
               : Math.round(obj.height()/2)));

         var x = (opts.attach.match(/w/) ? 0 
            : (opts.attach.match(/e/) ? obj.width()
               : Math.round(obj.width()/2)));

         if (obj.css('position') != 'absolute') {
            x += pos.left;
            y += pos.top;
         }

         if (typeof options == 'string') $layer.find('.mid').html(options);
         if (html) $layer.find('.mid').html(html);

         $layer.css({
            opacity: opts.opacity,
            position: 'absolute',
            left: x + opts.offsetX + 'px',
            top:  y + opts.offsetY + 'px'
         }).css(opts.layerCss);

         if (opts.closeBtn || opts.noClose) {
            if (opts.closeBtn) {
               $('.top',$layer).append('<div style="position:absolute;top:1px;right:4px"><img src="'+opts.closeImg+'"><\/div>');
               $('.top img',$layer).click(function(){$layer.fadeOut()});
            }

            if(typeof jQuery.fn.draggable != 'undefined')
               $layer.draggable();
         } else
            $layer.click(function(){$(this).fadeOut()});

         if (opts.show || typeof options == 'string') $layer.show();
      });
   };
})(jQuery);
