/*
* @name ScrollTo
* @desc Easy element scrolling using jQuery.
* @version 1.3
* @date 2008-02-01
* @author Ariel Flesler - aflesler(at)gmail(dot)com
* @copyright 2008 Ariel Flesler
* @license GPL license - http://www.opensource.org/licenses/gpl-license.php
*/

(function($){$.scrollTo=function(target,duration,settings){$($.browser.safari?"body":"html").scrollTo(target,duration,settings);};$.scrollTo.defaults={axis:"y",duration:1};$.fn.scrollTo=function(target,duration,settings){if(typeof duration=="object"){settings=duration;duration=0;}settings=$.extend({},$.scrollTo.defaults,settings);if(!duration){duration=settings.speed||settings.duration;}settings.queue=settings.queue&&settings.axis.length==2;if(settings.queue){duration=Math.ceil(duration/2);}if(typeof settings.offset=="number"){settings.offset={left:settings.offset,top:settings.offset};}return this.each(function(){var elem=this,$elem=$(elem),t=target,toff,attr={},win=$elem.is("html,body");switch(typeof t){case"number":case"string":if(/^([+-]=)?\d+(px)?$/.test(t)){t={top:t,left:t};break;}t=$(t,this);case"object":if(t.is||t.style){toff=(t=$(t)).offset();}}$.each(settings.axis.split(""),parse);animate(settings.onAfter);function parse(i,axis){var Pos=axis=="x"?"Left":"Top",pos=Pos.toLowerCase(),key="scroll"+Pos,act=elem[key];if(toff){attr[key]=toff[pos]+(win?0:act-$elem.offset()[pos]);if(settings.margin){attr[key]-=parseInt(t.css("margin"+Pos))||0;attr[key]-=parseInt(t.css("border"+Pos+"Width"))||0;}if(settings.offset&&settings.offset[pos]){attr[key]+=settings.offset[pos];}}else{attr[key]=t[pos];}if(/^\d+$/.test(attr[key])){attr[key]=attr[key]<=0?0:Math.min(attr[key],max(axis));}if(!i&&settings.queue){if(act!=attr[key]){animate(settings.onAfterFirst);}delete attr[key];}}function animate(callback){$elem.animate(attr,duration,settings.easing,function(){if(callback){callback.call(this,$elem,attr,t);}});}function max(axis){var el=win?$.browser.opera?document.body:document.documentElement:elem,Dim=axis=="x"?"Width":"Height";return el["scroll"+Dim]-el["client"+Dim];}});};})(jQuery);