//Enclosing and passing (jQuery) to avoid conflicts
;(function($) {

    AS3.Events = {

        init: function() {
            AS3.Events.onReady();
        },
        onReady: function() {
            
            /*GLOBALS*/
            var IE = (navigator.appVersion.indexOf("MSIE") === -1) ? false : true;
            var IE6 = (navigator.appVersion.indexOf("MSIE 6.") === -1) ? false : true;
            var IE7 = (navigator.appVersion.indexOf("MSIE 7.") === -1) ? false : true;
            
            /*HANDLERS*/

            //Add cufon class on elements in article content
            AS3.DynamicStyle.addCufonClass();
            
            //Language dropdown
            AS3.DynamicStyle.adjustLanguageBar();

            //top element image
            AS3.DynamicStyle.topElementImage();
            if(IE) {AS3.DynamicStyle.firstRowClass()};


            //IE7
            //display:table for logo container
            if(IE7) { AS3.DynamicStyle.logoContainer(); }
            //small arrow placed to the end of text with 2 and more lines
            if(IE7) { AS3.DynamicStyle.arrowLink(); }

            //Tabbar:
            AS3.TabBar.adjustHeights();
            if(IE7) { AS3.TabBar.adjustWidths(); }
            AS3.TabBar.activateTabs();
            if(IE) { AS3.TabBar.fixTabsInIE() };

            //Activate search button on keyboard click:
            AS3.Search.init();
            AS3.Search.searchRequest();
            $(document).keydown(function(e){ AS3.Search.goSearch(e); });

            //Bind tracking event handlers:
            AS3.Track.exitLinks();
            AS3.Track.downloads();
            AS3.Track.mailTo();
            AS3.Track.youtubeVideos(false); //Set to true to log events to console
        }
    };


    

    /*Tab bar*/
    AS3.TabBar = {
        adjustHeights: function() {
            var $tabbar = $('.tabBar');
            var $tablinkssection = $(".section ul", $tabbar);
            var $tablinks = $("li", $tablinkssection);
            var $tablinkmargin = 6; //Compensation for bottom margin on tab links
            var $teaser = $(".sectionMain .description", $tabbar );
            var maxheight = 0;
               
            //Find highest link:
            $tablinks.each(function() {
                var $thisheight = $(this).height();
                if ( $thisheight > maxheight ) {
                    maxheight = $thisheight;
                }
            });
            //Adjust all links to fit highest link:
            $tablinks.height(maxheight);

            //Adjust Teaser to fit height of links section:
            var $tablinkssectionheight = $tablinkssection.height();
        },

        adjustWidths: function(){
            var $target = $('.tabBar');
            var $items = $target.find(".tabLinks li");
            
            $items.css("width", "auto");
        },

        activateTabs: function() {
            var $tabbar = $(".tabBar");
            var $tabs = $(".tabLinks li", $tabbar);
            var $tabContentArea = $(".tabContent", $tabbar);
            var $tabContentPanes = $(".tabContent li", $tabbar);

            $("a.active", $tabs).live("click",function(){
                return false;
            });

            $("a:not(.active)", $tabs).each(function(){
                //Bind click handler to inactive tabs:
                $(this).click(function(){
                
                    //Save scroll position for later:
                    var scrollPos = $(window).scrollTop();

                    //Hide all tabs, then show selected one:
                    $tabs.removeClass("active").removeClass("inactive");
                    $(this).parent("li").addClass("active");
                    $(this).parent("li").siblings().addClass("inactive");

                    //Reveal selected tab content pane:
                    var href = $(this).attr("href");
                    
                    var curHeight = $tabContentArea.height(); //Save pane height
                    $tabContentArea.height( curHeight ); //Fix container to saved height to avoid collapse and flicker in IE
                    
                    $tabContentPanes.removeClass("active");
                    $tabContentPanes.filter("#" + href).addClass("active");
                    $tabContentArea.height( "auto" ); //Auto height to match new content

                    //Scroll to saved position:
                    window.scrollTo(0, scrollPos);

                    return false;
                });
            });
        },

        fixTabsInIE: function() {
            $(".tabBar").fadeOut(1).fadeIn(1);
        }
    };


    /*Dynamic styles*/
    AS3.DynamicStyle = {
        addCufonClass: function(e) {
            //Dom elements
            var $target = $('#articleContent, .scfForm'),
                $headings = $target.find('h1:not(.cufon-bm),h2:not(.cufon-bm),h3:not(.cufon-bm),.scfSectionLegend');
               
            $headings.addClass('cufon-bm'); 
            Cufon.replace("#articleContent .cufon-bm, .scfForm .cufon-bm");
        },
        logoContainer: function(){
            var $target = $('#logoContainer');
            var $items = $target.find("#logoContainerInner > ul > li");
            
            $target.find("#logoContainerInner > ul > li").css("width", (parseInt(1000 / $items.length)/10 - 0.01) + "%");
        },
        adjustLanguageBar: function(){
            var $target = $('.tools li.select ul');
            
            $target.css("minWidth", $target.siblings("span").width()-9 + "px");
        },
        topElementImage: function(){
            var $target = $('.topImage.frame, .topImage.video');
            var $targetImg = $target.find('img');
            
            if($targetImg.height() < $target.height()) $targetImg.css({"height": "100%", "width": "auto"});
        },
        arrowLink: function(){
            var $target = $('.arrowLink');
            
            $target.each(function(){
                $(this).append("<span style='position:absolute;width:4px;margin-left:5px;background:no-repeat 0 50% "+ $(this).css("background-image") +"'>&nbsp;</span>");
                $(this).css("background", "none");
            })
        },
        firstRowClass: function(){
            $('.twoColumn td:last').addClass('last');
        }
    };

    /*Search*/
    AS3.Search = {
        init: function(){
            var $search = $(".searchPageSearchBox, .search");
            $search.find("input:text").focus(function(){
                $(this).addClass("focused");
            });
            $search.find("input:text").blur(function(){
                $(this).removeClass("focused");
            });
        },

        goSearch: function(e) {
            var $search = $(".searchPageSearchBox, .search");
            switch(e.keyCode){
                case 13: {
                    e.preventDefault();
                    $search.find("input.focused").siblings("input:submit").click();
                    break;
                }
            }
        },
        searchRequest: function(e) {
            var $search = $(".search .text");
            $search.focus(function(){

                var currentPhrase = $(this).val();
                var defaultPhrase = $("#uiSearchBoxSmall_defaultPhrase").val();

                //Clear only if value is default searchphrase:
                if (currentPhrase === defaultPhrase) {
                    $(this).addClass("request").val("");
                } else {
                    $(this).addClass("request");
                }
                
            });
        }
    };


    /*IE6 Popup*/
    AS3.IE6Notify = {
        showPopup: function(e) {
            // Dom elements
            var $popup = '<div class="lightbox ie6popup"><div class="lightboxInner"><h1 class="lightboxHeader">MS IE6 Notification</h1><div class="container">You use Microsoft Internet Explorer, version 6.<br />You should upgrade your browser to upper version.</div></div><span class="close" /></div>';

            if(!jQuery(".overlay").length) {
                jQuery("body").append('<div class="overlay" />');
            }
            jQuery(".overlay").addClass("ie6overlay").css("opacity", 0.75);
            jQuery("body").append($popup);
        }
    };


    /*Tracking*/
    AS3.Track = {
        exitLinks: function() {
            var links = $('a');

            $(links).each(function(){
                //Find all hyperlinks that point to a different domain:
                if( (this.href.indexOf(window.location.hostname) === -1) && (this.href.indexOf('http') !== -1) ) {
                    $(this).click(function(){
                        _gaq.push(['_trackEvent', 'Exit-link', this.href]);
                    });
                }
            });
        },

        downloads: function() {
            var links = $('a').filter(function(){
                return this.href.match('[\.exe|\.zip|\.wav|\.mp3|\.mov|\.mpg|\.avi|\.wmv|\.pdf|\.doc|\.docx|\.xls|\.xlsx|\.ppt|\.pptx]$');
            });

            links.click(function(){
                _gaq.push(['_trackPageview', this.href]);
                _gaq.push(['_trackEvent', 'Download', this.href]);
            });
        },

        mailTo: function() {
            var links = $('a[href^="mailto:"]');
            
            links.click(function(){
                var linkEmail = $(this).replace("mailto:", "");
                _gaq.push(['_trackEvent', 'Mailto', linkEmail, window.location.href]);
            });
        },

        youtubeVideos: function(logToConsole){
            $("#articleContent .youtubeVideo").each(function(){
                var id = $(this).attr("id");
    
                var trackableVideo = "var params = { allowScriptAccess: 'always' }; var atts = { id: '";
                trackableVideo += id;
                trackableVideo += "' }; var url = 'http://www.youtube.com/v/";
                trackableVideo += id;
                trackableVideo += "&hl=pt-br&fs=1&enablejsapi=1&playerapiid=";
                trackableVideo += id;
                trackableVideo += "'; swfobject.embedSWF(url, '";
                trackableVideo += id;
                trackableVideo += "', '425', '344', '8', null, null, params, atts);";

                $(this).after("<script type='text/javascript'>"+trackableVideo+"</script>");
            })

            //Initiate tracking:
            function yt_callback(category,action,label,value){
                _gaq.push(['_trackEvent',category,action,label,value]);
            }; 
            var ytTracker = new YoutubeTracker(false, yt_callback, logToConsole);
        }
        
    };

    $(document).ready(AS3.Events.init);

}(jQuery));
