var s_account = '';

var Omniture = {};

Omniture.PageLoad = {	
  isWrapperPage: false,
  detectWrapper: function() {
    if (window.wrapperTarget !== undefined) {
      Omniture.PageLoad.isWrapperPage = true;
    }
  },
  attachScriptTag: function(fname) {
    var scriptTag = document.createElement('script');
    scriptTag.setAttribute('src', '/includes/' + fname);
    document.body.appendChild(scriptTag);
  },
  customParams: {},
  setCustomParam: function(name, value) {
    this.customParams[name] = value;
  },
  setCustomParams: function(params) {
    this.customParams = params;
  },
  setPageVars: function(pageVars) {
    this.pageVars = pageVars;
  },
  getPageVars: function() {
    return this.pageVars;
  },
  getPageVar: function(key) {
    return this.pageVars[key];
  },
  normalizeGeo: function(geo) {
    //suppress bad geos
    if (this.GEOS[geo]) {
      return geo;
    } else {
      return 'us';
    }
  },
  mkPageLoadCall: function() {
    var newRepeat = Omniture.Util.getNewRepeat();
    var pageVars = this.pageVars; //pageVars should have been set in a preprocess block for this domain/section
    if (!pageVars) return;
    var p = pageVars.pageName.split(':');
    if (p.length >= 3) {
      s.prop1 = pageVars.channel + ':' + p[2];
    }
    var geo = this.normalizeGeo(pageVars.geo);
    
    s.events = pageVars.events;
    s.pageName = pageVars.pageName;
    Omniture.Util.setCookie('_prevPage', s.pageName, null, 'netapp.com');
    s.channel = pageVars.channel;
    s.hier1 = pageVars.pageName;
    s.prop10 = newRepeat;
    s.prop34 = geo;
    s.eVar12 = geo;
    s.eVar28 = newRepeat;
    s.eVar30 = pageVars.pageName;
    if(typeof GetSwfVer == 'function'){
     var flashVer = GetSwfVer();
     s.prop22 = s.getValOnce(flashVer,'flash_ver_cookie',100);
    }
    var campaign = s.getQueryParam('Media,cid,REF_SOURCE',':') || pageVars.campaign;
    if (campaign) {
      s.campaign = campaign;
      if(!Omniture.Util.getCookie('_cid')) {
        Omniture.Util.setCookie('_cid', campaign, null, 'netapp.com');
      }  
      if (pageVars.campaign) delete pageVars.campaign;
    }
    s.prop27 = (campaign != undefined && campaign.length) ? campaign : pageVars.pageName; 
    if (pageVars.referrer)
      s.referrer = decodeURIComponent(pageVars.referrer);
    var icid = Omniture.Util.getQueryParam('icid');
    if (icid) {
      s.eVar48 = icid;
    }
    for (var key in this.customParams) {
      s[key] = this.customParams[key];
    }
    var s_code = s.t();
    if (s_code) document.write(s_code);
  },
  parseTargetPath: function(path) {
    var targetPath = path.split('?')[0]; 
    var pathArray = targetPath.split('/');
    var out = pathArray.pop();
    return out;
  },
  mkWrapperCall: function() {
    var baseName = this.parseTargetPath(wrapperTarget);
    if (baseName == "r")
      baseName = this.parseTargetPath(wrapperTargetHTML);
    var params = {
      eVar6: baseName,
      events: 'event4'
    };
    Omniture.Call.customLink({href: '/' + baseName}, params, 'd');
  },
  callOmniture: function() {
    //called right after 'process' hooks
    if (this.isWrapperPage) {
      this.mkWrapperCall();
    } else {
      this.mkPageLoadCall();
    }
  }
};

(function() {
  var geos = [
    'us',
    'uk',
    'mx',
    'jp',
    'fr',
    'ch',
    'it',
    'il',
    'in',
    'au',
    'br',
    'pt',
    'cn',
    'de',
    'ru',
    'nl',
    'es',
    'kr',
    'as',
    'se'
  ];
  Omniture.PageLoad.GEOS = {};
  for (var i = 0; i < geos.length; i++) {
    Omniture.PageLoad.GEOS[geos[i]] = 1; 
  }
})();

Omniture.SharedConfigs = {};

Omniture.SharedConfigs.SC = {
   '_preprocess': function() {
      Omniture.SiteSections.SC.preprocess();
    }
};

Omniture.Config = {
    
  'solutionconnection.netapp.com': Omniture.SharedConfigs.SC,
  'www.itcalc.com': {
    'get_report.php':{
        '_preprocess': function() {       
        Omniture.SiteSections.SeCalc.preprocessFormPage();
        }  
    },   
    '_preprocess': function() {   
     Omniture.SiteSections.SeCalc.preprocess();
     }      
  },    
  
  'box.netapp.com': {
    'vespa3D': {
      '_preprocess': function() {
        Omniture.SiteSections.GO.preprocess();
      },
      '_process': function() {
        Omniture.SiteSections.GO.process();
      }
    }  
  }  

};

Omniture.System = {
  findMatches: function(c, depth) {
    var out = [];
    if (depth === undefined) depth = 0;
    var currPathNode = this.pathArray[depth];
    var wildcardMatch = c['*'];
    var exactMatch = c[currPathNode];
    var matchList = [wildcardMatch, exactMatch];
    for (var i = 0; i < matchList.length; i++) {
      var match = matchList[i];
      if (!match) continue;
      out[out.length] = match;
      var matches = this.findMatches(match, depth+1);
      out = out.concat(matches);
    }
    return out;
  },
  getConfigNodes: function() {
    var domain = window.location.hostname;
    var path = window.location.pathname;
    var partialPathArray = path.split('/');
    var len = partialPathArray.length;
    if (partialPathArray[len-1] == '') {
      partialPathArray[len-1] = 'index.html';
    }
    len = partialPathArray.length;
    var compactArray = [];
    for (var i = 0; i < len; i++) {
      var cell = partialPathArray[i];
      if (cell != undefined && cell.length > 0)
        compactArray.push(cell);
    }
    this.pathArray = [domain].concat(compactArray);
    return this.findMatches(Omniture.Config);
  },
  callHooks: function(hookName) {
    for (var i = 0; i < this.matches.length; i++) {
      var match = this.matches[i];
      var fcn = match[hookName];
      if (fcn) fcn();
    }
  },
  preProcess: function() {
    this.matches = this.getConfigNodes();
    this.callHooks('_preprocess');
  },
  process: function() {
    this.callHooks('_process');
    Omniture.PageLoad.callOmniture();
  },
  postProcess: function() {
    this.callHooks('_postprocess');
  }
};

Omniture.Util = {
  isLive: function() {
    var domain = window.location.hostname;
    if ((domain == "dev.www.netapp.com") || (domain == "stage.www.netapp.com")) {
      return false;
    } else {
      return true;
    }
  },
  getGeo: function() {
    return window.location.pathname.substring(1, 3);
  },
  getPageName: function() {
    return window.location.pathname.substring(1).split('/').join(':');
  },
  getStrippedBasename: function() {
    return window.location.pathname.split('/').pop().split('.')[0];
  },
  getNormalizedPageName: function() {
    var path = window.location.pathname;
    var pathArray = path.split('/');
    var last = pathArray.pop(); 
    if (last == '') {
      pathArray.push('index');
    } else {
      var base = last.split('.')[0];
      pathArray.push(base);
    }
    var out = pathArray.join(':');
    return out.substring(1); //remove the leading :
  },
  getNewRepeat: function() {
    return s.getNewRepeat();
  },
  setCookie: function(key, value, exp, domain) {
    var cookieStr = escape(key) + "=" + escape(value) + (exp ? "; expires=" + exp.toUTCString() : "") + "; path=/";
    if (domain) {
      cookieStr += "; domain=" + escape(domain);
    }
    document.cookie = cookieStr;
  },
  deleteCookie: function(key, domain) {
    var exp = new Date(1970, 1, 1);
    this.setCookie(key, '', exp, domain);
  },
  getCookie: function(key) {
    if (document.cookie.length == 0) return;
    var start = document.cookie.indexOf(key + "=");
    if (start != -1) {
      var valStart = start + key.length + 1;
      var end = document.cookie.indexOf(";", valStart);
      if (end == -1) end = document.cookie.length;
      return unescape(document.cookie.substring(valStart, end));
    }
  },
  setDebug: function(val) {
    this.debugOn = val;
  },
  isDebugOn: function() {
    return this.debugOn;
  },
  log: function(thing) {
    if (this.isDebugOn() && window.console) console.log(thing);
  },
  strip: function(s) {
    var out = s;
    if (out.stripTags) { // sometimes Prototype isn't available
      out = out.replace(/</g, ' <');
      out = out.stripTags();
    }
    out = out.replace(/\s+/g, ' ');
    out = out.replace(/^\s+|\s+$/g, '');
    return out;
  },
  getQueryParams: function(sep) {
    var qs = window.location.search.substring(1); //remove the leading '?'
    if (!sep) sep = '&';
    var pairs = qs.split(sep);
    var out = {};
    for (var i = 0; i < pairs.length; i++) {
      var nvArray = pairs[i].split('=');
      var name = nvArray[0];
      var value = nvArray[1];
      out[name] = value; //no need to handle multiple values for now
    }
    return out;
  },
  getQueryParam: function(name, sep) {
    if (!this.queryParams) {
      this.queryParams = this.getQueryParams(sep);
    }
    return this.queryParams[name];
  },
  getPrevPage: function() {
      return Omniture.Util.getCookie('_prevPage');
  }
};

Omniture.Call = {
  customLink: function(element, params, type) {
    Omniture.Util.log(element);
    Omniture.Util.log(params);
    if (type === undefined) type = 'o';
    var keys = "";
    for (key in params) {
      if (keys.length > 0) keys += ',';
      keys += key;
      s[key] = Omniture.Util.strip(params[key]);
    }
    s.linkTrackVars = keys;
    s.linkTrackEvents = params.events;
    var linkName = undefined;
    if (params.linkName) {
      linkName = params.linkName;
      delete params.linkName;
    }
    s.tl(element, type, linkName);
  }
};

Omniture.Listeners = {
   
};

Omniture.SiteSections = {
  SC:{
     preprocess: function() {
      s_account = 'networkapplsolutionconnection-dev';
      var tempPageName = ($('#crumbtrail').find('li')).map(function(){return(($(this).text()));}).get().join(':');
      var pageName = 'us:solution-connection:' + tempPageName.replace(/\s\s+/g, '').toLowerCase();
      
      var pageVars = {
        pageName: pageName,
        channel: 'solution-connection',
        geo: 'us',
        events: 'event29'
      };
      Omniture.PageLoad.setPageVars(pageVars);
    }    
  },
  GO: {
    preprocess: function() {
      var cc = 'us';
      if(window.location.href.indexOf('cc=') >= 0) {
        cc = Omniture.Util.getQueryParam('cc');
      }
      s_account = 'networkapplnetappcom-' + cc + ',networkapplglobalexternal';
    },
    process: function() {
      var cc = 'us';
      if(window.location.href.indexOf('cc=') >= 0) {
        cc = Omniture.Util.getQueryParam('cc');
      }
      //s_account = 'networkapplnetappcom-' + cc + '-dev,networkapplglobalexternal-dev';
      
      if(window.location.href.indexOf('page=') >= 0) {
        var pagefrom = Omniture.Util.getQueryParam('page');
        var params = {linkName: pagefrom+'-3d-click-'+cc};
        Omniture.Call.customLink({href: '/'}, params);
      }
    }
  },
    SeCalc: {
    preprocess: function() {
      s_account = 'networkapplglobalexternal';
      var country = geo;               
      var page = Omniture.Util.getNormalizedPageName();
      var path = document.location.pathname;
      var pathArray = path.split('/');
      var lastElm = pathArray.pop();
      if(lastElm.indexOf('.php') == -1){
          page = "index";
      }
      var pageName = country +':itcalc:'+ page;      
      
      if (typeof error != 'undefined'){
       pageName = country +':itcalc:error';   
      }
      var pageVars = {
        pageName: pageName,
        channel: 'calculator',
        geo: country,
        events: 'event29'
      };      
      Omniture.PageLoad.setPageVars(pageVars);
       if (typeof error != 'undefined'){return;}
            
      if(window.location.href.indexOf('thank_you') >= 0) {              
        Omniture.PageLoad.setCustomParam('events', 'event29,event79');
        Omniture.PageLoad.setCustomParam('eVar47', 'itcalc registration form');
      }	  
     
    },
   preprocessFormPage:function(){
        var country = geo;
        var pageVars = {
        pageName: country+':itcalc:registration',
        channel: 'forms',
        geo: country,
        events: 'event29,event78'
      };
      Omniture.PageLoad.setPageVars(pageVars);
      Omniture.PageLoad.setCustomParam('eVar47', 'itcalc registration form');
    }

  }

};


Omniture.Channels = {
  known: {
    'products': 1,
    'careers': 2,
    'communities': 3,
    'company': 5,
    'solutions': 6,
    'library': 7,
    'blogs': 8,
    'home': 9,
    'services': 10,
    'forms': 11,
    'seek': 12,
    'how-to-buy': 13,
    'contact-us': 14,
    'campaigns': 15,
    'investors': 16,
    'partners': 17,
    'technology': 18,
    'support': 19,
    'search': 20,
    'error': 21,
    'media': 22,
    'site': 23,
    'bizapps': 24,
    'communicate': 25,
    'sitemap': 26,
    'suppliers': 27,
    'on24': 28,
    'cisco-vmware': 29,
    'iva': 30,
    'storage-efficiency': 31,
    'nurture': 32,
    'midsize-storage-efficiency': 33
  },
  isKnown: function(channel) {
    return this.known[channel];
  }
};

Omniture.Campaigns = {
 
};

Omniture.System.preProcess();
if (window.Event && Event.observe) {
  Event.observe(window, 'load', function() {
    Omniture.System.postProcess();
  });
}


