﻿/*! Copyright © 2010 General Mills. All Rights Reserved. No permission is granted to use, copy or extend this code. */
QRV.namespace('QRV.Desktop');
QRV.Desktop =
{
    init: function (handler, name, defaultTabIdx) {
        QRV.Desktop.defaultTabIdx = (defaultTabIdx == undefined) ? 0 : defaultTabIdx;
        QRV.Desktop.handler = handler;

        $(document).ready(function () {
            QRV.Desktop.wrapper = $('#desktopWrapper');
            QRV.Desktop.viewAllWrapper = $('#viewAll');
            QRV.Desktop.viewAllLink = $('#viewAllLink');
            QRV.Desktop.tabPanel = $('#desktopTabs');
            QRV.Desktop.flashWrapper = $('#desktopFlashWrapper');
            QRV.Desktop.splashImage = $('#desktopSplashImage');
            QRV.Desktop.thumbPanel = $('#desktopThumbnailWrapper');
            QRV.Desktop.title = $('#desktopTitle');
            QRV.Desktop.description = $('#desktopDescription');
            QRV.Desktop.viewCurrentItem = $('#viewCurrentItem');

            var parms =
            {
                name: name,
                //timestamp: JSON.stringify(new Date())
                v: 1
            };

            // $.get(QRV.Desktop.handler, parms, QRV.Desktop.getJsonData_callback, 'json');
            $.ajax({
                url: QRV.Desktop.handler,
                data: parms,
                cache: true,
                success: QRV.Desktop.getJsonData_callback,
                type: "GET",
                datatype: "json"
            });
        });
    },

    getJsonData_callback: function (data) {
        if (data != null) {
            QRV.Desktop.Tabs = new Array();         //array of javascript Objects, one for each tab
            QRV.Desktop.CurrentTab = null;          //the currently selected tab
            QRV.Desktop.CurrentTabItem = null;      //the currently selected tab-item

            //set desktop panel's background image
            QRV.Desktop.wrapper.css('background-image', 'url(' + data.BackgroundUrl + ')');

            //hide the tab panel if only one tab exists for the current desktop
            QRV.Desktop.hasTabs = (data.Tabs.length > 1);
            if (QRV.Desktop.hasTabs) {
                QRV.Desktop.viewCurrentItem.show();
                QRV.Desktop.tabPanel.show()
            }
            else {
                QRV.Desktop.viewCurrentItem.hide();
                QRV.Desktop.tabPanel.hide()
            }

            //populate desktop with tab data
            $(data.Tabs).each(function (index) {
                var title = this.Title; //this == DesktopTab object

                //create the HTML elements that will become a new tab item
                var li = $(document.createElement('li'));
                var tabWrapper = $(document.createElement('div'));
                var leftEdge = $(document.createElement('div'));
                var middle = $(document.createElement('div'));
                var rightEdge = $(document.createElement('div'));
                var a = $(document.createElement('a'));

                //set css for each element
                tabWrapper.addClass('tab-wrapper');
                leftEdge.addClass('tab-left-edge');
                middle.addClass('tab-middle');
                rightEdge.addClass('tab-right-edge');

                //initialize the tab items's text value and click event handler
                a.attr('title', title);
                a.html(title);
                a.click(QRV.Desktop.selectTab);
                li.Link = a;

                //assemble the tab item
                middle.append(a);
                tabWrapper.append(leftEdge);
                tabWrapper.append(middle);
                tabWrapper.append(rightEdge);
                li.append(tabWrapper);

                var tab = this.SelectedTab;
                if (tab) {
                    QRV.Desktop.defaultTabIdx = index;
                }
                //add the tab HTML element to the the tab panel
                QRV.Desktop.tabPanel.append(li);

                //save all related tab info as javascript objects
                var tabObj = { Key: title, TabElement: li, TabData: this, TabItems: new Array() };
                QRV.Desktop.Tabs.push(tabObj);

                //create associated tab-items
                $(this.TabItems).each(function () {
                    var li = $(document.createElement('li'));
                    li.img = $(document.createElement('img'));

                    //set img id, src, alt, title and click-event
                    li.img.click(QRV.Desktop.selectTabItem);
                    li.img.attr('id', title + '_thumb' + this.ID);
                    li.img.attr('src', this.ThumbUrl);
                    li.img.attr('alt', this.Title);
                    li.img.attr('title', this.Title);
                    li.img[0].ItemData = this;
                    li.append(li.img);

                    if (!QRV.Desktop.hasTabs) {
                        //if no tabs, then show tab-item text and button in tab-item panel
                        var div = $(document.createElement('div'));
                        var h3 = $(document.createElement('h3'));
                        var link = $(document.createElement('a'));
                        div.addClass('item-text');
                        h3.html(this.Title);

                        var h3Value = '<h3>' + h3.html().replace(/&nbsp;/g, ' ') + '</h3>';
                        link.html('Ver ' + this.ItemType);
                        link.attr('href', this.LinkUrl);
                        div.append(h3Value);
                        div.append(link);
                        li.append(div);
                    }

                    li.hide();
                    tabObj.TabItems.push({ TabItemElement: li, TabItemData: this });

                    QRV.Desktop.thumbPanel.append(li);
                });
            });

            if (QRV.Desktop.hasTabs && QRV.Desktop.Tabs[QRV.Desktop.defaultTabIdx] != null) {
                $('#desktopTabs li').hover(function () {
                    $(this).addClass('hover');
                },
                function () {
                    $(this).removeClass('hover');
                });

                QRV.Desktop.Tabs[QRV.Desktop.defaultTabIdx].TabElement.Link.click();
            }
            else {
                QRV.Desktop.Tabs[0].TabElement.Link.click();
            }

            QRV.Desktop.wrapper.show();
        }
    },

    selectTab: function () {
        var link = $(this);  //this == a tag
        var title = link.attr('title');

        var tabObj = $.grep(QRV.Desktop.Tabs, function (obj) { return obj.Key == title; })[0];
        if (tabObj != null) {
            var tabData = tabObj.TabData;
            if (QRV.Desktop.CurrentTab != null && QRV.Desktop.CurrentTab.TabData == tabData && tabData.LinkUrl != '') {
                location.href = tabData.LinkUrl
            }
            else if (tabData != null) {
                //hide all tab items and change which tab is shown as "selected"
                QRV.Desktop.thumbPanel.children().hide();
                $.each(QRV.Desktop.Tabs, function () {
                    this.TabElement.removeClass('selected');
                });
                tabObj.TabElement.addClass('selected');

                //if tab has a URL & Link Description associated with it, then display link
                if (tabData.LinkUrl != '' && tabData.LinkDescription != '') {
                    QRV.Desktop.viewAllLink.attr('href', tabData.LinkUrl);
                    QRV.Desktop.viewAllLink.html(tabData.LinkDescription);
                    QRV.Desktop.viewAllWrapper.show();
                }
                else {
                    QRV.Desktop.viewAllWrapper.hide();
                }

                var items = tabObj.TabItems;
                if (items != null && items.length > 0) {
                    $.each(items, function () {
                        this.TabItemElement.show();
                    });
                }

                var currentItem = $.grep(items, function (obj) { return obj.TabItemElement.img.hasClass('selected'); })[0];
                if (currentItem == null) {
                    currentItem = items[0];
                }

                //save reference to currentTably selected tab object
                QRV.Desktop.CurrentTab = tabObj;
                currentItem.TabItemElement.img.click();
            }
        }
    },

    selectTabItem: function (e) {
        e.stopImmediatePropagation();

        if (QRV.Desktop.CurrentItemData == this.ItemData) {
            location.href = this.ItemData.LinkUrl;
        }
        else {
            //if module has tabs, then the "View Current Item" button is visible, so update the target URL to match the selected tab-item
            if (QRV.Desktop.hasTabs) {
                QRV.Desktop.viewCurrentItem.attr('href', this.ItemData.LinkUrl);
            }

            //make the current tab-item selected
            $.each(QRV.Desktop.CurrentTab.TabItems, function (obj) {
                this.TabItemElement.find('img').removeClass('selected');
            });
            $(this).addClass('selected');

            //save a reference to the current tab-item's underlying data object
            QRV.Desktop.CurrentItemData = this.ItemData;

            //if the tab-item has an embed code, then initialize and display the flash-player
            if (this.ItemData.EmbedCode.length > 0 && swfobject != undefined) {
                QRV.Desktop.initFlashModule();
            }
            else {
                //otherwise, just display its static splash image
                QRV.Desktop.setSplashImage();
            }
        }
    },

    initFlashModule: function () {
        var data = QRV.Desktop.CurrentItemData;

        //check if flashplayer already initialed
        if (!QRV.Desktop.CurrentItemData.flashPlayerInitialized) {
            var version = swfobject.getFlashPlayerVersion();
            if (version != null && version.major > 0) {
                var externalSWF = 'http://player.ooyala.com/player.swf';
                var expressInstall = '/assets/flash/expressInstall.swf';
                var container = 'desktopFlashContent';
                var width = '534';
                var height = '300';
                var version = '9';
                var embedCode = data.EmbedCode;
                var flashVars = { width: 534, height: 300, embedCode: embedCode, hide: 'fullscreen,channels,sharing,embed,endscreen' };
                var params = { quality: 'High', wmode: "transparent", allowfullscreen: "false", allowScriptAccess: "always" };
                var attributes = { border: 0 };
                swfobject.embedSWF
                (
                    externalSWF,
                    container,
                    width,
                    height,
                    version,
                    expressInstall,
                    flashVars,
                    params,
                    attributes,
                    QRV.Desktop.flashInit_callback
                );
            }
            else {
                QRV.Desktop.setSplashImage();
                return;
            }
        }
        else {
            QRV.Desktop.showFlash();
            QRV.Desktop.setContent();
        }
    },

    flashInit_callback: function (e) {
        if (e.success) {
            QRV.Desktop.CurrentItemData.flashPlayerInitialized = true;
            QRV.Desktop.showFlash();
            QRV.Desktop.setContent();
        }
        else {
            QRV.Desktop.setSplashImage();
        }
    },

    setSplashImage: function () {
        var data = QRV.Desktop.CurrentItemData;
        QRV.Desktop.showSplashImage();
        QRV.Desktop.splashImage.attr('alt', data.Title);
        QRV.Desktop.splashImage.attr('src', data.SplashUrl);
        QRV.Desktop.splashImage.pngFix();
        QRV.Desktop.setContent(data);
    },

    setContent: function () {
        var data = QRV.Desktop.CurrentItemData;
        QRV.Desktop.title.html(data.Title);
        QRV.Desktop.description.html(data.Description);
    },

    showFlash: function () {
        var data = QRV.Desktop.CurrentItemData;
        QRV.Desktop.flashWrapper.css('background-image', 'url(' + data.SplashUrl + ')');
        QRV.Desktop.flashWrapper.show();
        QRV.Desktop.splashImage.hide();
    },

    showSplashImage: function () {
        QRV.Desktop.flashWrapper.hide();
        QRV.Desktop.splashImage.show();
    }
};

