var tabIsActivated = false;
var itemLoader = [];
var NOT_LOADED = 0, LOADED_WITH_DATA = 1, LOADED_EMPTY = 2, LOAD_ERROR = 3, NOT_DISPLAYED=4;
var TAB_SUBLEVELS = 0, TAB_MAP = 1, TAB_PUBLICATIONS = 2;
var loadedItem = [NOT_LOADED, NOT_LOADED, NOT_LOADED];


function publicationsLoader(url) {
    var loaded = false;
    this.getLoaded = function () {
        return loaded;
    }

    this.load = function (descriptor) {
        if (!loaded) {
            var buttonNode = AUI().one(descriptor.button_id);
            var contentNode = AUI().one(descriptor.container_id);
            var parentNode = buttonNode.get('parentNode');
            contentNode.setHTML('');
            parentNode.addClass('loading');
            AUI().use('aui-io-request', function (A) {
                A.io.request(url, {
                    autoLoad: true,
                    cache: false,
                    dataType: 'json',
                    method: 'GET',
                    data: {},
                    on: {
                        success: function () {
                            parentNode.removeClass('loading');
                            var returnData = this.get('responseData');
                            if (returnData != null && typeof returnData == "object" && returnData['publications']) {
                                var publications = returnData['publications'];
                                if (publications != null && typeof publications == "object" && publications.length > 0) {
                                    buttonNode.get('parentNode').removeClass('disabled');
                                    var html = "";

                                    html += '<div class="topPublicationTabTitle">' + descriptor.localization.latest_publications + '</div>';
                                    var publicationDateLabel = 'Published\x3a';
                                    for (var iPublications = 0; iPublications < publications.length; iPublications++) {
                                        var element = publications[iPublications];
                                        if (element.subTitle) {
                                            html += '<div class="publicationTabContent"><a href="' + element.url + '">' + element.title + ' - ' + element.subTitle + '</a><br/>' + publicationDateLabel + '&nbsp;' + element.date + '</div>';
                                        }
                                        else{
                                            html += '<div class="publicationTabContent"><a href="' + element.url + '">' + element.title + '</a><br/>' + publicationDateLabel + '&nbsp;' + element.date + '</div>';
                                        }

                                    }

                                    //setting the view all link
                                    var viewAllLink = returnData['view_all_link'];
                                    html += '<div class="viewAllPublications"><a href="' + viewAllLink + '">' + descriptor.localization.view_all + '</a></div>';

                                    contentNode.setHTML(html);
                                    loadedItem[TAB_PUBLICATIONS] = LOADED_WITH_DATA;
                                }
                                else {
                                    loadedItem[TAB_PUBLICATIONS] = LOADED_EMPTY;
                                }
                            }
                            else {
                                loadedItem[TAB_PUBLICATIONS] = LOADED_EMPTY;
                                parentNode.setAttribute('title', descriptor.disabled_message);
                            }

                            switchTabs();
                            return true;
                        },
                        failure: function () {
                            loadedItem[TAB_PUBLICATIONS] = LOAD_ERROR;
                            switchTabs();
                            return true;
                        }
                    }
                });
            })
        }
    }
}

/**
 * Load the map
 * @param url
 */

function mapLoader(url) {
    var loaded = false;
    this.getLoaded = function () {
        return loaded;
    }

    this.load = function (descriptor) {
        if (!loaded) {
            var buttonNode = AUI().one(descriptor.button_id),
                    contentNode = AUI().one(descriptor.container_id);

            loaded = true;

            // activateTabs();
            loadedItem[TAB_MAP] = LOADED_EMPTY;
            if (contentNode) {
                var oneNode = contentNode.one('.wiw-entity-detail-map-list-icon-marker');
                if (oneNode) {
                    if (buttonNode) {
                        buttonNode.get('parentNode').removeClass('disabled');
                    }
                    loadedItem[TAB_MAP] = LOADED_WITH_DATA;
                }
            }
            switchTabs();
            return true;
        }
    }
}


/**
 * Load the sub-levels
 * @param url
 */

function subLevelsLoader(url) {
    var loaded = false;
    this.getLoaded = function () {
        return loaded;
    }

    this.load = function (descriptor) {
        if (!loaded) {
            var buttonNode = AUI().one(descriptor.button_id),
                    contentNode = AUI().one(descriptor.container_id);

            contentNode.setHTML("");
            buttonNode.get('parentNode').addClass('loading');
            AUI().use('aui-io-request', function (A) {
                A.io.request(url, {
                    dataType: 'json',
                    autoLoad: true,
                    cache: false,
                    method: 'POST',
                    data: {},
                    on: {
                        success: function () {
                            buttonNode.get('parentNode').removeClass('loading');
                            var organizationSublevels = this.get('responseData'),
                                    selector = new SublevelsTreeSelector(),
                                    nodeContent = A.Node.create("<div> </div>"),
                                    targetNode = A.one(descriptor.container_id);

                            config = {};
                            selector.init(descriptor.container_id, organizationSublevels, config);
                            selector.buildTree();
                            loaded = true;

                            // if(organizationSublevels.length != 0) {
                            //     tabIsActivated = activateTab(buttonNode.get('parentNode'), contentNode);
                            // }


                            targetNode.appendChild(nodeContent);
                            if (organizationSublevels && organizationSublevels.length > 0) {
                                var parentNode = buttonNode.get('parentNode');
                                if (parentNode) {
                                    parentNode.removeClass('disabled');
                                }
                                loadedItem[TAB_SUBLEVELS] = LOADED_WITH_DATA;
                            }
                            else {
                                loadedItem[TAB_SUBLEVELS] = LOADED_EMPTY;
                            }
                            switchTabs();
                        },
                        failure: function () {
                            loadedItem[TAB_SUBLEVELS] = LOAD_ERROR;
                            switchTabs();
                        }
                    }
                });
            });
        }
    }
}

/**
 * tabsList contains a combination of tab label id, tab container id, load url and disabled message like
 *
 * @param tabsList
 */
function tabbedAsyncContainer(tabsList, organizationConfiguration) {
    var A = AUI();
    var namespace = A.one('#wiwSearchPortalNamespace').val();
    if (organizationConfiguration.displaySublevels === false) {
        loadedItem[TAB_SUBLEVELS]=NOT_DISPLAYED;
    }
    if (organizationConfiguration.displayMap === false) {
        loadedItem[TAB_MAP]=NOT_DISPLAYED;
    }
    if (organizationConfiguration.displayPublications === false) {
        loadedItem[TAB_PUBLICATIONS]=NOT_DISPLAYED;
    }
    this.wire = function () {
        var tabs = A.all('#' + namespace + 'tabs .tab-pane'),
                tabHandlers = AUI().all('#' + namespace + 'tabsButtons>.nav-tabs>li>a');

        tabsList.forEach(function (item) {
            var button = AUI().one(item.button_id),
                    loaderFunction = item.loader;

            button.on('click', function (e) {
                e.preventDefault();
                var currentTarget = A.one(e.currentTarget),
                        parent = currentTarget.get('parentNode'),
                        targetId = currentTarget.getAttribute("href"),
                        tab = A.one(targetId);

                if (parent.hasClass('disabled') || parent.hasClass('active')) {
                    return;
                }

                if (!tab) {
                    return;
                }

                tabHandlers.get('parentNode').removeClass('active');
                parent.addClass('active');
                tabs.removeClass('active');
                tab.addClass('active');
            });

            //trigering the async load
            itemLoader.push(item);
        });
        loadItems();
    }
}

function loadItems() {
    itemLoader.forEach(function (item) {
        item.loader.load(item);
    })

}

/**
 * Navigates the tabs and activates the populated one
 */
function activateOrgTab(tabIndex) {

    //org-tab-contentN org-tab-buttonN
    var tabButton = AUI().one('.org-tab-button' + (tabIndex + 1));
    if (tabButton) {
        tabButton.removeClass('disabled');
        tabButton.addClass('active');
    }
    var tabContent = AUI().one('.org-tab-content' + (tabIndex + 1));
    if (tabContent) {
        tabContent.removeClass('disabled');
        tabContent.addClass('active');
    }

    for (var otherTab = 0; otherTab < loadedItem.length; otherTab++) {
        if (otherTab != tabIndex) {
            try {
                var tabContent = AUI().one('.org-tab-content' + (otherTab + 1));
                if (tabContent) {
                    tabContent.removeClass('active');
                }
            } catch (err) {
                console.log(err);
            }
            try {
                var tabButton = AUI().one('.org-tab-button' + (otherTab + 1));
                if (tabButton) {
                    tabButton.removeClass('active');
                }
            } catch (err) {
                console.log(err);
            }
        }
    }

}

function switchTabs() {

    for (var tabIndx = 0; tabIndx < loadedItem.length; tabIndx++) {
        if (loadedItem[tabIndx] == NOT_LOADED) {
            return;
        }
        if (loadedItem[tabIndx] == LOADED_WITH_DATA) {
            //activate tab
            activateOrgTab(tabIndx);
            return;
        }
        //only options left are loadedItem[tabIndx]==LOADED_EMPTY ||loadedItem[tabIndx]==LOAD_ERROR
    }
}


function refreshMap(siteSrcForIframe, code) {
    var timeStamp = Math.floor(Date.now() / 1000),
            src = siteSrcForIframe + code + '&timestamp=' + timeStamp,
            form = document.getElementById("map-iframe");

    form.setAttribute('src', src);
    form.contentWindow.document.location.href = form.src;
    //form.contentDocument.location.reload(true);
}
var SublevelsTreeSelector = function () {
    var loadingImageSrc = 'data:image/gif;base64,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';
    this.containerNode = null;
    this.options = {};
    var tree = null;
    var onloadHandler = function() {}
    this.init = function (containerNode, treeData, config) {
        tree = null;
        var _this = this;

        this.containerNode = containerNode;
        this.treeData = treeData;

        var options = {
            labels: {},
            offsetX: 0,
            offsetY: 0
        };

        if (typeof config !== 'undefined') {
            if (typeof config.language !== 'undefined') {
                options.language = config.language;
            }
            if (typeof config.labels !== 'undefined') {
                options.labels = config.labels;
            }
            if (typeof config.offsetX !== 'undefined') {
                options.offsetX = config.offsetX;
            }
            if (typeof config.offsetY !== 'undefined') {
                options.offsetY = config.offsetY;
            }

            if(typeof config.fragmentUrl !== 'undefined') {
                options.fragmentUrl = config.fragmentUrl;
            }

            if(typeof config.onload != 'undefined') {
                onloadHandler = config.onload;
            }

            if(typeof config.disableCollapseExpand != 'undefined') {
                options.disableCollapseExpand = config.disableCollapseExpand;
            }


        }

        this.options = options;
        //this.createTreeSelectorBox();
        /*
                    var showAnim = new Y.Anim({
                        node: _this.treeSelectorBox,
                        to: {
                            opacity: 1
                        },
                        duration: 0.2
                    });
                    */
        /*
                    this.parentInputNodeEvent = inputNode.on("click", function () {
                        _this.initDisplayBox();
                        showAnim.run();
                    });
        */
    }

    this.buildTree = function () {
        var _this = this;
        AUI().use(
            'aui-tree-view',
            function (A) {
                A.TreeNode.ATTRS.cssClasses.value.normal.iconHitAreaCollapsed = 'op-icon op-icon-more op-icon-plus tree-hitarea';
                A.TreeNode.ATTRS.cssClasses.value.normal.iconHitAreaExpanded = 'op-icon op-icon-less tree-hitarea';
                _this.tree = new A.TreeView(
                    {
                        type: 'normal',
                        boundingBox: _this.containerNode,
                        children: _this.treeData,
                        after: {
                            'render': function(e) {
                                onloadHandler();
                            },
                            '*:expandedChange': function (e) {
                                onloadHandler();
                            }
                        }
                    });

                if(_this.options.disableCollapseExpand) {
                    _this.tree._onClickNodeEl=function(event){}
                }

                _this.tree.render();

        });
    }
}

