(function($) {
   $.fn.basebox = function(settings) {      
      $.fn.basebox.settings = {			
        opacity: 0.7, 
        basedir: 'basebox2/',
        effect: 'fade',
        animationspeed: 'fade'        
     };
     var options = $.extend($.fn.basebox.settings, settings);
     
     if (options.start=='now') {
       show($(this));
    }
      
	return this.each(function() {       
		$(this).unbind('click').click(function() {
            show($(this));                  
         return false;
	  	});         
      });    
    
    function position(element){
       var w=element.width();       
       var h=element.height();       
       var sl=$(window).scrollLeft();
       var st=$(window).scrollTop();
       if ($(window).height() > h){       
         if (!sl>0) sl=0;
         if (!st>0) st=0;
         element.css("left","50%");
         element.css("top","50%");
         element.css("margin-left",(-w/2)+sl+"px");
         element.css("margin-top",(-h/2)+st+"px");
       } else {
         if (!sl>0) sl=0;         
         element.css("left","50%");
         element.css("top","20px");
         element.css("margin-left",(-w/2)+sl+"px");
         element.css("margin-top","20px");
       }
   }
   
   function display(obj, text, addcon, title){      
      var h= getDocHeight();  
      var tobj= $("#BB_overlay").length;      
      if (tobj==0 ) $("body").append('<div id="BB_overlay" >&nbsp;</div>');      
      var boxobj= $("#BB_box").length;
      if (boxobj==0){         
         $("body").append('<div id="BB_box"><div id="BB_title">'+title+'</div> \
                                  <a id="BB_close">&nbsp;</a> \
                                 <table cellspacing="0" cellpadding="0"> \
                                  <tr id="BB_top"><td class="l"></td><td class="m"></td><td class="r"></td></tr>\
                                  <tr id="BB_middle"><td class="l"></td><td class="m">\
                                  <div class="BB_content">'+text+'</div>\
                                  </td><td class="r"></td></tr>\
                                  <tr id="BB_bottom"><td class="l"></td><td class="m"></td><td class="r"></td></tr>\
                                  </table><span id="BB_nav">'+addcon+'</span>\
                                 </div>');
      }
      
      if (tobj==0 ){
         $("#BB_overlay").css("opacity",options.opacity);
         $("#BB_overlay").css("height",h+'px');
         $("#BB_overlay").fadeIn(options.animationspeed, function(){
            position($("#BB_box"));
            $("#BB_box").fadeIn(options.animationspeed);
         });                 
      } else {
            $(".BB_content").html(text);        
            position($("#BB_box"));
            $("#BB_box").fadeIn(options.animationspeed);
      }               
      $("#BB_close").unbind().click(function(){  close_box();    });      
      $(".BB_img_change").unbind('click').click(function() { img_change($(this));return false; });
      $(".BB_change").unbind('click').click(function() {      
         change($(this));return false;
      });   
   }
   
   function close_box(){
      $("#BB_box").fadeOut(options.animationspeed,function(){
          $("#BB_overlay").fadeTo(options.animationspeed,0.01,function(){
              $("#BB_box").remove();
              $("#BB_overlay").remove();              
          });
      });
      
   }
   
    function change(self){      
        var url = self.attr('href');        
        var newtitle=self.attr('title');
        var addcon='';
        
        $.get(url, function(content){
            $("body").append('<div id="BB_tmp_content" style="position: absolute; margin-left: -10000px" >'+content+'</div>');
            var tw = $("#BB_tmp_content").width();
            var th = $("#BB_tmp_content").height();
            var mtop  = - th / 2;
            var mleft = - tw / 2;
            $("#BB_tmp_content").remove();
            
            if (options.effect=='fade'){
                $("#BB_box").fadeOut(options.animationspeed, function(){
                    $("#BB_box").remove();            
                    display(self, content,addcon, newtitle);            
                });
            }
            if (options.effect=='grow'){               
                $("#BB_title").fadeOut(options.animationspeed);
                $(".BB_content").fadeTo(options.animationspeed,0.01, function(){                    
                    $(".BB_content").animate({'margin-left': mleft+"px", 'margin-top': mtop+"px",height: th+'px', width: tw+'px'},options.animationspeed, function(){                     
                        $(".BB_content").html(content);                    
                        $(".BB_content").fadeTo(options.animationspeed,1, function(){});                    
                        $("#BB_title").html(newtitle);
                        $("#BB_title").fadeIn(options.animationspeed);
                        $("#BB_nav").fadeIn(options.animationspeed, function(){
                            $(".BB_change").unbind().click(function() { change($(this));return false; });   
                        });                       
                    });
                }); 
            }
        });
        return false;
    }
           
   function img_change(self){         
        var values = self.attr('val').split("/");        
        var cur=parseInt(values[0]);
        var group=values[1];        
        var len=parseInt(values[2]);        
        var current=$('[rel="'+group+'"]').eq(cur);        
        addcon=gen_links(cur,group,len);
        var newtitle=current.attr('title');        
        if (options.effect=='fade'){
            $("#BB_box").fadeOut(options.animationspeed, function(){
                $("#BB_box").remove();            
                display(self, '<img id="BB_content_image" src="'+current.attr('href')+'" alt="" />',addcon, newtitle);            
            });
        }
        if (options.effect=='grow'){            
            var tImage = new Image();
            tImage.src = current.attr('href');
            var mtop  = - tImage.height /2;
            var mleft = - tImage.width  /2;
             $("#BB_nav").fadeOut(options.animationspeed);
             $("#BB_title").fadeOut(options.animationspeed);
             $(".BB_content").fadeTo(options.animationspeed,0.01, function(){                  
                $(".BB_content").animate({'margin-left': mleft+"px", 'margin-top': mtop+"px",height: tImage.height+'px', width: tImage.width+'px'},options.animationspeed, function(){                     
                    $(".BB_content").html('<img id="BB_content_image" src="'+current.attr('href')+'" alt="" />');
                    $(".BB_content").fadeTo(options.animationspeed,1, function(){});
                    $("#BB_nav").html(addcon);
                    $("#BB_title").html(newtitle);
                    $("#BB_title").fadeIn(options.animationspeed);
                    $("#BB_nav").fadeIn(options.animationspeed, function(){
                        $(".BB_img_change").unbind().click(function() { img_change($(this));return false; });   
                    });                       
                });
             });            
        }        
   }
   
   function gen_links(index,group,max){
       addcon='';
       if (index>0) addcon='<a class="BB_img_change" val="'+(index-1)+'/'+group+'/'+max+'" ><img border="0" src="'+options.basedir+'prev.png" alt="" /></a>';                 
       if ((index+1)<max) addcon=addcon+'<a class="BB_img_change" val="'+(index+1)+'/'+group+'/'+max+'" ><img border="0" src="'+options.basedir+'next.png" alt="" /></a>';
       return addcon;
   } 
   
   function show(obj){      
      var url=obj.attr('href');
      var title=obj.attr('title');      
      if (url.match(/.jpeg$|.jpg$|.gif$|.png$/i)){
           var group=obj.attr('rel');
            content='<img id="BB_content_image" src="'+url+'" alt="" />';            
            var addcon=' ';
            if (group) {                                             
                addcon=gen_links($('[rel="'+group+'"]').index(obj), group, $('[rel="'+group+'"]').length);                
            }                        
            display(obj, content, addcon, title);
      } else if ((url.match(/#/))||(url.match(/#/))){
            var t = obj.find(".box_content").html();            
            display(obj, t, '', title);
      } else {         
           $.get(url, function(content){ display(obj, content,'',title); });
      }           
   }   
    return 1;      
   }   
})(jQuery);

function close_box(){   
   $("#BB_box").fadeOut(500,function(){
       $("#BB_overlay").fadeTo(500,0.01,function(){
           $("#BB_box").remove();
           $("#BB_overlay").remove();                  
       });
   });         
}

function getDocHeight() {
    var D = document;
    return Math.max(
        Math.max(D.body.scrollHeight, D.documentElement.scrollHeight),
        Math.max(D.body.offsetHeight, D.documentElement.offsetHeight),
        Math.max(D.body.clientHeight, D.documentElement.clientHeight)
    );
}

 


