//Windows Live utility namespace
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]();
    });
};

var GLOBAL = {
    HttpResponse: null
};


$(document).ready(function() {
    primaryNav();
    fontReplacement();
    stripePostListing();
    initPESelect();
    WL.eventHandler.activate();
    WL.runOnloadEvents();
    anchorOpensNewWindow();
     /* run these last */
    initCtaContainers();
});

var initCtaContainers = function() {
    $('.ctaContainer').each(function() {
        $(this).unbind('click').click(function(e) {
            var $e = $(e.target);
            WL.eventHandler.trigger('scProductModuleNav', $e);
            window.location = $(this).find('a.cta').attr('href');
        }).css('cursor', 'pointer');
    });
};

var fontReplacement = function() {
    Cufon.replace('.seg30', { color: '#484848', fontFamily: 'Segoe Light', separate: 'none' });
    Cufon.replace('.seg14', { color: '#484848', fontFamily: 'Segoe Light' });
    Cufon.replace('.seg16', { color: '#000', fontFamily: 'Segoe Light' });
    Cufon.replace('.seg24', { color: '#484848', fontFamily: 'Segoe Light' });
};

/*
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 href="#" class="peButton">Select one&hellip;</a></div><div class="peSubmitCont"><a href="#" class="scFindPostMenu cta peSubmit">Go</a></div><ul class="closed">'];
        var temp = $sel.find('option').not('.choose').each(function() {
            html.push('<li><a 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() {
        //return false;
        $(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 = returnData === undefined ? false : returnData;
                        keepOpen = params ? params.keepOpen : [];
                        pd = params && 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, $e) {
        $e = $e === undefined || $e == null ? $([]) : $e;
        if (WL.eventHandler.events[className]) WL.eventHandler.events[className]($e);
    },
    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, .peSelect#shareThis .hoverCont:visible').not(keepOpen).addClass('closed');
};

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>');
    });

    var $navDDs = $('#navDesktop, #navOnline, #navAction');
    $navDDs.hoverIntent({
        over: function() {
            $(this).find('.subNavWrapper').removeClass('closed');
        },
        out: function() {
            $(this).find('.subNavWrapper').addClass('closed');
        },
        sensitivity: 100,
        interval: 100,
        timeout: 10
    });
};

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;
    },
    destroy: function() {
        $('object[type=application/x-ms-wmp]').each(function(i) {
            try {
                this.close();
            } catch(e) { }
        });
    }
};

function anchorOpensNewWindow(){
    var windows7Video = $('#WindowsSeven .promotion a'),
        windows7Cta = $('#WindowsSeven .heroSummary a.heroCta'),
        getPersonalCta = $('#GetPersonal .heroSummary a.heroCta');
        
    windows7Video.attr({target:'_blank'});
    windows7Cta.attr({target:'_blank'});
    getPersonalCta.attr({target:'_blank'});
}