﻿var HashHelper = (function() {
  var InitHashSupport = function() {
    if (IsOnHashChangeSupported()) {
      window.onhashchange = function() { EvaluateHash(); }
      EvaluateHash();
    }
    else {      
      SetIntervalForEvaluateHash();
    }
  };
  var SetIntervalForEvaluateHash = function() {
    setInterval(EvaluateHash, 100);
  };
  var IsOnHashChangeSupported = function() {
    if (window.navigator.appName == "Microsoft Internet Explorer") {
      if (document.documentMode /* IE8 */ && document.documentMode == "7") {
        return false; 
      }
    }
    return 'onhashchange' in window;
  };
  var _strSelectedFragment;
  var _objCallBackFunction;
  var EvaluateHash = function() {
    var strHash = window.location.hash;
    if (strHash) {
      if (strHash != _strSelectedFragment) {
        _strSelectedFragment = strHash;
        _objCallBackFunction(strHash);
      }
    }
    else {
      _strSelectedFragment = '';
    }
  };

  return {
    Init: function(ACallBack) {
      if (_objCallBackFunction) {
        return;
      }
      _objCallBackFunction = ACallBack;
      InitHashSupport();
    }
  };
})();