﻿function loadNews() {
    $.getJSON('publisher/publisher_news.js', function (d) {
        var newsUL = $('#m-news-list'),
			newsLI,
			titleH3,
			shareDIV,
			contentDIV,
			articleUrl,
			categoryUrl,
            includeContentDIV,
            titleUrl;
        /* function inside loadNews for closure and minification */
        function expandNewsItem(e) {
            e.preventDefault();
            $(this).parent('li').toggleClass('hidden');
        }
        /* function inside loadNews for closure and minification */
        function returnNewsTitle(directory) {
            switch (directory) {
                case '112':
                    return 'news';
                case '113':
                    return 'devblog';
                case '101':
                    return 'news';
                case '217':
                    return 'maintenance';
                default:
                    return 'news';
            }
        }
        /* function inside loadNews for closure and minification */
        function returnCategoryUrl(directory, content) {
            switch (directory) {
                case '112':
                    return "News/News.aspx?boardNo=100&contentNo=" + content + "&pageIndex=1";
                case '113':
                    return "FunStuff/GMBlog.aspx?boardNo=400&contentNo=" + content + "&pageIndex=1";
                case '101':
                    return "News/Events.aspx?boardNo=204&contentNo=" + content + "&pageIndex=1";
                case '217':
                    return "News/Events.aspx?boardNo=106&contentNo=" + content + "&pageIndex=1";
                default:
                    return 'News/News.aspx?boardNo=100&contentNo=' + content + '&pageIndex=1';
            }
        }
        for (var i = 0; i < d.length; i++) {
            /* setup dom objects */
            newsLI = $('<li>').append($('<a>').attr('href', '#').addClass('expander'));
            titleH3 = $('<h3>').addClass('title');
            shareDIV = $('<div>').addClass('share');
            contentDIV = $('<div>').addClass('summary');
            includeContentDIV = $('<div>').addClass('content');
            titleUrl = $('<a>').addClass('title-link');
            /* setup category url */
            categoryUrl = returnCategoryUrl(d[i].directory_no, d[i].content_no);

            var cate_name = returnNewsTitle(d[i].directory_no);
            /* add the tag class */
            newsLI.append($('<div>').addClass('tag ' + 'tag-' + cate_name).text(cate_name));
            /* odd elements */
            if (i == d.length - 1) {
                newsLI.addClass('last');
            }
            /* hidden elements */
            if (d[i].expand_content !== '1') {
                newsLI.addClass('hidden');
            }
            /* article url */
            articleUrl = "http://maplestory.nexon.net/" + categoryUrl;
            /* add title to the li */
            titleUrl.attr('href', articleUrl).append(titleH3.text(d[i].content_title));
            includeContentDIV.append(titleUrl);

            var rd = d[i].registered_datetime;
            var esd = d[i].effective_start_datetime;
            var esdd = new Date(esd.replace(/\./g, ""));
            var cutoff = new Date("Feb 1 2012");
            var dd = (esdd < cutoff) ? rd : esd;

            includeContentDIV.append($('<span>').addClass('date').text(dd));
            /* share button markup - twitter */
            shareDIV.append($('<div>').addClass('twitter').append($('<a>').attr({
                'href': "http://twitter.com/share",
                'data-url': articleUrl,
                'data-via': 'MapleStory',
                'data-count': 'horizontal',
                'data-text': 'MapleStory-' + cate_name + ' - ' + d[i].content_title
            }).html('Tweet').addClass('twitter-share-button')));
            /* share button markup - fb */
            shareDIV.append($('<div>').addClass('facebook').append($('<a>').attr({
                'name': "fb_share",
                'type': "button_count",
                'share_url': articleUrl
            })));
            includeContentDIV.append(shareDIV);
            contentDIV.append(d[i].summary);
            includeContentDIV.append(contentDIV);
            newsLI.append(includeContentDIV);
            newsUL.append(newsLI);
        }
        /* click handler for title to toggle hidden state */
        $('.expander').click(expandNewsItem);

        $('<script>').attr({ type: 'text/javascript', src: 'http://static.ak.fbcdn.net/connect.php/js/FB.Share' }).appendTo('body');
        $('<script>').attr({ type: 'text/javascript', src: 'http://platform.twitter.com/widgets.js' }).appendTo('body');
    });
}

function loadRanking() {
    var avatarIMG = $('#m-ranks-avatar-avatar'),
		petIMG = $('#m-ranks-avatar-pet'),
		viewAll = $('#m-ranks-viewall'),
		loadCount = 0;

    /* show a tab */
    function showTab(i) {
        $('#m-ranks-tabs li').removeClass('active');
        $('#m-ranks-tabs li').eq(i).addClass('active');
        $('#m-ranks-content ul').hide();
        $('#m-ranks-content ul').eq(i).show();
        avatarIMG.attr('src', $('#m-ranks-content ul').eq(i).children('li').eq(0).attr('data-avatar'));
        petIMG.attr('src', $('#m-ranks-content ul').eq(i).children('li').eq(0).attr('data-pet'));
        viewAll.attr('href', $('#m-ranks-tabs li a').eq(i).attr('href'))
			.text('View All ' + $('#m-ranks-tabs li a').eq(i).text() + ' Rankings');
    }

    /* function inside loadRanking for closure and minification */
    function loadRankingFromJSON(url) {
        $.getJSON(url, function (d) {
            var rankPARENT = $('#m-ranks-content'),
				rankUL = $('<ul>'),
				rankLI,
				fieldClasses = ['number', 'name', 'rank', 'job'],
				fieldInput = ['Rank', 'CharacterName', 'Level', 'Job'],
				i, j;
            function listItemHover() {
                avatarIMG.attr('src', $(this).attr('data-avatar'));
                petIMG.attr('src', $(this).attr('data-pet'));
            }
            for (i = 0; i < 5; i++) {
                /* setup dom objects */
                rankLI = $('<li>');
                /* odd elements */
                if (i % 2 === 0) {
                    rankLI.addClass('odd');
                }
                /* add the four fields */
                for (j = 0; j < 4; j++) {
                    if(j == 3)
                        rankLI.append($('<div>').addClass(fieldClasses[j]).prepend("<img src=\"http://nxcache.nexon.net/maplestory/img/icons/rank-small/icon-job-" + d[i][fieldInput[j]].toLowerCase() + ".gif\" alt=\"" + d[i][fieldInput[j]] + "\" title=\"" + d[i][fieldInput[j]] + "\" />"));
                    else
                        rankLI.append($('<div>').addClass(fieldClasses[j]).text(d[i][fieldInput[j]]));
                }
                /* hover state to change avatar and pet */
                rankLI.bind('mouseenter', listItemHover);
                /* save the avatar and pet images */
                rankLI.attr({ 'data-avatar': d[i].CharacterLook, 'data-pet': d[i].PetLook });
                rankUL.append(rankLI);
            }
            rankPARENT.append(rankUL);
            if (loadCount < 3) {
                loadCount++;
            } else {
                showTab(0);
            }
        });
    }

    /* load the publishers */
    loadRankingFromJSON('publisher/publisher_overall.js');
    loadRankingFromJSON('publisher/publisher_world.js');
    loadRankingFromJSON('publisher/publisher_job.js');
    loadRankingFromJSON('publisher/publisher_fame.js');

    /* bind hover to tabs */
    $('#m-ranks-tabs li').bind('mouseenter', function () {
        showTab($('#m-ranks-tabs li').index($(this)));
    });
}

function loadExpandableHeader() {
    var closedHeight = 178,
		openHeight = 341,
		newButton = $('#m-new-btn'),
		header = $('#m-header'),
		videoHolder = $('#m-intro'),
		openEls = $('#m-intro, #m-signup-download'),
		closedEls = $('#m-events');
    function loadVideo() {
        videoHolder.flash({
            swf: 'http://www.youtube.com/v/Mt67pbFdrBY?version=3',
            width: 498,
            height: 309,
            flashvars: {
                hd: 1,
                rel: 0,
                showsearch: 0,
                showinfo: 0,
                iv_load_policy: 3,
                cc_load_policy: 0,
                autoplay: 0,
                fs: 1
            },
            allowFullScreen: 'true',
            allowScriptAccess: 'always'
        });
        closedEls.hide();
    }
    function unloadVideo() {
        videoHolder.html('');
        openEls.hide();
    }
    newButton.click(function (e) {
        e.preventDefault();
        if (header.hasClass('open')) {
            /* close the header */
            header.removeClass('open').stop().animate({ height: closedHeight }, 200, 'linear', unloadVideo);
            openEls.stop().fadeTo(200, 0);
            closedEls.show().stop().fadeTo(200, 1);
        } else {
            /* open the header */
            header.addClass('open').stop().animate({ height: openHeight }, 200, 'linear', loadVideo);
            openEls.hide().stop().fadeTo(200, 1);
            closedEls.stop().fadeTo(200, 0);
        }
    });
    $('#m-signup').click(function () {
        _gaq = typeof _gaq != "undefined" ? _gaq : [];
        _gaq.push(["sdt._trackEvent", "MSWebLaunch", "StartGame_ExpandedHeader"]);
        NxLaunchGameMain();
    });
    if ($.cookie('hasVisitedMapleStoryHome') != 'yes') {
        newButton.click();
    };
    $.cookie('hasVisitedMapleStoryHome', 'yes', { expires: 365, path: '/', domain: 'maplestory.nexon.net' });
}

function loadFunstuff() {
    var tabs = $('#m-funstuff-tabs li'),
		contents = $('#m-funstuff-content li');
    /* function inside loadFunstuff for closure and minification */
    function showItem(i) {
        tabs.removeClass('active');
        tabs.eq(i).addClass('active');
        contents.css('display', 'none');
        contents.eq(i).css('display', 'block');
    }
    tabs.bind('mouseenter', function () {
        showItem(tabs.index($(this)));
    });
    showItem(0);
}

function loadEvents() {
    $.getJSON('publisher/publisher_banner.js', function (allBanners) {

        var d = new Array(); // hero banner
        var middleBanner = new Array();
        $.each(allBanners, function (i, banner) {
            if (banner.category == '1') d.push(banner);
            else if (banner.category == '4') middleBanner.push(banner);
        });

        /* hero banner */
        var slideUL = $('#m-events-slide'),
			indexDIV = $('#m-events-index'),
			slideLI,
			slideCount = Math.min(d.length, 6),
			slideHeight = 141,
			currentSlide = 0,
			timer;
        /* function inside loadEvents for closure and minification */
        function updateSlides() {
            slideUL.stop().animate({ top: -slideHeight * currentSlide }, 300);
            indexDIV.children('a').removeClass('active').eq(currentSlide).addClass('active');
        }
        function nextSlide() {
            currentSlide = (currentSlide + 1) % slideCount;
            updateSlides();
            window.clearTimeout(timer);
            timer = window.setTimeout(nextSlide, 5000);
        }
        function buttonClick(e) {
            e.preventDefault();
            currentSlide = $(this).attr('data-slide');
            updateSlides();
            window.clearTimeout(timer);
            timer = window.setTimeout(nextSlide, 10000);
        }
        for (var i = 0; i < slideCount; i++) {
            /* setup slides */
            slideLI = $('<li>').append(
				$('<a>').attr({ href: d[i].href }).append(
					$('<img>').attr({ src: d[i].imgSrc, alt: d[i].imgAlt })
				)
			).appendTo(slideUL);
            /* setup buttons */
            slideLI = $('<a>').attr({ href: '#', 'data-slide': i }).appendTo(indexDIV).click(buttonClick);
        }
        updateSlides();
        timer = window.setTimeout(nextSlide, 5000);

        /* middle banner */
        if (middleBanner.length > 0) {
            $('#m-notice').attr({ href: middleBanner[0].href });
            $('#m-notice').css("backgroundImage", "url(" + middleBanner[0].imgSrc + ")");
            $('#m-cash-shop-a').hide();
        } else {
            $('#m-notice').hide();
            $('#m-cash-shop-b').hide();
        }
    });
}

function loadItemGallery() {
    $.getScript('http://nxcache.nexon.net/maplestory/json/item-shop.js', function () {
        var i,
			len,
			el;
        /* make infinite carousel */
        el = $('.m-cash-shop ul');
        for (i = 0, len = shopInfiniteItems.length; i < len; i++) {
            el.append($('<li>')
				.append($('<img>').attr('src', shopInfiniteItems[i].thumb))
			);
        }
        $('.m-cash-shop').infiniteCarousel({
            width: 48,
            speed: 3000,
            itemEls: '.m-cash-shop li',
            leftBtn: '.m-cash-shop-left',
            rightBtn: '.m-cash-shop-right',
            minItemsToRun: 6
        });
        /* end infinite carousel */

        /* make thumbnail image */
        $('.m-cash-shop-top img').attr('src', shopNewThree[0].thumb);
    });
}

function loadPollTitle() {
    $.getJSON('publisher/publisher_poll_title.js', function (d) {
        $('#publisher_poll').text(d[0].content_title);
    });
}

function loadLightBox(title) {
    var PopupCookie = $.cookie(title + "Popup");
    if (PopupCookie == null || PopupCookie == 'false') {
        $().popupYoutube('popups.txt #ms-' + title + '-popup', title);
        if ($('#m-header').hasClass('open')) $('#m-new-btn').click();
    };

    $('.checkbox').live({
        click: function () {
            $(this).toggleClass('addcheckmark');
            if ($(this).attr("checked")) {
                $.cookie(title + "Popup", "false", { expires: 365, path: "/", domain: "maplestory.nexon.net" });
            } else {
                $.cookie(title + "Popup", "true", { expires: 365, path: "/", domain: "maplestory.nexon.net" });
            }
        }
    });
}

function rankingsModuleSubmit() {
    var input = $("#m-ranks-search-text").val().trim();
    if (input)
        document.location = "http://maplestory.nexon.net/Rankings/OverallRanking.aspx?type=overall&s=l&pageIndex=1&search=true&searchtype=name&key=" + input;
}

function IE8SafePreventEvent(e) {
    if (!e) e = window.event;
    if (e.preventDefault) e.preventDefault();
    else if (e.returnValue) e.returnValue = false;
}

function CheckEnterKeyPressed(e) {
    var key;
    if (window.event) key = window.event.keyCode;     //IE
    else key = e.which;                               //firefox
    if (key == 13) return true;
    else return false;
}

function rankingsModuleOnKeyPress(e) {
    if (CheckEnterKeyPressed(e)) {
        IE8SafePreventEvent(e);
        rankingsModuleSubmit();
    }
}

//$(function(){
loadExpandableHeader();
loadNews();
loadRanking();
loadFunstuff();
loadEvents();
loadItemGallery();
loadPollTitle();
//});

//loadLightBox('ascension');

