
(function($) {

    jQuery.fn.modal = function(modalOpts){
    	
	    var settings = {
		    url: '#',
		    backgroundColor: "#000",
		    backgroundOpacity: 0.5,
		    position: "center",
		    referencePosition: this,
		    top:0,
		    left:0,
		    closeEsc:true,
		    closeClickOut: false,
		    autoOpen: false,
		    loadImage: "i/load.gif"
	    };
	    modalOpts = jQuery.extend(settings, modalOpts);
    	
    	
	    function openModal(){
		    var altura = 0,
		        offset = null,
		        imgL = new Image();
		    
		    imgL.src = settings.loadImage;
		    
		    // CREATE ELEMENTS
		    jQuery("body")
		        .append(jQuery("<img id=\"_iLoad\"  class=\"load\" alt=\"\" />"))
		        .append(jQuery("<div id=\"_bModal\" class=\"bg_modal\"></div>"))
		        .append(jQuery("<div id=\"_vModal\" class=\"view_modal\"></div>"))
		        .end();
    		
    		jQuery("#_iLoad").attr("src", imgL.src).css("width", "88px").css("height", "78px").end();
    		
		    // verificando se o body é menor do que o screen
		    altura = jQuery("html")[0].scrollHeight < jQuery(window).height() ? jQuery(window).height() : jQuery("html")[0].scrollHeight;
		    jQuery("#_bModal").width(jQuery("html")[0].scrollWidth).height(altura).end();
    		
		    // OPACITY
		    if(modalOpts.backgroundOpacity != 0){
			    jQuery("#_bModal").css("background-color", modalOpts.backgroundColor).css("opacity", 0).end();
		    }
    		
		    // escondendo selects
		    jQuery("select").css("visibility", "hidden");

		    // posicionamento
		    if(modalOpts.position == "relative"){
			    offset    = modalOpts.referencePosition.offset();
			    leftModal = offset.left;		
			    topModal  = offset.top;		
		    }
    		
		    // SHOW BACKGROUND
		    jQuery("#_bModal").fadeTo("fast", modalOpts.backgroundOpacity, function() {
		        jQuery("#_vModal").empty().load(modalOpts.url, function() {
		        
				    // REMOVE LOAD IMAGE
				    jQuery("#_iLoad").remove();
    				
				    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 (modalOpts.position != "center"){
					    var alturaModal = parseInt(modalOpts.top) + parseInt(topModal) + parseInt(jQuery("#_vModal").height());
					    if (altura < alturaModal){
						    modalOpts.top = 0;
						    topModal = altura - parseInt(jQuery("#_vModal").height());
					    }					
					    jQuery("#_vModal").css({
							    marginTop:  topModal, 
							    marginLeft: leftModal,
							    left:       modalOpts.left,
							    top:        modalOpts.top
						    }
					    );
    					
				    } else {
					    jQuery("#_vModal").css({
					            marginTop:  parseInt(GB_getPageScrollTop() - (jQuery("#_vModal").height() / 2)),
					            marginLeft: -parseInt(jQuery("#_vModal").width() / 2)
				            });
                    }
                    
                    // MODAL SHOW
				    if (modalOpts.backgroundOpacity != 0){
				        jQuery("#_vModal").fadeTo("fast", 1);
				    }

                    try{
                        pageTracker._trackPageview("/" + modalOpts.url.replace(_SitePath, ""));
                    }catch(err){}

				    // CLOSE MODAL
				    jQuery("a[@rel~='modalclose']").click(function() {
					    closeModal();
					    return false;
				    })
			    });
		    });		
    		
		    if (modalOpts.closeClickOut==true){
			    jQuery("#_bModal").click(function(){
				    closeModal();
			    });
		    }

		    if (modalOpts.closeEsc == true){
			    jQuery(document).keydown(function(event){
				    if(event.keyCode == 27){ closeModal() };
			    });
		    }
		    return false;
	    }

	    if(modalOpts.autoOpen == false){
		    this.click(openModal);	
	    } else {
		    openModal();
	    }
    	
	    // CLOSE MODAL
	    function closeModal(){
	        jQuery("#ifrVideo").remove();
	        jQuery("#medTV").remove();
		    
		    // HIDE MODAL
		    jQuery("#_vModal").fadeTo("fast", 0, function(){
		        jQuery(this).remove();
		    });
    		
		    // HIDE BACKGROUND
		    jQuery("#_bModal").fadeTo("fast", 0, function() {
			    jQuery(this).remove();
			    jQuery("select").css("visibility", "visible");
		    });
    		
		    jQuery(document).unbind("keydown");
		    jQuery("#_bModal").unbind();
	    }
	    
	    this.css("visibility", "visible");
    };
    
})(jQuery);

/*
jQuery(document).ready(function(){
    jQuery("a[rel=modal]").each(function(){
	    jQuery(this).modal();	
    });
});
*/