/**
 * @author Alexandre Magno
 * @desc Center a element with jQuery
 * @version 1.0
 * @example
 * $("element").center({
 *
 * 		vertical: true,
 *      horizontal: true
 *
 * });
 * @obs With no arguments, the default is above
 * @license free
 * @param bool vertical, bool horizontal
 * @contribution Paulo Radichi
 *
 */
jQuery.fn.center = function(params) {

    var options = {

      vertical: true,
      horizontal: true

    }
    op = jQuery.extend(options, params);

   return this.each(function(){

    //initializing variables
    var $self = jQuery(this);
    //get the dimensions using dimensions plugin
    var width = $self.width();
    var height = $self.height();
    //get the paddings
    var paddingTop = parseInt($self.css("padding-top"));
    var paddingBottom = parseInt($self.css("padding-bottom"));
    //get the borders
    var borderTop = parseInt($self.css("border-top-width"));
    var borderBottom = parseInt($self.css("border-bottom-width"));
    //get the media of padding and borders
    var mediaBorder = (borderTop+borderBottom)/2;
    var mediaPadding = (paddingTop+paddingBottom)/2;
    //get the type of positioning
    var positionType = $self.parent().css("position");
    // get the half minus of width and height
    var halfWidth = (width/2)*(-1);
    var halfHeight = ((height/2)*(-1))-mediaPadding-mediaBorder;
    // initializing the css properties
    var cssProp = {
      position: 'absolute'
    };

    if(op.vertical) {
      cssProp.height = height;
      cssProp.top = '50%';
      cssProp.marginTop = halfHeight;
    }
    if(op.horizontal) {
      cssProp.width = width;
      cssProp.left = '50%';
      cssProp.marginLeft = halfWidth;
    }
    //check the current position
    if(positionType == 'static') {
      $self.parent().css("position","relative");
    }
    //aplying the css
    $self.css(cssProp);


   });

};

