/*

            _/    _/_/    _/_/_/_/_/                              _/       
               _/    _/      _/      _/_/    _/    _/    _/_/_/  _/_/_/    
          _/  _/  _/_/      _/    _/    _/  _/    _/  _/        _/    _/   
         _/  _/    _/      _/    _/    _/  _/    _/  _/        _/    _/    
        _/    _/_/  _/    _/      _/_/      _/_/_/    _/_/_/  _/    _/     
       _/                                                                  
    _/

    Created by David Kaneda <http://www.davidkaneda.com>
    Documentation and issue tracking on Google Code <http://code.google.com/p/jqtouch/>
    
    Special thanks to Jonathan Stark <http://jonathanstark.com/>
    and pinch/zoom <http://www.pinchzoom.com/>
    
    (c) 2009 by jQTouch project members.
    See LICENSE.txt for license.

*/

(function($) {
            
	$.fn.makeFloaty = function(options){
	    var defaults = {
	        align: 'top',
	        spacing: 20,
	        time: '.3s'
	    }
	    var settings = $.extend({}, defaults, options);
	    settings.align = (settings.align == 'top') ? 'top' : 'bottom';
	    
	    return this.each(function(){
	        var $el = $(this);
	        
	        $el.css({
	            '-webkit-transition': 'top ' + settings.time + ' ease-in-out',
	            'display': 'block',
	            'min-height': '0 !important'
	        }).data('settings', settings);
	        
	        $(document).bind('scroll', function(){
	            if ($el.data('floatyVisible') === true)
	            {
	                $el.scrollFloaty();
	            }
	        });
	        $el.scrollFloaty();
	    });
	}
	
	$.fn.scrollFloaty = function(){
	    return this.each(function(){
	        var $el = $(this);
	        var settings = $el.data('settings');
	        var wHeight = $('html').attr('clientHeight'); // WRONG
	        
	        var newY = window.pageYOffset +
	            ((settings.align == 'top') ? 
	                settings.spacing : wHeight - settings.spacing - $el.get(0).offsetHeight);
	        
	        $el.css('top', newY).data('floatyVisible', true);
	    });
	}
	
	$.fn.hideFloaty = function(){
	    return this.each(function(){
	        var $el = $(this);
	        var oh = $el.get(0).offsetHeight;
	        
	        $el.css('top', -oh-10).data('floatyVisible', false);
	    });
	}
	
	$.fn.toggleFloaty = function(){
	    return this.each(function(){
	        var $el = $(this);
	        if ($el.data('floatyVisible') === true){
	            $el.hideFloaty();
	        }
	        else
	        {
	            $el.scrollFloaty();
	        }
	    });
	}
	
})(jQuery);