/**
 * @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
 *
 */
 
 /**
 * @author youji maekawa
 * @desc Center a element with jQuery (with lightbox)
 * @version 1.0
 * @example
 * $("element").center({
 *
 * 		vertical: true,
 *      horizontal: true
 *
 * });
 * @lightbox使用時にdocumentサイズが取得できずに配置がおかしくなってしまうので、
 * @bodyサイズが取得できるまで待機するように修正
 * @待機中は画像を非表示にしています
 *
 */
 
jQuery.fn.center = function(params) {

	var options = {
	
		vertical: true,
		horizontal: true
	
	}
	op = jQuery.extend(options, params);

	return this.each(function(){
		tryCentering(jQuery(this));
	});
	function tryCentering($_self){
		var $self = $_self;
		var timer;
		if(!setCentering($self)){
			$self.css("visibility", "hidden");
			var timer = setInterval(function(){
				setCentering($self);
			},100);
		}else{
			clearInterval(timer);
		}
	}
	function setCentering($self){
		if($("body").height() <= 0 || $("body").height() == null){
			return false;
		}else{
			$self.css("visibility", "visible");
		}
		
		//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);
		
		return true;
	}

};
