/**
 * define GA tracker support functions
 */
$(document).ready(function() {
  jQuery.browser = jQuery.browser || {}
  jQuery.browser.mobile = !!navigator.userAgent.match(/mobile/i)
  jQuery.browser.iphone = !!navigator.userAgent.match(/iphone/i)
  jQuery.browser.ipad = !!navigator.userAgent.match(/ipad/i)
  jQuery.browser.android = !!navigator.userAgent.match(/android/i)
});

jQuery.fn.extend({
  onsipColorize: function(selector) {
    var text = $(this).html().replace(/(my.)?onsip/i,"<span class='light onsip-coloring'>$1</span><span class='dark onsip-coloring'>On</span><span class='light onsip-coloring'>SIP</span>");
    $(this).html(text);
  },

  init_tracker: function(tracker) {
    var ignoredOrganics = [
/*
      "onsip",
      "onsip.com",
      "onsip.org",
      "www.onsip.com",
      "http://www.onsip.com",
      "junction networks onsip",
      "admin.onsip.com",
      "junction networks",
      "junction voip",
      "junction networks voip",
      "junctionnetworks.com"
*/
    ];

    $(ignoredOrganics).each(function(i) {
      tracker._addIgnoredOrganic(this);
    });

    tracker._setAllowLinker(true);
    tracker._setDomainName("none");
    tracker._trackPageview();

    $(this).attach_all_trackers(tracker);
  },

  attach_tracker: function(tracker, loc) {
    var loc_key = 'ga_loc',
      tracker_key = 'ga_tracker',
      bound_key = 'ga_bound';

    if(!$(this).data) return false;

    var is_bound = !!$(this).data(bound_key);

    var reg =  new RegExp("^((http[s]?://" + location.host + ")|\/)(.*)$"); 

    if (!$(this).attr('href') || $(this).attr('href').match(reg) || !tracker) return false;

    loc = loc ? loc : $(this).attr('href');

    $(this).data(tracker_key, tracker);
    $(this).data(loc_key, loc);

    if (!is_bound) {
      $(this).click(function() {
        var tracker = $(this).data(tracker_key);
        var loc = $(this).data(loc_key);

        if (!tracker || !loc || !tracker['_link']) return true;

        tracker._link(loc);
        return false;
      });
      $(this).data(bound_key, true);
      $(this).addClass('_ga-domain-tracked');
    }

    return $(this).data(bound_key);
  },

  attach_all_trackers: function(pageTracker) {
    var domains = [
      'www.onsip.com',
      'admin.onsip.com',
      'signup.onsip.com',
      'www.junctionnetworks.com',
      'wiki.junctionnetworks.com',
      'pstn.junctionnetworks.com'
    ]

    $(domains).map(function(i) {
      return (this == location.host) ? null : this
    }).each(function(i) {
      var domain = this;
      $('a').map(function(j) {
        var href = $(this).attr('href');
        var pattern = new RegExp("^(http[s]?://" + domain + ")(.*)$");
        return (href && (href.match(pattern))) ? this : null
      }).each(function(j) {
        $(this).attach_tracker(pageTracker); 
      })
    })
  }
});

(function($) {
    jQuery.fn.buildSidebar = function(pos,insertion){
        if (pos != 'left' && pos != 'right') return;

        var tpl = '<div id="%@"><div id="%@"></div></div>',
        menuTpl = '<div class="block-menu"><ul class="menu"></ul></div>',
        outerId = "sidebar-%@".fmt(pos),
        innerId = "%@-inner".fmt(outerId),
        sel = "#%@".fmt(outerId),
        classes = {
            left: 'sidebar-left', 
            right: 'sidebar-right',
            none: 'no-sidebars',
            one: 'one-sidebar', 
            two: 'two-sidebars'
        };
        
        if (!$(sel).length) {
            $("#main-inner").append(tpl.fmt(outerId, innerId));
        }

        var body = $('body');
        if (!body.hasClass(classes[pos])) {
            body.addClass(classes[pos]);

            if (body.hasClass(classes.one)) {
                body.addClass(classes.two);
                body.removeClass(classes.one);
            } else {
                body.addClass(classes.one);
            }

            body.removeClass(classes.none);
        }

        $("#%@".fmt(innerId)).append(menuTpl);
        insertion.each(function() {
            $("#%@ .menu".fmt(innerId)).append("<li>%@</li>".fmt($(this).html()));
        });

        return this;
    };

    jQuery.fn.buildSlidingTour = function(settings) {
        if (!this.length) return;

        var defaults = {
            titleSelector: '.tour-title',
            sidebar: 'left',
            viewClassSelector: '.view-onsip-tour'
        };

        settings = $.extend(defaults,settings);

        $(document).buildSidebar('left', $(settings.titleSelector).remove());
        $('#sidebar-left .menu a').each(
            function() {
                $(this).css({outline: 'none'});
                $(this).attr('href',
                             $(this).attr('href').replace(/\/[^\/]*$/g,
                                                          function() { 
                                                              return arguments[0].replace('/','#'); 
                                                          }));
            });

        var height = jQuery.map($('.node'), function(el,idx) { return $(el).height(); }).max() + 100;

        $('.view-onsip-tour').css({
            position: 'relative',
            overflow: 'hidden',
            clear: 'both',
            height: '%@px'.fmt(height)});
        $('.view-onsip-tour .view-content').css({
            position: 'absolute',
            width: '20000px',
            margin: 0,
            padding: 0,
            height: '100%'});
        $('.view-onsip-tour .node').css({
            display: 'block',
            float: 'left',
            width: '760px',
            border: 'none',
            "text-align": "left"});
        $('.view-onsip-tour .node img').css({'max-width': '720px'});

        var updateTourTitleToSelected = function() {
            var api = this,
            idx = arguments[1],
            naviButtons = api.getNaviButtons(),
            selectedListItem = $(naviButtons).children('li')[idx],
            selectedAnchor = $(selectedListItem).children('a'),
            title = $(selectedAnchor).html();

            $('h1.title').html(title);
        };

        var scrollable = $(".view-onsip-tour")
            .scrollable({
                items: '.view-content', 
                circular: true,
                keyboard: false,
                onBeforeSeek: function(evt,idx) {
                    updateLocationHash.apply(this,arguments);
                    updateTourTitleToSelected.apply(this,arguments);
                }
            })
            .navigator({
                navi: '#sidebar-left .menu',
                naviItem: 'li a'
            });

        var api = $(scrollable).data('scrollable');

        var updateLocationHash = function() {
            var idx = arguments[1];
            location.hash = "%@".fmt(idx);
        };

        var scrollIdxFromHash = function() {
            return location.hash ? parseInt(location.hash.replace('#','')) : 0;
        };

        var seekToHash = function seekToHash() {
            api.seekTo(scrollIdxFromHash());
        };

        seekToHash();
        $(window).hashchange(seekToHash);
    };
})(jQuery);

