/*
 * jQuery radio and checkbox replacement
 * http://crgdesign.com.br/blog/
 *
 * Copyright (c) 2009 Carlos Roberto Gomes Júnior
 * Dual licensed under the MIT and GPL licenses.
 * 
 * Date: 2009-05-19 18:31:00 +0300 (Wed, 19 Mai 2009)
 * Revision: 1
 */
(function() {

jQuery.fn.jframe = function(options) {
   
  // jQuery.easing.def = "easeOutBounce";
   
   settings = jQuery.extend({
      opacity:0.6,
      width:800,
      animationTime:1200,
      closeElement:"#close"
   }, options);


   function setInterface(){
      var pageSize = getPageSize();
      var pageScrool = getPageScroll();
      $("body").append('<div id="jframe-overlay"></div><div id="jframe-container"><div id="jframe"></div></div>');
      $("#jframe-container").css({top:-1600});
      $("#jframe").css({width:settings.width}).hide();
   
   $("body").append('<div id="jframe-preloader-container"><span id="jframe-preloader">Carregando...</span></div>');
   
   $("#jframe-preloader-container").css({top:getPageScroll()[1]});
      
   $(window).scroll(function(){
     $("#jframe-preloader-container").css({top:getPageScroll()[1]});
   });      
   
   /*opera fix para opacity */
   if($.browser.opera) {
      $.support.opacity = true;
   }    
    
      $("#jframe-overlay").css({opacity:settings.opacity, height:pageSize[1]});
      
      
      $(settings.closeElement).live("click", function(){
         killjframe();
         return false;
      });
      

   }
   
   function loadUrl(url){
      $("#jframe").load(url+" div:first").fadeIn(0, function(){
         var pageSize = getPageSize();
         var pageScrool = getPageScroll();
         $("#jframe-preloader-container").fadeOut("slow");
         $("#jframe-container").animate({top:pageScrool[1]+(pageSize[3]/10)}, settings.animationTime, "easeOutBack", function(){
            var pageSize = getPageSize();
            $("#jframe-overlay").css({height:pageSize[1]});   
         });
         //recaulcula a altura do overlay
      });
   }
   
   function href(obj){
      return $(obj).attr("href");
   }
   
   function jframeopen(url){
      setInterface();
      loadUrl(url);
      return false;     
   }
   
   function killjframe(){
      $("#jframe-overlay, #jframe-container, #jframe").fadeOut(function(){
         $("#jframe-preloader-container, #jframe-overlay, #jframe-container, #jframe").remove();
      });
   }
   
   
   function getPageSize() {
      var xScroll, yScroll;
      if (window.innerHeight && window.scrollMaxY) {	
         xScroll = window.innerWidth + window.scrollMaxX;
         yScroll = window.innerHeight + window.scrollMaxY;
      } else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
         xScroll = document.body.scrollWidth;
         yScroll = document.body.scrollHeight;
      } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
         xScroll = document.body.offsetWidth;
         yScroll = document.body.offsetHeight;
      }
      var windowWidth, windowHeight;
      if (self.innerHeight) {	// all except Explorer
         if(document.documentElement.clientWidth){
            windowWidth = document.documentElement.clientWidth; 
         } else {
            windowWidth = self.innerWidth;
         }
         windowHeight = self.innerHeight;
      } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
         windowWidth = document.documentElement.clientWidth;
         windowHeight = document.documentElement.clientHeight;
      } else if (document.body) { // other Explorers
         windowWidth = document.body.clientWidth;
         windowHeight = document.body.clientHeight;
      }	 
      // for small pages with total height less then height of the viewport       
      if(yScroll < windowHeight){
         pageHeight = windowHeight;
      } else { 
         pageHeight = yScroll;
      }
      // for small pages with total width less then width of the viewport
      if(xScroll < windowWidth){	
         pageWidth = xScroll;		
      } else {
         pageWidth = windowWidth; 
      }
         arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
         return arrayPageSize;
   };    
    
   function getPageScroll() {
      var xScroll, yScroll;
      if (self.pageYOffset) {
          yScroll = self.pageYOffset;
          xScroll = self.pageXOffset;
      } else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
          yScroll = document.documentElement.scrollTop;
          xScroll = document.documentElement.scrollLeft;
      } else if (document.body) {// all other Explorers
          yScroll = document.body.scrollTop; 
          xScroll = document.body.scrollLeft;	
      }
      arrayPageScroll = new Array(xScroll,yScroll);
      return arrayPageScroll;
   }
   
   
    
   return this.each(function(){
      $(this).bind('click', function(){
         jframeopen(href(this));
         return false;
      });
   });
  
};

})(jQuery);
