/*
 *
 *	@titre: jquery pop.
 *	@description: layer & popup javascript plugins.
 *	@auteur: ideoneov - http://bWw.ideoneov.com.
 *	@creation: 20110920 .
 *	@modification: - .
 *	@required: jquery 1.6.2.
 *
 */

(function($){

  if(!$.jqPop){
    $.jqPop = new Object();
  }

  $.jqPop.pop = function(el, eOpener, isLayer, options){
    var base = this;

    base.$el = $(el);
    base.el = el;

    base.$el.data('jqPop.pop', base);

    base.init = function(){

      if (typeof(eOpener) === 'undefined' || eOpener === null) eOpener = false;
      if (typeof(isLayer) === 'undefined' || isLayer === null) isLayer = true;

      base.eOpener    = eOpener;
      base.$eOpener   = $(base.eOpener);
      base.isLayer    = isLayer;
      base.cHeight    = 0;
      base.cPosition  = 0;

      base.options = $.extend({}, $.jqPop.pop.defaultOptions, options);

      if (typeof(base.options.mask) === 'undefined' || base.options.mask === null) base.options.mask = false;

      if (base.eOpener)
      {
        base.$eOpener.click(
          function (event)
          {
            event.preventDefault();
            base.open();

            return false;
          }
        );
				
      } else {
        base.open();
      }


      $(window).resize(base.setProp);
			
			base.$el.find(base.options.btnClose).click(base.close);
      $(base.options.maskElement).click(base.close);

      if (!base.options.scrollable)
      {
        $(document).scroll(
          function (e)
          {
            if (base.$el.is(':visible') && base.$el.height() < $(window).height())
              $(window).scrollTop(base.cPosition);
          }
        );
      }

    };

    base.setProp = function ()
    {
      var prop = $().getProp(base.$el, base.cHeight);
			
			prop.pop.top = prop.pop.top > base.options.minTop ? prop.pop.top : base.options.minTop

      $(base.options.maskElement).css({width: prop.body.width, height: prop.body.height, opacity: base.options.maskOpacity});
      base.$el.css({top: prop.pop.top, left: prop.pop.left});
    }

    base.open = function ()
    {
      if (base.options.maskElement && base.isLayer) {
        base.setProp();

        $(base.options.maskElement).fadeIn();
        base.$el.fadeIn();

        base.cHeight = $('body').height();
        base.cPosition = $(window).scrollTop();
      }
    };

    base.close = function ()
    {
      $(base.options.maskElement).fadeOut();
      base.$el.fadeOut();
			
			return false;
    };

    base.init();
  };

  $.jqPop.pop.defaultOptions = {
    maskElement:  '#mask',
    maskOpacity:  0.5,

    scrollable:   true,

    beforeShow:   false,
    afterShow:    false,
		
		btnClose: 		'.btn-close',
		
		minTop:				0
  };

  $.fn.pop = function(eOpener, isLayer, options)
  {
    return this.each(
        function()
        {
          (new $.jqPop.pop(this, eOpener, isLayer, options));
        }
      );
  };

  $.fn.getProp = function (popup, cHeight)
  {
    var wW = $(window).width(), wH = $(window).height();
    var dW = $(document).width(), dH = $(document).height();
    var bW = $('html').width(), bH = $('html').height();
    var pW = $(popup).width(), pH = $(popup).height();

    var lPos = (((wW - pW)/2) < 0)? 0 : (wW - pW)/2;
    var tPos = (((wH - pH)/2 + $(window).scrollTop()) < 0)? 0 : (wH - pH)/2 + $(window).scrollTop();

    bW = (bW < pW)? pW : bW;

    bH = (bH < dH)? dH : bH;
    bH = (bH < pH)? pH : bH;

    if (cHeight && cHeight < wH)
    {
      $('body').css({overflow: 'hidden'});
      bH = cHeight;
    } else {
      $('body').css({overflow: 'auto'});
    }


    var prop = {
      win:  {width: wW, height: wH},
      doc:  {width: dW, height: dH},
      body: {width: bW, height: bH},
      pop:  {width: pW, height: pH, top: tPos, left: lPos}
    };

    return prop;
  };

  $.fn.getPop = function()
  {
    this.data('jqPop.pop');
  };

})(jQuery);

