
//
// DO NOT UPDATE THIS FILE, IS NOW LIVE
// uploaded 18/01/2012

// http://www.google.com/support/analytics/bin/answer.py?answer=55527

var is_dev = false;

function subStrC(string, substring) {
  // http://stackoverflow.com/questions/4009756/how-to-count-string-occurrence-in-string
  // much faster than string.match()
  var n=0;
  var pos=0;
  while(true){
    pos=string.indexOf(substring,pos);
    if (pos!=-1){ n++; pos+=substring.length;}
    else{break;}
  }
  return(n);
}


function homePageFeatureRotatorIsReady() {
  // overwrites the function in application.js
  // only different is appends querystring to feature.href
  var getSWF = function(movieName) {
   if (navigator.appName.indexOf("Microsoft") != -1) {
       return window[movieName];
   } else {
     return document[movieName];
   }
  }
  if (typeof(home_page_features) != 'undefined') {
    var swf = getSWF("home_page_feature_rotator");
    for (var i = 0; i < home_page_features.length; i++) {
      var feature = home_page_features[i];
      swf.addFeatureFromJavascript(feature.heading, feature.body, feature.href+'?ui=carousel', feature.image_url);
    }
  }
}


function recordUIAction(el, category, action, label) {
  try { 
    // if (is_dev) alert([el, category, action, label]);
    var pageTracker = _gat._getTracker("UA-215957-3");
    var milli = is_dev ? 500 : 100;
    pageTracker._trackEvent(category, action, label);
    var last = el.hasAttribute('href') ? el.href.substring(el.href.length-1) : '';
    if (action == 'click' && !el.hasAttribute('target') && last != '#') {
      setTimeout('document.location = "' + el.href + '"', milli);
    } else if (action == 'submit') {
      if (!el.hasAttribute('id')) el.id = 'myform';
      setTimeout('$("'+el.id+'").submit();', milli);
    }
  } catch(err) {}
}

var bindUILinkActionErrors = [];

function bindUILinkAction(el, category, action, label, bgcolor, delegate_xpath) {
  try {
    // delegate binds handler to parent_el and identfies via bubble
    // performance increase, saves multiple child binds
    if (delegate_xpath != false) {
      Event.on(el, action, delegate_xpath, function(evt, child_el) {
        recordUIAction(child_el, category, action, label);
        if (!child_el.hasAttribute('target')) {
          Event.stop(evt);
        }
      });
      if (is_dev && true) {
        // expensive
        var child_els = el.select(delegate_xpath);
        for (var i=0; i<child_els.length; i++) {
          var child_el = child_els[i];
          child_el.style.backgroundColor = bgcolor;
          child_el.setAttribute('xlabel', label);
        }
      }
    } else {
      // using Event.observe rather that el.observe for sake of ie6 bug
      Event.observe(el, action, function(evt) {
        recordUIAction(this, category, action, label);
        if (action == 'click' && !this.hasAttribute('target')) {
          Event.stop(evt);
        } else if (action == 'submit') {
          Event.stop(evt);
        }
      });
      if (is_dev && true) {
        el.style.backgroundColor = bgcolor;
        el.setAttribute('xlabel', label);
        // if (console) console.log(label + ' ' + bgcolor);
      }
    }
  } catch (e) {
    bindUILinkActionErrors.push([el,category, label]);
  }
}

var setupUITrackingTiming = [];

function setupUITracking(location, section, a) {
  var bgcolors = [
    'yellow',
    'orange',
    'firebrick',
    'red',
    'plum',
    'magenta',
    'blueviolet',
    'blue',
    'cyan',
    'green',
    'lime'
  ];
  var bgi = 0;
  var category = 'ui';
  //if (is_dev) var date = new Date();
  for (var j=0; j<a.length;j++) {
    if (is_dev) var start = new Date().getTime();
    var bgcolor = bgcolors[bgi];
    var label = [location, section, a[j][0]].join('_');
    var o = a[j][1];
    var action = (a[j].length >= 3) ? a[j][2] : 'click'; // may also be submit, or select
    var delegate_xpath = (a[j].length >= 4) ? a[j][3] : false;
    var type = Object.prototype.toString.call(o);
    var is_string = type == '[object String]'; // xpath
    var is_array = type == '[object Array]'; // array of elements
    if (is_string || is_array) {
      var els = is_string ? $$(o) : o;
      for (var i=0;i<els.length;i++) {
        var el = els[i];
        bindUILinkAction(el, category, action, label, bgcolor, delegate_xpath);
      }
    } else { // single element
      var el = o;
      bindUILinkAction(el, category, action, label, bgcolor, delegate_xpath);
    }
    bgi++;
    if (bgi == bgcolors.length) bgi = 0;
    if (is_dev) setupUITrackingTiming.push([label, new Date().getTime() - start]);
    // console.log(start);
  }
}


function setupUITrackingHeader(location) {
  var sites_links = $('global_logos').getElementsByTagName('a');
  var follow_links = $('follow').getElementsByTagName('a');
  var middle_links = $('header').getElementsByTagName('a');
  var bar_links = $('general_navigation').getElementsByTagName('a');
  var ribbon_links = $('ribbon_utilities').getElementsByTagName('a');
  var join_links = [];
  var join_nav = $('join_nav');
  var status_links = $('user_status').getElementsByTagName('a');
  var a = [
    ['sites_switch', sites_links[0]],
    ['sites_telme', sites_links[1]],
    ['sites_build', sites_links[2]],
    ['sites_saver', sites_links[3]],
    ['middle_logo', middle_links[0]],
    ['follow_facebook', follow_links[0]],
    ['follow_twitter', follow_links[1]],
    ['category_appliances', middle_links[1]],
    ['category_healthbeauty', middle_links[2]],
    ['category_legalrights', middle_links[3]],
    ['category_cars', middle_links[4]],
    ['category_heatingenergy', middle_links[5]],
    ['category_money', middle_links[6]],
    ['category_electronics', middle_links[7]],
    ['category_homeleisure', middle_links[8]],
    ['category_property', middle_links[9]],
    ['category_food', middle_links[10]],
    ['category_kidsfamily', middle_links[11]],
    ['category_publicissues', middle_links[12]],
    ['middle_bubble', middle_links[13]],
    ['bar_about', bar_links[0]],
    ['bar_contact', bar_links[1]],
    ['bar_whatsnew', bar_links[2]],
    ['bar_search', '#ribbon_search', 'submit'],
    ['bar_popularsearches', ribbon_links[0]],
    ['below_breadcrumbs', '#breadcrumbs a']
  ];
  if (join_nav) {
    var login_form = $$('#ribbon form')[0];
    a.push(['bar_login', login_form, 'submit']);
    a.push(['bar_joinnow', status_links[3]]);
  } else {
    a.push(['bar_myconsumer', status_links[0]]);
    a.push(['bar_logout', status_links[1]]);
    a.push(['below_member', '#user_welcome a']);
  }
  setupUITracking(location, 'header', a);
}


function setupUITrackingFooter(location) {
  var top_links = $('footer_navigation').getElementsByTagName('a');
  var cat_links = $('footer_categories').getElementsByTagName('a');
  var button_links = $('footer_categories').getElementsByTagName('div')[0].getElementsByTagName('a');
  var bottom_links = $('footer_branding').getElementsByTagName('a');
  var a = [
    ['top_aboutus', top_links[0]],
    ['top_contactus', top_links[1]],
    ['top_feedback', top_links[2]],
    ['top_help', top_links[3]],
    ['top_sitemap', top_links[4]],
    ['top_azindex', top_links[5]],
    ['top_news', top_links[6]],
    ['top_recalls', top_links[7]],
    ['top_vacancies', top_links[8]],
    ['top_community', top_links[9]],
    ['category_appliances', cat_links[0]],
    ['category_healthbeauty', cat_links[1]],
    ['category_legalrights', cat_links[2]],
    ['category_cars', cat_links[3]],
    ['category_heatingenergy', cat_links[4]],
    ['category_money', cat_links[5]],
    ['category_electronics', cat_links[6]],
    ['category_homeleisure', cat_links[7]],
    ['category_property', cat_links[8]],
    ['category_food', cat_links[9]],
    ['category_kidsfamily', cat_links[10]],
    ['category_publicissues', cat_links[11]],
    ['button_rss', button_links[0]],
    ['button_print', button_links[1]],
    ['button_feedback', button_links[2]],
    ['bottom_logo', bottom_links[0]],
    // have not included peripheral sites on select (is NOT in a form)
    ['bottom_logo', bottom_links[0]],
    ['bottom_privacy', bottom_links[1]],
    ['bottom_tcs', bottom_links[2]],
    ['bottom_3months', bottom_links[3]]
  ];
  setupUITracking(location, 'footer', a);
}


function setupUITrackingRight(location) {
  var a = [
    ['right_red', '#right_red'],
    ['right_join', '#right_join_tile a'],
    ['right_gift', '#right_gift a'],
    ['right_sitetour', '#right_sitetour a'],
    ['right_mailinglist', '#mailing-list-form', 'submit'],
    ['right_communities', '#consumer_communities', 'click', 'a'],
    ['right_mag', '#right_mag a:not(a.join_now_small)'],
    ['right_mag_join', '#right_mag a.join_now_small']
  ];
  // fix up mailinglist submit button
  var inputs = $$('#mailing-list-form input');
  var input = inputs[inputs.length-1];
  input.style.display = 'none';
  var el = document.createElement('input');
  el.type = 'submit';
  el.value = '';
  el.className = 'sign_up_small';
  input.parentNode.insertBefore(el, input);
  setupUITracking(location, 'right', a);
}


function setupUITrackingCategory(location) {
  // can't guarantee that any of these elements will be here
  // var featured_links = $$('#category_features a');
  // var news_links = $$('#category_news a');
  // var recalls_links = $$('#category_recalls a');
  var featured_el = $('category_features');
  var news_el = $('category_news');
  var recalls_el = $('category_recalls');
  var video_links = $$('#category_video a');
  var a = [
    ['checklist_report', '#category_checklist', 'click', 'a'],
    ['calcs_calc', '#category_calculators', 'click', 'a']
  ];
  if (featured_el) {
    a.push(['featured_title', featured_el, 'click', 'h3 a']);
    a.push(['featured_image', featured_el, 'click', 'li > a']);
    a.push(['featured_more', featured_el, 'click', 'p a']);
  }
  if (video_links.length > 0) {
    a.push(['video_image', video_links[0]]);
    a.push(['video_title', video_links[1]]);
    a.push(['video_more', video_links[2]]);
  }
  if (news_el) {
    a.push(['news_rss', news_el, 'click', 'h4 a']);
    a.push(['news_news', news_el, 'click', 'li a']);
    a.push(['news_all', news_el, 'click', 'p a']);
  }
  if (recalls_el) {
    a.push(['recalls_rss', recalls_el, 'click', 'h4 a']);
    a.push(['recalls_recall', recalls_el, 'click', 'li a']);
    a.push(['recalls_all', recalls_el, 'click', 'p a']);
  }
  if (location == 'subcat') {
    a.push(['content_report', '#subcategory_reports', 'click', 'a']);
  } else {
    var block_el = $('subcategory_block');
    a.push(['content_subcat', block_el, 'click', 'h3 a']);
    a.push(['content_report', block_el, 'click', 'ul a:not(a.more_cat)']);
    a.push(['content_viewall', block_el, 'click', 'a.more_cat']);
    /*
    a.push(['content_subcat', '#subcategory_block h3 a']);
    a.push(['content_report', '#subcategory_block ul a']);
    a.push(['content_viewall', '#subcategory_block li.last a']);
    */
  }
  /*
  if (featured_links.length > 0) {
    var featured_title = [];
    var featured_image = [];
    var featured_more = [];
    for (var i=0; i<featured_links.length; i+=3) {
      featured_title.push(featured_links[i]);
      featured_image.push(featured_links[i+1]);
      featured_more.push(featured_links[i+2]);
    }
    a.push(['featured_title', featured_title]);
    a.push(['featured_image', featured_image]);
    a.push(['featured_more', featured_more]);
  }
  */
  /*
  if (news_links.length > 0) {
    a.push(['news_rss', news_links[0]]);
    a.push(['news_news', news_links.slice(1, -1)]);
    a.push(['news_all', news_links[news_links.length-1]]);
  }
  if (recalls_links.length > 0) {
    a.push(['recalls_rss', recalls_links[0]]);
    a.push(['recalls_news', recalls_links.slice(1, -1)]);
    a.push(['recalls_all', recalls_links[recalls_links.length-1]]);
  }
  */
  setupUITracking(location, 'content', a);
}


function setupUITrackingJoinProcess(location) {
  
  // assuming join page
  var a = [];
  var leftnav_links = $$('#main_navigation a');
  var right_links = $$('#content_right a');
  if (leftnav_links.length == 4) {
    a.push(['leftnav_gifts', leftnav_links[1]]);
    a.push(['leftnav_magmems', leftnav_links[2]]);
    a.push(['leftnav_corpmem', leftnav_links[3]]);
  }
  if (right_links.length > 0) {
    a.push(['right_benefits', right_links[0]]);
    a.push(['right_sitetour', right_links[1]]);
    a.push(['right_memberssay', right_links[2]]);
  }
  if (location == 'joinpage') {
    var box_links = $$('#join-110506 a');
    if (box_links.length == 3) {
      a.push(['box_online', box_links[0]]);
      a.push(['box_magazine', box_links[1]]);
      a.push(['box_premium', box_links[2]]);
    }
  } else { // /join/online, etc
    a.push(['premium_upgrade', '#premium', 'change']);
    a.push(['top_promocode', '#promo']);
    a.push(['main_renewing', '#join_form a']);
    a.push(['main_continue', '#join_online', 'submit']);
    a.push(['bottom_renewing', '#content_main li a']);
  }
  setupUITracking(location, 'content', a);
}



function setupUITrackingReport(location) {
  // TODO: Introduction, models we tested, test results, next/prev, etc
  // TODO: js related info, js may also be interested, js receieve free updates
  // TODO: promo tile AB tests (currently has old tracking on it)
  var join_links = $$('#report_promo_1 a'); // 110823_N
  var free_join_links = $$('#report_promo_2 a'); // free report join links
  var highlights_divs = $$('#news_layout div.report_highlight');
  var widgets_uls = $$('#news_tools_div ul');
  var news_layout = $('news_layout');
  var a = [
    ['leftnav_page', '#internal_navigation_ul', 'click', 'a'],
    ['leftnav_updates', '#mailing-list-form', 'submit'],
    ['leftnav_related', '#main_navigation .related_content_widget', 'click', 'a'],
    ['bottom_interested', '#fl', 'click', 'a'],
    ['bottom_pagination', '#footer_pagination', 'click', 'a'],
    ['bottom_pagination', '#footer_pagination_js', 'click', 'a'],
    ['content_preview', '#content_right a.preview_models'],
    ['testtable_joinnow', '#product_summary_table a.join_now'],
    ['testtable_readmem', '#product_summary_table a.more'],
    ['testtable_buynow', '#product_summary_table a.buy_now'],
    ['highlights_image', news_layout, 'click', 'div.report_highlight > a'],
    ['highlights_title', news_layout, 'click', 'div.report_highlight h3 a'],
    ['highlights_more', news_layout, 'click', 'div.report_highlight p a']
  ];
  if (widgets_uls.length > 0) {
    var widgets_ul = widgets_uls[0];
    a.push(['widgets_print', widgets_ul, 'click', 'li.print a']);
    a.push(['widgets_comments', widgets_ul, 'click', 'li.comment a']);
    a.push(['widgets_video', widgets_ul, 'click', 'li.videos a']);
    a.push(['widgets_share', widgets_ul, 'click', 'li.add_this a']);
  }
  if (join_links.length >= 2) {
    a.push(['joinbox_readmem', join_links[0]]);
    a.push(['joinbox_joinnow', join_links[1]]);
    a.push(['joinbox_buynow', '#promo_form', 'submit']);
  }
  if (free_join_links.length >= 2) {
    a.push(['freejoinbox_joinnow', free_join_links[0]]);
    a.push(['freejoinbox_readmem', free_join_links[1]]);
  }  
  setupUITracking(location, 'content', a);
}


function setupUITrackingOther(location) {
  // Porbably won't do this stuff, since no scope to change
  // What's new, feedback, community, etc etc
}


function setupUITrackingHomePage(location) {
  // Use this sort of selector where possible, many times faster
  // document.getElementById('list').getElementsByTagName('li');
  // http://jsperf.com/using-getelementsbytagname-vs-children/2
  // var slider_links = $$('#home_latest_slider a');
  // var leftnav_links = $('main_navigation').getElementsByTagName('div')[0].getElementsByTagName('a');
  //var news_links = $$('#home_page_news_reports a');
  //var recalls_links = $$('#home_page_product_recalls a');
  //var media_links = $$('#home_page_in_the_media a');
  var leftad_links = $$('#main_navigation > p a');
  var featured_el = $('home_latest_slider');
  var news_el = $('home_page_news_reports');
  var recalls_el = $('home_page_product_recalls');
  var media_el = $('home_page_in_the_media');
  var community_links = $$('#home_page_community a');
  var intro_links = $$('#home_page_intro a');
  var a = [
    // Carosel done via old skool ?ui=carosel
    ['featured_rss', 'h1 a'],
    ['leftnav_az', '#menu_az'],
    ['topten_report', '#top_ten_reports', 'click', 'a'],
    ['left_telme', leftad_links[0]],
    ['left_switch', leftad_links[1]],
    ['featured_title', featured_el, 'click', 'h3 a'],
    ['featured_image', featured_el, 'click', 'div > a'],
    ['featured_more', featured_el, 'click', 'p a'],
    ['news_rss', news_el, 'click', 'a.rss'],
    ['news_item', news_el, 'click', 'strong a'],
    ['news_more', news_el, 'click', 'a.more'],
    ['news_rss', recalls_el, 'click', 'a.rss'],
    ['recalls_item', recalls_el, 'click', 'strong a'],
    ['recalls_more', recalls_el, 'click', 'a.more'],
    ['media_rss', media_el, 'click', 'a.rss'],
    ['media_item', media_el, 'click', 'strong a'],
    ['media_more', media_el, 'click', 'a.more'],
    ['community_visit', community_links[0]],
    ['community_posts', community_links[1]],
    ['community_comments', community_links[2]],
    ['community_polls', community_links[3]],
    ['community_facebook', community_links[4]],
    ['community_twitter', community_links[5]],
    ['intro_join', intro_links[0]],
    ['intro_more', intro_links[1]]
  ];
    /*
    ['news_rss', news_links[0]],
    ['news_item', news_links.slice(1, -1)],
    ['news_more', news_links[news_links.length-1]],
    ['recalls_rss', recalls_links[0]],
    ['recalls_item', recalls_links.slice(1, -1)],
    ['recalls_more', recalls_links[recalls_links.length-1]],
    ['media_rss', media_links[0]],
    ['media_item', media_links.slice(1, -1)],
    ['media_more', media_links[media_links.length-1]],
    */
  var leftnav_lis = $$('#main_navigation_ul li');
  for (var i=0;i<leftnav_lis.length;i++) {
    var category_li = leftnav_lis[i];
    var category_link = category_li.select('h2 a')[0]
    var u = category_link.href;
    u = u.replace('http://www.consumer.org.nz/category/', '');
    u = u.replace('http://draft.consumer.org.nz/category/', '');
    u = u.replace('-', '');
    category = u;
    a.push(['leftnav_category_'+category, category_link]);
    a.push(['leftnav_subcat_'+category, category_li, 'click', 'h3 a']);
    a.push(['leftnav_reports_'+category, category_li, 'click', 'p a']);
    a.push(['leftnav_more_'+category, category_li, 'click', 'a.more']);
  }
  /*
  var featured_title = [];
  var featured_image = [];
  var featured_more = [];
  for (var i=0;i<slider_links.length;i+=3) {
    featured_title.push(slider_links[i]);
    featured_image.push(slider_links[i+1]);
    featured_more.push(slider_links[i+2]);
  }
  a.push(['featured_title', featured_title]);
  a.push(['featured_image', featured_image]);
  a.push(['featured_more', featured_more]);
  */
  /*
  var leftnav = {};
  var category;
  for (var i=0;i<leftnav_links.length - 1;i+=0) { // -1 for a-z
    var u = leftnav_links[i].href;
    // is category
    if (u.indexOf('category') != -1 && subStrC(u, "/") == 4) {
      u = u.replace('http://www.consumer.org.nz/category/', '');
      u = u.replace('http://draft.consumer.org.nz/category/', '');
      u = u.replace('-', '');
      category = u;
      leftnav['leftnav_category_' + category] = leftnav_links[i];
      //leftnav['leftnav_subcat_' + category] = [];
      //leftnav['leftnav_reports_' + category] = [];
      //leftnav['leftnav_more_' + category] = [];
      i++;
    } else {
      //leftnav['leftnav_subcat_' + category].push(leftnav_links[i]);
      //leftnav['leftnav_reports_' + category].push(leftnav_links[i+1]);
      //leftnav['leftnav_reports_' + category].push(leftnav_links[i+2]);
      //leftnav['leftnav_more_' + category].push(leftnav_links[i+3]);      
      i+=4;
    }
  }
  for (var k in leftnav) {
    a.push([k, leftnav[k]]);
  }
  */
  setupUITracking(location, 'content', a);
}


var initUITrackingInterval;

function initUITracking() {
  clearInterval(initUITrackingInterval);
  if (is_dev) var start = new Date().getTime();
  var a = ['http://', 'https://', 'www.', 'draft.', 'consumer.org.nz'];
  var u = document.location.href;
  for (var i=0; i<a.length; i++) {
    u = u.replace(a[i], '');
  }
  var doSetupTracking = true;
  var location;
  if (u == '' || u == '/') {
    location = 'homepage';
    setupUITrackingHomePage(location);
    setupUITrackingRight(location);
  } else if (u.match('/category/')) {
    location = u.match(/\/category\/[^\/]+$/) ? 'category' : 'subcat';
    setupUITrackingCategory(location);
    setupUITrackingRight(location);
  } else if (u.match('/reports/')) {
    location = 'report'; // + suffix? intro / models we tested / we rcmd / testtable
    setupUITrackingReport(location);
    } else if (u.match('/products/')) {
    location = 'product'; // profile only, testtable done above
    setupUITrackingReport(location);
  } else if (u.match('/join')) {
    location = u.match('/join/') ? 'joinpage2' : 'joinpage';
    setupUITrackingJoinProcess(location);
  } else {
    doSetupTracking = false;
  }
  if (doSetupTracking) {
    setupUITrackingHeader(location);
    setupUITrackingFooter(location);
  }
  if (is_dev) {
    var a = [];
    for (var i=0;i<setupUITrackingTiming.length;i++) {
      a.push('<div><span style="display:inline-block;width:15px;">',setupUITrackingTiming[i][1],'</span>', setupUITrackingTiming[i][0],'</div>');
    }   
    var s  = new Date().getTime() - start + '<br>' + a.join('');
    $('footer').innerHTML += s;
    if (bindUILinkActionErrors.length > 0) alert(bindUILinkActionErrors);
  }
}


// initUITracking(); // will be a dom:loaded

document.observe('dom:loaded', function() {
  initUITrackingInterval = setInterval(initUITracking, 200);
});

