/* ################################################################# */
/*                                                                   */
/*  TITLE:        GLOBAL.JS                                          */
/*  VERSION:      0.38                                               */
/*  LAST UPDATED: 2009/09/02                                         */
/*  UPDATED BY:   Brian Maniere                                      */
/*                                                                   */
/*  NAMESPACE: G                                                     */
/*                                                                   */
/*  PUBLIC DEFINITIONS:                                              */
/*    preloadImgs()                                                  */
/*    postloadImgs()                                                 */
/*    toggleImgs()                                                   */
/*                                                                   */
/*  PRIVATE DEFINITIONS:                                             */
/*    trackedEvents()                                                */
/*                                                                   */
/*  PUBLIC FUNCTIONS:                                                */
/*    prepSearchForm()                                               */
/*    outputHTML()                                                   */
/*    outputDebug()                                                  */
/*    outputDebug2()                                                 */
/*    navTo()                                                        */
/*    doPixelTracking()                                              */
/*    setMostPopularFilter()                                         */
/*                                                                   */
/*  PREREQUISTES:                                                    */
/*    U.preloadImgs                                                  */
/*    U.loadImg                                                      */
/*    U.postloadImgs                                                 */
/*    U.toggleImgs                                                   */
/*    U.toggleImg                                                    */
/*    U.isDomBrowser                                                 */
/*    U.$                                                            */
/*    U.doLoadImages                                                 */
/*    U.addEvent                                                     */
/*    U.doDoLoadImages                                               */
/*    U.insertAfter                                                  */
/*    U.isNotNull                                                    */
/*                                                                   */
/* ################################################################# */


(function() {

if(!window.G) {
  window['G'] = {};
}

  // preloadImgs definition
U.preloadImgs = (
  new U.loadImg("NBC_main_v6_A-1.jpg"),
  new U.loadImg("btn_go_v2.gif")
);

  // postloadImgs definition
U.postloadImgs = (
  new U.loadImg("btn_go_h_v2.gif")
);

  // toggleImgs definition.  Use toggle button css id as the array identifier when adding to this array
U.toggleImgs["searchSubmit"] = new U.toggleImg("btn_go_v2.gif","btn_go_h_v2.gif");

  // flag used by doPixeltracking to make sure momentStarted is not counted more than once per page
var momentStarted = false;
  // flag used by doPixeltracking to make sure commentStarted is not counted more than once per page
var commentStarted = false;
  // flag used by doPixeltracking to make sure mood flash clicks are not counted more than once per page
var moodFlashClicked = false;

  // behaviors for search form
function prepSearchForm() {
  var keyPressed = false;
  if (U.isDomBrowser) {
    if (U.$("searchForm")) {
      var searchForm = U.$("searchForm");
      var searchText = U.$("searchText");
      searchText.onfocus = function() {
        if (this.value=='Search') {
          this.value='';
        }
      }
      searchText.onkeypress = function(e) {
      keyPressed = true;
        if (U.enterKeyPressed(e)) {
          searchForm.submit();
        }
      }
      searchForm.onsubmit = function() {
        if (searchText.value == "Search" && !keyPressed) {
          searchText.value='';
        }
      }
      U.$("searchSubmit").onmouseover = function() {
        this.src = U.imagePath + U.toggleImgs["searchSubmit"]["hoverImg"];
      }
      U.$("searchSubmit").onmouseout = function() {
        this.src = U.imagePath + U.toggleImgs["searchSubmit"]["defaultImg"];
      }
    }
    return true;
  }
  return false;
}
window['G']['prepSearchForm'] = prepSearchForm;

  // writes markup to screen within specified divID.  Used by Media Viewer.
function outputHTML(markup, divID) {
  if (U.$(divID)) {
    var targetNode = U.$(divID);
    targetNode.innerHTML = markup;
  }
}
window['G']['outputHTML'] = outputHTML;

  // writes debug information to screen.  Outputs the msg param to the div matching with the id in the divID param
function outputDebug(msg, divID) {
  if (U.$(divID)) {
    var parentNode = U.$(divID);
    if (!U.$("debug")) {
      var div = document.createElement("div");
      div.setAttribute("id","debug");
      U.insertAfter(div, parentNode);
    }
    var d = U.$("debug");
    var p = document.createElement("p");
    p.innerHTML = msg;
    d.appendChild(p);
  }
}
window['G']['outputDebug'] = outputDebug;

  // writes debug information to screen.  Outputs the msg param to a new div that is created as the child of the body
function outputDebug2(msg) {
  if (!U.$("debug2")) {
    var parentNode = document.getElementsByTagName("body")[0];
    var div = document.createElement("div");
    div.setAttribute("id","debug2");
    parentNode.appendChild(div);
  }
  var d = U.$("debug2");
  var p = document.createElement("p");
  p.innerHTML = msg;
  d.appendChild(p);
}
window['G']['outputDebug2'] = outputDebug2;

function navTo(nextURL) {
  document.location.replace(nextURL);
}
window['G']['navTo'] = navTo;

  // trackedEvents definition
var trackedEvents = new Array();
trackedEvents[5]  = "Mood Header Clicks";
trackedEvents[6]  = "Page Count";
trackedEvents[7]  = "Mood Module (dropdown)";
trackedEvents[8]  = "Mood Comments (radio buttons)";
trackedEvents[9]  = "Subnav Tracking";
trackedEvents[16] = "Facebook Registration Update Completes";
trackedEvents[35] = "Submission Start";
trackedEvents[36] = "Submission Complete";
trackedEvents[37] = "Submission Cancel";
trackedEvents[44] = "Show Articles";
trackedEvents[45] = "Show Videos";
trackedEvents[46] = "Show Galleries";
trackedEvents[51] = "Slideshow Tracker";
trackedEvents[52] = "MediaViewer Timeline Clicks";
trackedEvents[53] = "MediaViewer Top Story Clicks";
trackedEvents[54] = "MediaViewer Full Story Clickthrus";
trackedEvents[57] = "MediaViewer Next Story Clicks";
trackedEvents[58] = "MediaViewer Previous Story Clicks";
trackedEvents[59] = "MediaViewer Most Commented Button Clicks";
trackedEvents[60] = "MediaViewer List View Clicks";
trackedEvents[61] = "MediaViewer Next Page Clicks";
trackedEvents[62] = "MediaViewer Previous Page Clicks";
trackedEvents[63] = "MV Most Viewed Button Clicks";
trackedEvents[64] = "MV Most Viewed Item 1";
trackedEvents[65] = "MV Most Viewed Item 2";
trackedEvents[66] = "MV Most Viewed Item 3";
trackedEvents[67] = "MV Most Viewed Item 4";
trackedEvents[68] = "MV Most Viewed Item 5";
trackedEvents[69] = "MV Most Viewed Item 6";
trackedEvents[70] = "MV Most Viewed Item 7";
trackedEvents[71] = "MV Most Viewed Item 8";
trackedEvents[72] = "MV Most Commented Item 1";
trackedEvents[73] = "MV Most Commented Item 2";
trackedEvents[74] = "MV Most Commented Item 3";
trackedEvents[75] = "MV Most Commented Item 4";
trackedEvents[76] = "MV Most Commented Item 5";
trackedEvents[77] = "MV Most Commented Item 6";
trackedEvents[78] = "MV Most Commented Item 7";
trackedEvents[79] = "MV Most Commented Item 8";
trackedEvents[80] = "NBC Registration";
trackedEvents[81] = "Registration Cancellations";
trackedEvents[82] = "Facebook Registration";
  // faked events
trackedEvents[90] = "Share Options";

  // fetches an image with a query string that helps us track user events and learn how to make a better site
  // if forwardToUrl is specified, waits till the pixel is loaded and forwards to the url
  // added section name for registration fired for header, comments, moments and etc.
  // sectionForFacebookRegstr, sectionForNBCRegistr, sectionForRegstrCancel are needed to set to 1 for registration tracking

function doPixelTracking(eventNumber, doPageRefresh, forwardToUrl, firedPlace, sectionForFacebookRegstr, sectionForNBCRegistr, sectionForRegstrCancel, moodUserVote) {
    // this allows the doPageRefresh param to be optional / undefined
  if(!doPageRefresh) {
    doPageRefresh = false;
  }
  var _srcURL = "";
  var _reportSuiteID = "";
  var _pe  = "";                  // Link out. Example: "lnk_o".  Not used for Slideshows
  var _siteName = s.prop10;       // Site name in English. Example: "NBC%20San%20Diego".  Same value as _c10 (below).
  var _ch = "&ch=" + s.channel;   // Channel / Section. Example: "news".
  var _hostname = "&server=" + window.location.hostname; // Server Hostname. Example: "www.nbcsandiego.com".
  var _pageName = "";             // Document.title for slideshows, or event name for any others. Example: "The%20Obamas%27%20Trip%20to%20Europe%20in%20Photos" or "Media%20Viewer%20Next%20Page%20Click".
  var _eventNumber = "";          // The event number passed in as first param, with some additional info appended later
  var _c3  = "";                  // Content Type. Example: "Gallery". Same value as _v3
  var _c4  = "&c4="  + s.prop4;   // Sub-Section. Example: "local".
  var _c7  = "&c7="  + s.prop7;   // Content Source. Example: "Uncategorized"
  var _c8  = "&c8="  + s.prop8;   // Not sure. Example: "nbc".
  var _c9  = "&c9="  + s.prop9;   // Station Call Letters. Example: "KNSD".
  var _c10 = "&c10=" + s.prop10;  // Site name in English. Example: "NBC%20San%20Diego". Same as _sitename
  var _c15 = "";                  // Subnav Tracking
  var _c30 = "";                  // Page mood status.  Example: "furious".  From s.eVar30. Equal to _v24 but used sometimes instead.
  var _c31 = "";                  // Registration type
  var _v1  = "";                  // Identifies whether user is registered, non-registered, or facebook-registered
  var _v3  = "";                  // Content Type. Example: "Gallery". Same value as _c3 (above).
  var _v11 = "";                  // Tracks Facebook registration event
  var _v12 = "";                  // Tracks NBC registration event
  var _v13 = "";                  // Registration cancellation event
  var _v16 = "";                  // share method
  var _v24 = "";                  // Page mood status.  Example: "furious".  From s.eVar30. 
  var _v28 = "";                  // User-selected mood.  Example: "furious".  From nbc.omniture.userVote.
  var _v29 = "";                  // Content Type
  var _v31 = "";                  // Mood header status.  Example: "furious"
  var _v32 = "";                  // Moment category.  Example: "check it"
  var _v34 = "";                  // Get age on login
  var _v35 = "";                  // Get gender on login
  var _trackingForRegstr = "";    // If registration initiated, tracks whether NBC Reg successful, Facebook Reg successful, or User cancellation
  var _randomValue = "&rndm=" + Math.random()*10000000000000000;
  var doNothing = false;          // used to handle muiltiple clicks

  if(typeof s_account == 'undefined' || typeof s.prop10 == 'undefined' || typeof trackedEvents[eventNumber] == 'undefined') {
      // still need to forward
    if(U.isNotNull(forwardToUrl)) {
      document.location = forwardToUrl;
    }
    alert("test");
    return false;
  }
  else {
      // put prarams that are globally necessary here
    _eventNumber = "event" + eventNumber; // later sometimes overwritten
    _reportSuiteID = s_account; // later overwritten if the event is not one of the ones specifically handled below.
      // slideshow and section page subNav clicks (count as new page view)
    if(eventNumber == 51 || eventNumber == 9) {
      if(eventNumber == 51) { // slideshow
        _c30 = "&c30=" + s.eVar30;
        _eventNumber = "event" + eventNumber + ",event6";  // event 6 records a page view
        if( typeof nbcSlideshowTitle != "undefined" ) { // for embedded slideshows
          _pageName = nbcSlideshowTitle;
          _c3 = "&c3=Gallery";
        }
        else { // for full-page slideshows
          _pageName = document.title.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace
          _c3 = "&c3="  + s.prop3;
        }
      }
      else if(eventNumber == 9) { // subnav
        _c4  = "&c4=" + subSection;
        _c15 = "&c15=D%3dch%2b%22%7c%22%2bc4";
        _eventNumber = "event" + eventNumber + ",event6";  // event 6 records a page view
        _pageName = document.title.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace
      }
      _v1  = "&v1="  + s.eVar1;
      _v34 = "&v34=" + s.eVar34;
      _v35 = "&v35=" + s.eVar35;
      if(_pageName.match('|')) { // only use that part of the title before any pipe
        _pageName = _pageName.split('|')[0];
      }
    }
      // registration
    else if(firedPlace || eventNumber == 16) {
      _pageName = document.title.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace
      if(_pageName.match('|')) { // only use that part of the title before any pipe
        _pageName = _pageName.split('|')[0];
      }
    }
      // mood header click
    else if(eventNumber == 5) {
      if(moodFlashClicked) { // make sure mood flash has not already been recorded
        doNothing = true;
      }
      else {
        moodFlashClicked = true;
        _v3  = "&v3="  + s.prop3;
        _v31 = "&v31=" + nbcHeaderMood;
        _eventNumber = "event" + eventNumber; 
        _pageName = nbcHeaderStoryTitle.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace // note pageName is collected from a js var -- different here than elsewhere
        if(_pageName.match('|')) { // only use that part of the title before any pipe
          _pageName = _pageName.split('|')[0];
        }
      }
    }
      // mood module
    else if(eventNumber == 7 || eventNumber == 8) {
      _v1  = "&v1="  + s.eVar1;
      _v3  = "&v3="  + s.prop3;
      _v24 = "&v24=" + s.eVar30;
      _v28 = "&v28=" + nbc.omniture.userVote;
      _eventNumber = "event" + eventNumber + ",event36"; 
      _pageName = document.title.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace
      if(_pageName.match('|')) { // only use that part of the title before any pipe
        _pageName = _pageName.split('|')[0];
      }
    }
      // moment and comment submission
    else if(eventNumber == 35 || eventNumber == 36 || eventNumber == 37) {
      if(eventNumber == 35 && nbc.submissionType == "moment") {
        if(momentStarted) { // make sure moment started has not already been recorded
          return false;
        }
        else {
          momentStarted = true;
        }
      }
      else if(eventNumber == 35 && nbc.submissionType == "comment") {
        U.log(commentStarted);
        if(commentStarted) { // make sure comment started has not already been recorded
          return false;
        }
        else {
          commentStarted = true;
        }
      }
      if(eventNumber == 37 && nbc.submissionType == "moment") { // reset moment started flag
        momentStarted = false;
      }
      _v1 = "&v1=" + s.eVar1;
      _v3 = "&v3=" + s.prop3;
      if(nbc.submissionType == "moment") {
        _v32 = "&v32=Moment";
      }
      else if(nbc.submissionType == "comment") {
        _v24 = "&v24=" + s.eVar30;
        _v29 = "&v29=" + s.prop3;
      }
      _pageName = document.title.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace
      if(_pageName.match('|')) { // only use that part of the title before any pipe
        _pageName = _pageName.split('|')[0];
      }
    }
      // share options
    else if(eventNumber == 90) {
      _v3  = "&v3="  + s.prop3;
      _v16 = "&v16=" + nbc.omniture.shareOption;
      _v24 = "&v24=" + s.eVar30;
      _eventNumber = "";
      _pageName = document.title.replace(/^\s+|\n+|\t+|\s+$/g,''); // strip whitespace
      if(_pageName.match('|')) { // only use that part of the title before any pipe
        _pageName = _pageName.split('|')[0];
      }
    }
      // everything other than slideshows, subnav, registration, mood header, mood module, and submission clicks.
      // Includes linkout, but no _c or _v props.  Also handles _reportSuiteID differently.
    else {
      var tokens =  s_account.split(",");
      _reportSuiteID = tokens[tokens.length-1];
      _pe = "pe=lnk_o&";
      _pageName = trackedEvents[eventNumber];
    }
  }
  if(!doNothing) {
    if(firedPlace) { // tracking for registration
      if(sectionForFacebookRegstr) {
        _v11 = sectionForFacebookRegstr;
        _c31 = "&c31=Facebook"
        _trackingForRegstr = "&v11=" + firedPlace;
      }
      if(sectionForNBCRegistr) {
        _v12 = sectionForNBCRegistr;
        _c31 = "&c31=NBC"
        _trackingForRegstr = "&v12=" + firedPlace;
      }
      if(sectionForRegstrCancel) {
        _v13 = sectionForRegstrCancel;
        _trackingForRegstr = "&v13=" + firedPlace;
      }
    }
    else {
     _trackingForRegstr = "";
    }
    _srcURL = U.charEncodeSpaces("http://oimg.nbcuni.com/b/ss/" + _reportSuiteID + "/1/H.-2pdv-2/s16571644299919?" + _pe + "pev2=" + _siteName + _ch + _hostname + "&pageName=" + _pageName + _c3 + "&events=" + _eventNumber + _c4 + _c7 + _c8 + _c9 + _c10 + _c15 + _c30 + _c31 + _v1 + _v3 + _v16 + _v24 + _v28 + _v29 + _v31 + _v32 + _v34 + _v35 + _trackingForRegstr + _randomValue);
    var img = new Image();
    if(U.isNotNull(forwardToUrl)) {
      img.onload = function() {
        document.location = forwardToUrl;
      }
    }
    img.src = _srcURL;
  }
}
window['G']['doPixelTracking'] = doPixelTracking;

  // uses U.setClass to update the class of the mostPopularItems and mostPopularLists nodes
function setMostPopularFilter(cssClass) {
  U.setClass('mostPopularFilterer',cssClass);
  U.setClass('mostPopularLists',cssClass);
}
window['G']['setMostPopularFilter'] = setMostPopularFilter;

})();

  // load image(s) before window.onload
U.doLoadImages(U.preloadImgs);

  // load image(s) upon window.onload
U.addEvent(window,'load',U.doDoLoadImages);

