//Windows Live utility namepsace
var WL = function () {
    return {
        onloadEvents: [],
        isReady:false
    }
}();

WL.registerOnloadEvent = function (f) {
    WL.onloadEvents.push(f);
};

WL.runOnloadEvents = function () {
    $.each(WL.onloadEvents, function (i,o) {
        if (typeof WL.onloadEvents[i] == "function") WL.onloadEvents[i]();
    });
};

$(document).ready(function() {
    initJavascript();
    primaryNav();
    tabs();
    openModal();
    signInModal();
    initPESelect();
    initToolTips();
    scenarioHover();
    scenarioToggle();
    stripePostListing();
    WL.eventHandler.activate();/* run these last */
    WL.runOnloadEvents();/* run these last */
});

var initJavascript = function () {
    $('body').removeClass('scriptDisabled').addClass('scriptEnabled');
    $('a[href="/jsrequired"]').attr('href', '#');
};

var initToolTips = function (selectors) {
    selectors = selectors || 'ul.badges, h4.postTT, a.productTT, a.rssTT, span.flagTT, .badgeTT';
    $(selectors).hoverIntent({
        over: function (e) {
            var $e = $(e.target);
            var newId = 'miclone' + Math.floor(Math.random() * 10000);
            $e.data('miclone',{'id':newId});
            showMoreInfo($(this), e);
            //console.log($e.data('miclone'));
        },
        out: function (e) {if ($('#moreInfo:visible').length > 0) hideMoreInfo($(this), e)},
        sensitivity: 100,
        interval: 100,
        timeout: 200
     }); 
};


/*
Progressively Enhanced Select Menu
Takes a regular select menu, hides it, builds a custom select widget based on the select options. As options are chosen, the widget updates the hidden select menu and submits the original form.
*/
var initPESelect = function() {
    $('.origSelect').each(function() {
        var $sel = $(this).find('select'), html = ['<div class="peSelect"><div class="peButtonCont"><a onClick="javascript:dcsMultiTrack(\'DCS.dcssip\',\'www.microsoft.com\',\'DCS.dcsuri\',\'/windowslive\',\'WT.ti\',\'Windows Live Netherland – Select menu\',\'WT.ad\',\'\',\'WT.ac\',\'\',\'WT.dl\',\'0\');" href="#" class="peButton">Select one&hellip;</a></div><div class="peSubmitCont"><a onClick="javascript:dcsMultiTrack(\'DCS.dcssip\',\'www.microsoft.com\',\'DCS.dcsuri\',\'/windowslive\',\'WT.ti\',\'Windows Live Netherland – Titel van onderwerp\',\'WT.ad\',\'\',\'WT.ac\',\'\',\'WT.dl\',\'0\');" href="#" class="scEvent15 cta peSubmit">Go</a></div><ul class="closed">'];
        var temp = $sel.find('option').not('.choose').each(function() {
            html.push('<li><a onClick="dcsMultiTrack(\'DCS.dcssip\',\'www.microsoft.com\',\'DCS.dcsuri\',\'/windowslive\',\'WT.ti\',\'Windows Live Netherland – Select menu\',\'WT.ad\',\'\',\'WT.ac\',\'\',\'WT.dl\',\'0\');" href="#" title="' + $(this).attr('value') + '" class="peOption">' + $(this).html() + '</a></li>');
        });
        if ($sel.find('option:selected').length == 1)
            html.push('</ul></div>');
        $sel.siblings('input.cta').andSelf().addClass('hidden');
        $sel.after(html.join(''));
        var $selectedOption = $sel.find('option:selected');
        if ($selectedOption.length == 1) $(this).find('.peButton').html($selectedOption.html());
    });
};

WL.eventHandler = {
    activate: function () {
         $(document).bind('click', function (e) {//master click listener
	        if (e.target.className && WL.eventHandler.events != null) {
                var classNames = e.target.className.split(' '), pd = false, keepOpen = [];
                $.each(classNames, function (i,o) {
                    if (WL.eventHandler.events[o]) {
                        var returnData = WL.eventHandler.events[o]($(e.target)), params = typeof returnData == 'undefined'? false: returnData;
                        keepOpen = params? params.keepOpen : [];
                        pd = params && typeof params.pd != 'undefined'? params.pd : true;
                    }
                });
                if (pd) e.preventDefault();
	        }
	        WL.closeMenus(keepOpen);
        }); 
        $(document).bind('keypress', function (e) {
            switch (e.keyCode) {
                case 27://escape key closes open menus
                WL.closeMenus();
            }
        });
    },
    trigger: function (className) {
        WL.eventHandler.events[className]($());
    },
    events: {//reserved class names mapped to functions
        'peButton': function ($e) {
            var $ul = $e.parents('.peSelect').find('ul');
            $ul.toggleClass('closed');
            return {keepOpen: $ul.is(':visible')? $ul:[]};
        },
        'peOption': function ($e) {
            var $parent = $e.parents('.origSelect');
            $parent.find('select option[value=' + $e.attr('title') + ']')[0].selected = true;
            $parent.find('input.cta').val($e.attr('title'));
            $parent.find('a.peButton').html($e.html());
        },
        'peSubmit': function ($e) {
            $e.parents('.origSelect').find('input.cta').trigger('click');
        },
        'preventDefault': function ($e) {
            return {pd:true};
        }
    }
};

WL.closeMenus = function (keepOpen) {
    if (typeof keepOpen == 'undefined' || keepOpen == null) keepOpen = [];
    $('.peSelect ul:visible, #shareThis .hoverCont:visible').not(keepOpen).addClass('closed');
    
};

// Object that caused the more info tooltip to appear
var moreInfoOwner = null;

var hideMoreInfo = function($this, e) {
    if (moreInfoOwner == $this.get(0)) {
        var $mi = $('#moreInfo');
        $mi.addClass('closed').removeClass('displayedTT').removeClass('left').removeClass('right').removeClass('top').removeClass('bottom').css({ top: -9999, left: -9999 }).find('.badgesDetail, .badgesCHDetail, .postDetail, .productDetail, .rssDetail, .flagPostDetail').hide();
        $mi.appendTo('#wrapper');
    }
};

var showMoreInfo = function($this, e) {
    moreInfoOwner = $this.get(0);
    //display container
    //position moreInfo container
    var $mi = $('#moreInfo').removeClass('left').removeClass('right').removeClass('top').removeClass('bottom');
    var $e = $(e.target);
    $e = $e.is('ul.badges, h4.postTT') ? $e : $e.parents('ul.badges, h4.postTT').length > 0 ? $e.parents('ul.badges, h4.postTT') : $e.parents('.productTT').length > 0 ? $e.parents('a.productTT') : $e;
    //add class or populate moreInfo container with data
    var miContent = '';
    if ($e.is('.badges') || $e.is('.badgeTT')) {
        if ($e.is('.ch')) miContent = '.ch';
        else miContent = '.badgesDetail:not(.ch)';
    } else if ($e.is('.productTT')) {
        miContent = '.productDetail';
        //pop data
        $mi.find('.productDetail h3').html($e.attr('rel'));
        $mi.find('.productDetail p').html($e.find('span.description').html());

    } else if ($e.is('.postTT')) {
        miContent = '.postDetail';
        //pop data
        var $parent = $e.parents('.body');
        $mi.find('.postDetail .summary').html($parent.find('.summary').html());
        $mi.find('.postDetail .tags').html($parent.find('dd.tags').html());
        $mi.find('.postDetail .views').html($parent.find('dd.views').html());
        $mi.find('.postDetail a.title').html($e.text()).attr({ 'href': $e.find('a.name').attr('href') });
        $mi.find('.postDetail a.cta').attr({ 'href': $e.find('a.name').attr('href') });
        $mi.appendTo($e);
    } else if ($e.is('.rssTT')) {
        miContent = '.rssDetail';
    } else if ($e.is('.flagTT')) {
        miContent = '.flagPostDetail';
    }
    $mi.find(miContent).show();
    $mi.removeClass('closed');

    var targetPos = $e.offset();

    if ($e.is('.anchor.vertical')) {
        var h = $(window).height(), miLeft = targetPos.left - ($mi.outerWidth() - $e.outerWidth()) / 2, miTop;
        var topMargin = targetPos.top - document.documentElement.scrollTop;
        var bottomMargin = h - (targetPos.top - document.documentElement.scrollTop) - $e.outerWidth();
        if (bottomMargin > topMargin) {
            $mi.addClass('bottom');
            miTop = targetPos.top + $e.outerHeight() + 16;
        }
        else {
            $mi.addClass('top');
            miTop = targetPos.top - $mi.outerHeight() - 16;
        }
        $mi.css({ top: miTop, left: miLeft }).find('.arrow').css({ top: null });
    }
    else {
        var w = $('body').width(), arrowClass = '', miLeft = 0;
        if (w / 2 - targetPos.left < 0) {
            $mi.addClass('right');
            miLeft = targetPos.left - $mi.outerWidth();
            // Adjustment: tooltip arrow lands immediately over the question mark otherwise
            if ($e.is('.flagTT')) {
                miLeft -= 14;
            }
        } else {
            $mi.addClass('left');
            var postDetailOffset = miContent == '.postDetail' ? 50 : 0;
            miLeft = targetPos.left + $e.outerWidth() - postDetailOffset;
        }

        var difference = targetPos.top - $mi.outerHeight() + 50 - $(document).scrollTop();
        var top = difference < 0 ? $(document).scrollTop() : targetPos.top - $mi.outerHeight() + 50;
        var arrowOffset = difference < 0 ? $mi.outerHeight() - 58 + difference : $mi.outerHeight() - 58;
        $mi.css({ top: top, left: miLeft }).find('.left, .right').css({ marginTop: arrowOffset < 0 ? 0 : arrowOffset });

        $mi.find('.arrow').css({ top: targetPos.top - $mi.offset().top });
    }

    $mi.addClass('displayedTT');
};

function primaryNav() {    
    var subNav = $('.nav .subNavWrapper');  
    subNav.each(function()
    {
        //apply the rounded background box to the sub navigation
        $(this).wrapInner('<div class="mid"><div class="l"><div class="r"><div class="m">');
        $(this).children('.mid').before('<div class="top"><div class="l"></div><div class="m"></div><div class="r"></div></div>');
        $(this).children('.mid').after('<div class="bottom"><div class="l"></div><div class="m"></div><div class="r"></div></div>');
        $(this).wrapInner('<div class="helpDiv">');
    });

    var $navDDs = $('#navProducts, #navAction, #navCHAbout, #navCHHowTo, #navFun');
    $navDDs.hoverIntent({
        over: function () {
            $(this).find('.subNavWrapper').removeClass('closed');
            },
        out: function () {
            $(this).find('.subNavWrapper').addClass('closed');
            },
        sensitivity: 100,
        interval: 100,
	    timeout: 10
    });
}

function tabs()
{
    $('div.tabWrapper div.tabContent').each(function()
    {
        $(this).addClass('closed');
    });
    
    $('ul.tabs:not(.admin) a:first').addClass('current');
    
    $('div.tabWrapper div:first').addClass('open').removeClass('closed');
    
    $('ul.tabs:not(.admin) a').click(
    function()
    {
        $('ul.tabs a').each(function()
        {
            $(this).removeClass('current');            
        });       
        
        $(this).addClass('current');
        
        $('div.tabWrapper div.tabContent').each(function()
        {
            $(this).removeClass('open')
                   .addClass('closed');
        });

        $('div.tabWrapper div' + $(this).attr('href'))
            .toggleClass('open')
            .removeClass('closed');
        return false;
    });
}

/* Scenarios */
function scenarioHover()
{
   $('#scenarioLanding .scenarios').hover(
   function()
   {
      $(this).addClass('hoverOn');
   },
   function()
   {
      $(this).removeClass('hoverOn');
   });
}

function scenarioToggle()
{
   $('#scenarioDetail .desc, #tour .desc').each(
   function()
   {
      $(this).addClass('toggle');
   });
   
   
   $('#scenarioDetail .desc p, #scenarioDetail .desc a, #tour .desc p, #tour .desc a').each(
   function()
   {
      $(this).addClass('closed');
   });
   
   $('#scenarioDetail .toggle, #tour .toggle').click(
   function()
   {
      $(this).children().toggleClass('closed');
      $(this).children('h5').toggleClass('closed').toggleClass('open');
   });
}
/* End Scenarios */
 

function openModal() {
    $('.advocateBlock .openModal').each(
    function()
    {
    
       
        $('.advocateBlock div#' + this.id.replace('advocateDetail','modalAdvocate')) 
        .jqDrag('.jqDrag')
        .jqResize('.jqResize')
        .jqm({
          trigger: '#' + $(this).attr('id'),
          overlay: 0,
          onShow: function(h) {
            /* callback executed when a trigger click. Show notice */
            h.w.slideDown(); 
            },
          onHide: function(h) {
            /* callback executed on window hide. Hide notice, overlay. */
            h.w.slideUp("slow",function() { if(h.o) h.o.remove(); }); }
          });
       });
}
 
// ****************************
// SIGN IN MODAL
// ****************************
function signInModal()
{
    
        $('div#signInModal').jqm();
        
        $('div#signInModal input#login').click( function() {
            var userid = $('div#signInModal input#user_id').val();
            window.location.href = window.location.href + "?login=" + userid; //put live id here
        });
    
}


/* /Explore */
/* Product landing page product detail functionality */
WL.registerOnloadEvent(function () {
    //bind click to products
    //WL.eventHandler.events['getProductDetail'] = function ($e) {getProductDetail($e)};
    //WL.eventHandler.events['getProductDetailSpan'] = function ($e) {$e = $e.parent(); getProductDetail($e)};
});


WL.ajaxQueue = [];

var getProductDetail = function($e) {
    $('ul.prodLayout3x a').removeClass('selected');
    if ($e.parents('.worksGreatWith').length == 1) $('ul.prodLayout3x li.' + $e.attr('rel').toLowerCase() + ' a').addClass('selected');
    else $e.addClass('selected');
    var ajaxTest = $.ajax({
        beforeSend: function(xhr) {
            $.each(WL.ajaxQueue, function(i, o) {
                WL.ajaxQueue[i].abort();
            });
            WL.ajaxQueue = [];
            WL.ajaxQueue.push(xhr);
        },
        complete: function() {
            WL.ajaxQueue = [];
        },
        data: null,
        dataType: 'html',
        url: m_root + '/Explore/productSuiteDetail.aspx?product=' + $e.attr('rel'),
        success: function(response) {
            $('.main').html(response);
            initToolTips('ul.badges, h4.postTT, .worksGreatWith .productTT');
        },
        error: function() {

        }
    });
};

var stripePostListing = function () {
    $('.advoPost.apFull > li:nth-child(odd)').addClass('odd');
};

var WindowsMediaPlayer = {
    isInstalled : function () {
        if (navigator.plugins && navigator.plugins.length) {
            for (var i=0; i < navigator.plugins.length; i++) {
                var plugin = navigator.plugins[i];
                if (plugin.name.indexOf('Windows Media Player') > -1) {
                    return true;
                }
            }
        }
        else if (navigator.userAgent && navigator.userAgent.indexOf('MSIE') >= 0) {
            return true;
        }
        return false;
    }
};

/* Adapted function to change on demand */
function switchIt(active) {
    var i = 0;

    $('ul.tabs a').each(function() {
        i++;
        if (i == active) {
            $(this).addClass('current');
            $('div.tabWrapper div' + $(this).attr('href'))
		.toggleClass('open')
		.removeClass('closed');
        } else
            $(this).removeClass('current');
    });

    i = 0;

    $('div.tabWrapper div.tabContent').each(function() {
        i++;
        if (i != active) {
            $(this).removeClass('open')
				   .addClass('closed');
        }
    });

    return false;
};