var WHIsPublisherPreview = false;

var WHCMS =
  { informUrl: function(uri)
    {
      return uri;
    }

  , dontPropagateEvent: function(e)
    {
      if(typeof e.stopPropagation == 'undefined')
      {
        e.returnValue = false;
        e.cancelBubble = true;
        if(e.keyCode)
          e.keyCode=0;
      }
      else
      {
        if(e.cancelable)
          e.preventDefault();
        e.stopPropagation();
      }
      return false;
    }

  , getEventTarget: function(e)
  {
    return e ? e.target ? e.target : e.srcElement ? e.srcElement : null : null;
  }

  , interceptHyperlinks : function(start)
  {
    if(start)
    {
      if(document.addEventListener)
      {
        document.addEventListener("click", WHCMS._H_intercept_hyperlink, false);
      }
      else if(document.attachEvent)
      {
        document.attachEvent("onclick", WHCMS._H_intercept_hyperlink, false);
      }
    }
  }

  , _H_intercept_hyperlink: function (e)
    {
      if(!e) e=window.event;

      for(var node=WHCMS.getEventTarget(e);node;node=node.parentNode)
        if(node.nodeName.toUpperCase()=='A')
        {
          if((node.href.substr(0,5)=='http:' || node.href.substr(0,6)=='https:')
             && !node.target              //don't intercept targetting links (ADDME: stop framebreaking targets _parent etc?)
             && node.href.split('#')[0] != location.href.split('#')[0] //not a document-local link
             )
            try { var newhref=WHCMS.informUrl(node.href); if(!newhref) return WHCMS.dontPropagateEvent(e); else node.href=newhref;} catch(e) { }
          break;
        }

      return true;
    }
  };

//Associate with CMS preview window, if any
try { window.frameElement.previewAttachCallback(WHCMS); WHIsPublisherPreview = true; } catch(e) {  }