// Our plugin will be defined within an immediately
// executed method.
(
  function( $ ){
    // Default to the current location.
    var strLocation = window.location.href;
    var strHash = window.location.hash;
    var strPrevLocation = "";
    var strPrevHash = "";

    // This is how often we will be checkint for
    // changes on the location.
    var intIntervalTime = 100;

    // This method removes the pound from the hash.
    var fnCleanHash = function( strHash ){
      return(
        strHash.substring( 1, strHash.length )
        );
    }

    // This will be the method that we use to check
    // changes in the window location.
    var fnCheckLocation = function(){
      // Check to see if the location has changed.
      if (strLocation != window.location.href){

        // Store the new and previous locations.
        strPrevLocation = strLocation;
        strPrevHash = strHash;
        strLocation = window.location.href;
        strHash = window.location.hash;

        // The location has changed. Trigger a
        // change event on the location object,
        // passing in the current and previous
        // location values.
        $( window.location ).trigger(
          "change",
          {
            currentHref: strLocation,
            currentHash: fnCleanHash( strHash ),
            previousHref: strPrevLocation,
            previousHash: fnCleanHash( strPrevHash )
          }
          );

      }
    }

    // Set an interval to check the location changes.
    setInterval( fnCheckLocation, intIntervalTime );
  }
)( jQuery );
