/*
Source: http://www.kryogenix.org/code/browser/smoothscroll/

The functions in smoothscroll.js are adapted from the source link by America's Firearm Network. 

Because they are modified works we do not claim any ownership rights.
Please refer to source link for more information & distribution.
*/

/* Smooth scrolling
   Changes links that link to other parts of this page to scroll
   smoothly to those links rather than jump to them directly, which
   can be a little disorienting.
   
   sil, http://www.kryogenix.org/
   
   v1.0 2003-11-11
   v1.1 2005-06-16 wrap it up in an object
*/


/* the following function is adapted from: http://snipplr.com/view/19838/get-url-parameters/ "the_coder" */
function getUrlVars() {
  var map = {};
  var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
  map[key] = value;
  });
  return map;
}

var ss = {
  fixAllLinks: function() {
    // Get a list of all links in the page
    var allLinks = document.getElementsByTagName('a');
    // Walk through the list
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if ((lnk.href && lnk.href.indexOf('#') != -1) && 
          ( (lnk.pathname == location.pathname) ||
	    ('/'+lnk.pathname == location.pathname) ) && 
          (lnk.search == location.search)) {
        // If the link is internal to the page (begins in #)
        // then attach the smoothScroll function as an onclick
        // event handler
        ss.addEvent(lnk,'click',ss.smoothScroll);
      }
    }
  },


  aJump: function() {
  get_var = getUrlVars();

  if (typeof get_var['ss'] != 'undefined') {
     var anchor = get_var['ss'];
     var allLinks = document.getElementById('col1').getElementsByTagName('a');
      var destinationLink = null;
      for (var i=0;i<allLinks.length;i++) {
        var lnk = allLinks[i];
        if (lnk.name && (lnk.name == anchor)) {
          destinationLink = lnk;
          break;
        }
      }
      if (!destinationLink) destinationLink = document.getElementById(anchor);
  
      // If we didn't find a destination, give up and let the browser do
      // its thing
      if (!destinationLink) return true;
    
      // Find the destination's position
      var destx = destinationLink.offsetLeft; 
      var desty = destinationLink.offsetTop;
      var thisNode = destinationLink;
      while (thisNode.offsetParent && 
            (thisNode.offsetParent != document.body)) {
        thisNode = thisNode.offsetParent;
        destx += thisNode.offsetLeft;
        desty += thisNode.offsetTop;
      }
    
      // Stop any current scrolling
      clearInterval(ss.INTERVAL);
    
      cypos = ss.getCurrentYPos();
    
      ss_stepsize = parseInt((desty-cypos)/ss.STEPS);
      ss.INTERVAL =
      setInterval('ss.scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);    
    }
  },

  scrollWindow: function(scramount,dest,anchor) {
    wascypos = ss.getCurrentYPos();
    isAbove = (wascypos < dest);
    window.scrollTo(0,wascypos + scramount);
    iscypos = ss.getCurrentYPos();
    isAboveNow = (iscypos < dest);
    if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
      // if we've just scrolled past the destination, or
      // we haven't moved from the last scroll (i.e., we're at the
      // bottom of the page) then scroll exactly to the link
      window.scrollTo(0,dest);
      // cancel the repeating timer
      clearInterval(ss.INTERVAL);
      // and jump to the link directly so the URL's right
      //location.hash = anchor;
    }
  },

  getCurrentYPos: function() {
    if (document.body && document.body.scrollTop)
      return document.body.scrollTop;
    if (document.documentElement && document.documentElement.scrollTop)
      return document.documentElement.scrollTop;
    if (window.pageYOffset)
      return window.pageYOffset;
    return 0;
  },

  addEvent: function(elm, evType, fn, useCapture) {
    // addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener){
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent){
      var r = elm.attachEvent("on"+evType, fn);
      return r;
    } else {
      alert("Handler could not be removed");
    }
  } 
}

ss.STEPS = 25;

ss.addEvent(window,"load",ss.aJump);
