/**
 * name:          jquery-foxiballoon-0.1.js
 * author:        Stefan Benicke - www.opusonline.at
 * version:       0.1
 * last update:   22.08.2009
 * category:      jQuery plugin
 * copyright:     (c) 2009 Stefan Benicke (www.opusonline.at)
 * license:       GNU GPLv3
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * documentation: http://www.opusonline.at/foxitools/foxiballoon/
 */
(function($) {
  $.fn.foxiballoon = function(settings) {

    settings = jQuery.extend({
      maxObject: 'body',
      align: 'center',
      speed: 'normal',
      distance: 100
      }, settings);

    var scroll_top = $(document).scrollTop();
    var window_width = $(window).width();
    var document_width = $(document).width();
    var equal_width = (window_width >= document_width) ? true : false;
    var lower_width = (window_width < document_width) ? true : false;
    var element = this;
    var element_top = $(element).offset().top;
    var element_left = $(element).offset().left;
    var element_height = $(element).outerHeight();
    var maximum_bottom = $(settings.maxObject).offset().top+$(settings.maxObject).outerHeight();

    $(element).css({'position':'absolute',
      'top':element_top,
      'left':element_left
    });
    
//,
//      'width':$(element).outerWidth,
//      'height':element_height	
	
    if(scroll_top) move();

    $(window).scroll(function(){
      move();
    });

    $(window).resize(function(){
      var new_window_width = $(window).width();
      var new_document_width = $(document).width();
      var new_element_left = element_left;

      if(settings.align == "center"){
        if(new_window_width >= new_document_width && !lower_width){
          equal_width = true;
          new_element_left = element_left+(new_window_width-window_width)/2;
        }
        if(new_window_width < new_document_width && equal_width){
          lower_width = true;
          equal_width = false;
          new_element_left = element_left-(window_width-new_document_width)/2;
        }
        if(new_window_width >= new_document_width && lower_width){
          lower_width = false;
          equal_width = true;
          new_element_left = element_left+(new_document_width-document_width)/2;
        }
      }
      if(settings.align == "right"){
        new_element_left = element_left+(new_window_width-window_width);
      }
      if(element_left != new_element_left){
        $(element).css({'left':new_element_left});
        element_left = new_element_left;
      }
      window_width = new_window_width;
      document_width = new_document_width;
    });

    function move(){
      scroll_top = $(document).scrollTop();
      var element_bottom = scroll_top+element_height+settings.distance;

      if(element_top < scroll_top && element_bottom <= maximum_bottom){
        $(element).animate({'top':scroll_top+settings.distance}, {queue:false}, settings.speed);
      }
      if(element_top > scroll_top){
        $(element).animate({'top':element_top}, {queue:false}, settings.speed);
      }
      if(element_bottom > maximum_bottom){
        $(element).animate({'top':maximum_bottom-element_height}, {queue:false}, settings.speed);
      }    }
  }
})(jQuery);

