// MODIFIED "scrollTo" animate to accept additional doAlso param

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
 * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
 * Date: 1/2/2008
 * @author Ariel Flesler
 * @version 1.3
 */
;(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 ){
//hook for adding a function to a localscroll
settings.doAlso( attr, duration );
$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 );
/**
 * jQuery.LocalScroll - Animated scrolling navigation, using anchors.
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
 * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php).
 * Date: 1/4/2008
 * @author Ariel Flesler
 * @version 1.1.3
 **/
;(function($){$.localScroll=function(a){$('body').localScroll(a)};$.localScroll.defaults={target:null,filter:null,duration:1000,axis:'y',event:'click',persistent:false,cancel:true};$.fn.localScroll=function(b){b=$.extend({},$.localScroll.defaults,b);return(b.persistent)?this.bind(b.event,function(e){var a=$([e.target,e.target.parentNode]).filter(filter)[0];return a&&scroll.call(a,e)}):this.find('a').filter(filter).bind(b.event,scroll).end().end();function scroll(e){var a=this.hash.slice(1),q=document.getElementById(a)||$('[name='+a+']')[0];if(q){if(b.onBefore)b.onBefore.call(this,e,q,$(b.target||window));if(b.target)$(b.target).scrollTo(q,b);else $.scrollTo(q,b);return!b.cancel}};function filter(){return local(this)&&(!b.filter||$(this).is(b.filter))}};function local(a){return!!a.hash&&location.href.replace(/#.*/,'')==a.href.replace(a.hash,'')}})(jQuery);