gfi.register('ui', {
    init : function() {
        /*Main ui components*/

        this.setupPrimaryNavigation();
        this.setupBannerSlider();
        this.setupContentSliders();
        this.setupInlineSliders();
        this.changeLocale();
        this.setupAjaxTabs();
        this.setupLightBox();
        if (Browser.ie6){
            this.setupFullWidthNavigationIe6Fix();
        }
        this.setupGoogleMaps();

        /*Basic ui components*/

        this.setupShowHide();

        /*Complicated ui components*/
        if (Browser.ie6){
            this.setupFullWidthNavigationDropdowns();
        }
    },

    setupPrimaryNavigation : function(){
        $$('.dropDownNavigation li').each(function(item) {
            var childContainer = item.getElement('div');
            if (childContainer) {
                childContainer.setStyles({
                    'display' : 'block',
                    'visibility' : 'hidden',
                    'opacity' : '0'
                });
                childContainer.set('tween', {duration: '200', link: 'cancel'});
                var productNav = document.id('productNavigation');
                item.addEvents({
                    'mouseenter': function() {
                        if (Browser.ie6 || Browser.ie7 || Browser.ie8){
                            childContainer.setStyles({
                                'visibility': 'visible',
                                'opacity' : '1'
                            });
                            item.addClass('current');
                            if(productNav && (Browser.ie7 || Browser.ie6)){
                                productNav.setStyle('z-index','-1');
                            }
                        }else{
                            childContainer.fade('in');
                        }
                    },

                    'mouseleave' : function() {
                        if (Browser.ie6 || Browser.ie7 || Browser.ie8){
                            childContainer.setStyles({
                                'visibility': 'hidden',
                                'opacity' : '0'
                            });
                            item.removeClass('current');
                            if(productNav && (Browser.ie7 || Browser.ie6)){
                                productNav.setStyle('z-index','0');
                            }
                        }else{
                            childContainer.fade('out');
                        }
                    }
                });
            }
        });
    },

    setupBannerSlider : function(){
        var banner = document.id('banner');
        if (banner){
            banner.setStyles({
                height: 'auto'
            });
            if (banner.getElement('ul')) {
                new gfi.Slider(banner, banner.getElement('ul'), banner.getElement('ul').getChildren('li'),banner.getElement('.slider').getWidth());
            }
        }
    },

    setupContentSliders : function(){
        var contentSliders = $$('.contentSlider');
        if (contentSliders.length > 0){
            contentSliders.each(function(el){
                var sliderItems = el.getElements('.sliderItem');
                if (el.getElement('ul')) {
                    new gfi.Slider(el, el.getElement('ul'), el.getElement('ul').getChildren('li'),el.getElement('.slider').getWidth());
                }
                sliderItems.each(function(el){
                    var tipContent = el.getChildren('.tipFull');
                    var content = el.getChildren('.tipInitial');
                    if (tipContent.length > 0){
                        el.addEvents({
                            'mouseenter': function() {
                                /*On hover, set a calculated negative margin on the container so the content hovers over breadcrumb and footer*/
                                var containerSize = el.getSize().y;
                                tipContent.toggleClass('none');
                                content.set('class', 'none');
                                var newContainerSize = el.getSize().y;
                                if (newContainerSize > containerSize){
                                    var marginBottom = 35;
                                    containerSize = containerSize + marginBottom;
                                    var calculatedContainerSize = containerSize - newContainerSize;
                                    if (Browser.ie7 || Browser.ie6){
                                        /*For ie6 and ie7 setr a negative margin on the content container so content hovers over footer*/
                                        contentSliders.setStyle('margin-bottom', calculatedContainerSize);
                                        contentSliders.getParent().setStyle('margin-bottom', "-58");
                                    } else {
                                        contentSliders.setStyle('margin-bottom', calculatedContainerSize);
                                    }
                                }
                            },
                            'mouseleave' : function() {
                                tipContent.toggleClass('none');
                                content.set('class','tipInitial content clearfix');
                                contentSliders.setStyle('margin-bottom', '35px');
                                if (Browser.ie7 || Browser.ie6){
                                    contentSliders.getParent().setStyle('margin-bottom', "0");
                                }
                            }
                        });
                    }
                });
            });
        }
    },

    setupInlineSliders : function(el){
        if(!el){
            el = document.id(document.body);
        }
        var contentSliders = $$('.contentAreaSlider');
        if (contentSliders.length > 0){
            contentSliders.each(function(el){
                if (el.getElement('ul')) {
                    new gfi.Slider(el, el.getElement('ul'), el.getElement('ul').getChildren('li'),el.getElement('.slider').getWidth());
                }
            });
        }
    },

    setupTooltips : function(el, tipContainerClass, offsetX, offsetY){
        if(!el){
            el = document.id(document.body);
        }
        var tipContentAreas = $$('.tipContent');
        if (tipContentAreas.length >0){
            $$('.tipTrigger').each(function(element, index) {
                var content = tipContentAreas[index].innerHTML;
                element.store('tip:text', content);

            });
            var toolTip = new Tips($$('.tipTrigger'), {
                showDelay: 200,
                hideDelay: 200,
                fixed: true,
                offset: {x: offsetX, y: offsetY},
                windowPadding: {x: -170 , y:0},
                className: tipContainerClass
            });
        }
    },

    changeLocale : function () {
        var switcher = document.id('switcher');
        if (switcher) {
            switcher.addEvent('change', function() {
                var value = document.getElementById('switcher').value;
                if (value != "select") {
                    window.location = value;
                }
            });
        }
    },

    setupAjaxTabs : function(){
        /*Soultions Tabs*/

        var solutionsTabs = $$(".solutionsTabs");
        if (solutionsTabs.length > 0){
            var urls = [
                new gfi.tabs.ajax.TabItem('businessSolutions.html', function(){}),
                new gfi.tabs.ajax.TabItem('businessSolutions.html', function(){}),
                new gfi.tabs.ajax.TabItem('businessSolutions.html', function(){}),
                new gfi.tabs.ajax.TabItem('businessSolutions.html', function(){})
            ];
            var solutionsTabs = new gfi.tabs.ajax('.solutionsTabs .tabControls li', '.solutionsTabs .tabContainer .tab', urls,{'fixedHeight':false});
        }

        /*Social Media Tabs*/

        var socialMediaTabsSets = $$(".socialMedia");
        if (socialMediaTabsSets.length > 0){
            var urls = [
                new gfi.tabs.ajax.TabItem('socialMedia1.html', function(){}),
                new gfi.tabs.ajax.TabItem('socialMedia2.html', function(){}),
                new gfi.tabs.ajax.TabItem('socialMedia3.html', function(){}),
                new gfi.tabs.ajax.TabItem('socialMedia4.html', function(){})
            ];
            var socialMediaTabs = new gfi.tabs.ajax('.socialMedia .tabControls li','.socialMedia .tabContainer .tab',urls,{'fixedHeight':false});
        }

        /*Product Tabs*/

        var productTabs = $$(".productTabs");

        if (productTabs.length > 0){
            var urls = [
                new gfi.tabs.ajax.TabItem('overview.html', function(){
                    gfi.ui.setupShowHide(productTabs.tabAreas[productTabs.currentRequestTabIndex]);
                }),
                new gfi.tabs.ajax.TabItem('news.html', function(){}),
                new gfi.tabs.ajax.TabItem('features.html', function(){
                    gfi.ui.setupShowHide(productTabs.tabAreas[productTabs.currentRequestTabIndex]);
                }),
                new gfi.tabs.ajax.TabItem('screenshots.html', function(){
                    gfi.ui.setupLightBox($('content'));
                }),
                new gfi.tabs.ajax.TabItem('landing.html', function(){}),
                new gfi.tabs.ajax.TabItem('productSupport.html', function(){}),
                new gfi.tabs.ajax.TabItem('awardsAndReviews.html', function(){
                    gfi.ui.setupInlineSliders(productTabs.tabAreas[productTabs.currentRequestTabIndex]);
                    gfi.ui.setupTooltips(productTabs.tabAreas[productTabs.currentRequestTabIndex], 'awardSlider', 85, -60);
                }),
                new gfi.tabs.ajax.TabItem('pricing.html', function(){})
            ];
            productTabs = new gfi.tabs.ajax('.productTabs .fullWidthNavigation .primary li', '.productTabs .tabContainer .tab',urls,{'fixedHeight':false});
        }

        /*Solutions Page Tab*/

        var solutionsPageTabs = $$(".solutionsPageTabs");

        if (solutionsPageTabs.length > 0){
          var urls = [
              new gfi.tabs.ajax.TabItem('articleWithTabs.html', function(){}),
              new gfi.tabs.ajax.TabItem('articleWithTabs.html', function(){
                  gfi.ui.setupShowHide(solutionsPageTabs.tabAreas[solutionsPageTabs.currentRequestTabIndex]);
              }),
              new gfi.tabs.ajax.TabItem('articleWithTabs.html', function(){}),
              new gfi.tabs.ajax.TabItem('articleWithTabs.html', function(){}),
              new gfi.tabs.ajax.TabItem('articleWithTabs.html', function(){})
            ];
            solutionsPageTabs = new gfi.tabs.ajax('.solutionsPageTabs .fullWidthNavigation .primary li', '.solutionsPageTabs .tabContainer .tab',urls,{'fixedHeight':false});
        }

        /*Company Page Tabs*/

        var companyPageTabs = $$('.companyTabs');

        if (companyPageTabs.length > 0){
          var urls = [
              new gfi.tabs.ajax.TabItem('careers.html', function(){
                  gfi.ui.setupShowHide(solutionsPageTabs.tabAreas[solutionsPageTabs.currentRequestTabIndex]);
              }),
              new gfi.tabs.ajax.TabItem('support.html', function(){}),
              new gfi.tabs.ajax.TabItem('contact.html', function(){
                  gfi.ui.setupGoogleMaps(solutionsPageTabs.tabAreas[solutionsPageTabs.currentRequestTabIndex], 51.43544, -0.50419, 'images/content/googleMapIcon.png');
              })
            ];
            solutionsPageTabs = new gfi.tabs.ajax('.companyTabs .fullWidthNavigation .primary li', '.companyTabs .tabContainer .tab',urls,{'fixedHeight':false});
        }
    },

    setupShowHide : function(el){
        if(!el){
            el = document.id(document.body);
        }
        var showHideMenus = el.getElements(".showHide");

        if(showHideMenus.length > 0){
            showHideMenus.each(function(el){
                var menu = el.getElement(".toggleArea");
                var link = el.getElement(".toggle");
                if (link){
                    link.removeProperty('href');
                    link.addEvent('click', function(e){
                       e.stop();
                       link.toggleClass('active');
                       menu.toggleClass('none');
                    });
                }

            });
        }
    },

    setupFullWidthNavigationIe6Fix : function(){
        var fullWidthNavigationTabs = document.id('productNavigation');
        if (fullWidthNavigationTabs!=null && fullWidthNavigationTabs){
            var secondaryNav = fullWidthNavigationTabs.getChildren('div.secondary');
            if (secondaryNav.length > 0){
                var secondaryNavList = secondaryNav.getChildren('ul.secondary');
                secondaryNav.addEvents({
                    'mouseenter': function() {
                        secondaryNavList[0].set('style', 'display: inline-block');
                    },
                    'mouseleave' : function() {
                        secondaryNavList[0].set('style', 'display: none');
                    }
                });
            }
        }
    },

    setupGoogleMaps : function(el, lat, lng, iconURL){
        if(!el){
            el = document.id(document.body);
        }
        var mapAreas = el.getElements(".mapContainer");
        if(mapAreas.length > 0){
            mapAreas.each(function(el){
                if (lat && lng && iconURL){
                    var gmap = new GMap({
                        lat : lat,
                        lng: lng,
                        zoom: 14,
                        container: el,
                        type: 'ROADMAP',
                        navigationControl: 'SMALL',
                        mapTypeControl: false,
                        simpleIcon: iconURL
                    });
                }
            });
        }
    },

    // el (optional) - the parent element that contains the lightbox links
    setupLightBox: function(el) {
        if (!el) {
            el = document.body;
        }

        var lightboxElements = document.id(el).getElements('.lightboxItem');
        if (lightboxElements.length > 0) {
            var box = new CeraBox();
            box.addItems('.lightboxItem', {
                group: true
            });
        }
    },

    setupFullWidthNavigationDropdowns: function(el){
        if (!el) {
            el = document.body;
        }
        var fullWidthNavDropdowns = document.id(el).getElements('.productNavItem.hasDropdown');
        if(fullWidthNavDropdowns.length > 0){
            fullWidthNavDropdowns.each(function(el){
                var thisDropdown = el.getChildren('.productNavDropDown');
                el.addEvents({
                    'mouseenter': function() {
                        el.addClass('on');
                    },
                    'mouseleave' : function() {
                        el.removeClass('on');
                    }
                });
            });
        }
    }
});
