jQuery.fn.modal = function(options){
    var closeMsg = '<div style="float: right; text-aling: right; padding: 2px;" id="closemodal" class="clear"><a href="javascript: void(0);" rel="modalclose" title="Clique para Fechar" style="color: #5a5a5a; font-size: 11px; font-family: Verdana, Arial, Helvetica; text-decoration: none;"><img src="http://www.portaltributario.net.br/images/close.gif" alt="Clique aqui"></a></div>';
	// VERIFICANDO O HREF
	if(!options){
	  if(this.attr('href')) var options = { url: this.attr('href') };
	} else {
	  if(!options.url)if(this.attr('href')) options.url = this.attr('href');
	}
	// VERIFICANDO O HREF
	var settings = {
      url: '#',
      ajax: false,
      msg: '',
      focu: '',
      form: '',
      img: 'images/load.gif',
      backgroundColor: '#d1eaf9',
      backgroundOpacity: 0.8,
      position: 'center',
      referencePosition: this,
      top:0,
      left:0,
      buttonClose:true,
      closeEsc:true,
      closeClickOut: false
	};
	options = jQuery.extend(settings, options);

	function openModal() {
		/*CREATE ELEMENTS*/
		$('body').append($('<img />').attr({src: options.img, alt: "", className: 'load'})).append($('<div></div>').addClass('bg_modal')).append($('<div></div>').addClass('view_modal'));
		// verificando se o body é menor do que o screen
		var altura = $('html')[0].scrollHeight < $(window).height() ? $(window).height() : $('html')[0].scrollHeight;
		$('.bg_modal').width($('html')[0].scrollWidth).height(altura);
		/*OPACITY*/
		if(options.backgroundOpacity != 0){
			$('.bg_modal').css('background-color',options.backgroundColor);
			$('.view_modal').css('opacity', 0);
			$('.bg_modal').css('opacity', 0);
		}
		// escondendo selects
		$('select').css('visibility', 'hidden');
		// posicionamento
		if(options.position=='relative'){
			var offset  = options.referencePosition.offset();
			leftModal = offset.left;
			topModal =  offset.top;
		}
    GB_getPageScrollTop = function() {
      var yScrolltop;
      if (self.pageYOffset) {
        yScrolltop = self.pageYOffset;
      } else if (document.documentElement && document.documentElement.scrollTop || document.documentElement.scrollLeft) {
        yScrolltop = document.documentElement.scrollTop;
      } else if (document.body) {
        yScrolltop = document.body.scrollTop;
      }
      return yScrolltop;
    }
    /*CENTRALIZE MODAL*/
    if(options.position!='center'){
      var alturaModal = parseInt(options.top) + parseInt(topModal) + parseInt($('.view_modal').height());
      if(altura<alturaModal){
        options.top = 0;
        topModal = altura - parseInt($('.view_modal').height());
      }
      $('.view_modal').css({
          marginTop: topModal,
          marginLeft: leftModal,
          left: options.left,
          top: options.top
        }
      );
    } else {
      $('.view_modal').css({marginTop: parseInt(GB_getPageScrollTop() - ($('.view_modal').height()/2)), marginLeft: -parseInt($('.view_modal').width()/2)});
    }
		/*SHOW BACKGROUND*/
		$('.bg_modal').fadeTo('fast', options.backgroundOpacity, function() {
      if(options.ajax == true) {
  			$('.view_modal').load(options.url,{nocacheattr:(new Date()).getTime()}, function() {
  				/*REMOVE LOAD*/
  				$('.load').remove();
  				/*MODAL HIDE*/
  				if(options.backgroundOpacity != 0) $('.view_modal').fadeTo('fast', 1);
  				/*CLOSE MODAL*/
  				$("a[rel='modalclose']").click(function() {
  					closeModal();
  					return false;
  				})
  			});
      } else {
        $('.load').remove();
        /*MODAL HIDE*/
        if(options.backgroundOpacity != 0) $('.view_modal').fadeTo('fast', 1);
        //msg
        $('.view_modal').html(options.msg+((options.buttonClose==true)?closeMsg:''));
        /*CLOSE MODAL*/
        $("a[rel='modalclose']").click(function() {
        	closeModal();
        	return false;
        })
      }
		});

		if(options.closeClickOut==true){
			$('.bg_modal').click(function(){
				closeModal();
			});
		}

		if(options.closeEsc==true){
			$(window).keydown(function(event){
				if(event.keyCode==27)closeModal();
			});
		}
		return false;
	}

    openModal();

	/*CLOSE MODAL*/
	function closeModal(){
		/*HIDE MODAL*/
		$('.view_modal').fadeTo('fast', 0, function(){$(this).remove();});

		/*HIDE BACKGROUND*/
		$('.bg_modal').fadeTo('fast', 0, function() {
			$(this).remove();
			$('select').css('visibility', 'visible');
		});

		$(window).unbind();
		$('.bg_modal').unbind();
    if(options.focu != '' && options.form != '') {
      foco = options.focu.substr(0, options.focu.indexOf('.'));
      if(document.getElementById(options.form) && options.form!='') {
        for(i = 0; i < document.getElementById(options.form).length; i++) {
          if(document.getElementById(options.form).elements[i].name == foco) {
            try {
              document.getElementById(options.form).elements[i].focus();
            } catch(err) {//manipula erros
            }
          }
        }
      } else {
        foco = options.focu.substr(0, options.focu.indexOf('.'));
        if(document.getElementById(foco)) document.getElementById(foco).focus();
      }
    }
	}

	this.css('visibility','visible');
};
