/*
This file creates the functionality for the sub navigation on hub pages
    - it grabs in content from the page server and chucks it in page but only if it needs to, 
      otherwise it finds the div it would like to load and loads it
*/
jQuery(function() {
// setting up namespace
    var electrolux = window.electrolux||{}; 
    electrolux.ajax_load={
        // objects/vars used throughout the script
        $anchors : jQuery('a.slurp'),
        $containers: jQuery('.subnav a').parents('.contentBlock'),
        container_class : 'content_container',
        load_class : 'load_target',
        current_class: "selected",
        animation_time:800,
        loader_html:'<div class="message loading"><img src="/assets/images/' + translations.loader.loading_src + '" alt="' + translations.loader.loading_alt + 'Loading content" /></div>',
        fail_html:'<div class="message fail"><img src="/assets/images/' + translations.loader.fail_src + '" alt="' + translations.loader.fail_alt + 'Loading content" /></div>',
        // highlight the currently selected nav item
        highlight:function(parentElm,t) {
            var to_highlight;
            parentElm.find('.'+ electrolux.ajax_load.current_class + '').removeClass(electrolux.ajax_load.current_class);
            // not all slurp links are in the nav - but still require to show selected in the nav
            if (t.parent().parent().hasClass('subnav')) {
                to_highlight = t.parent();
            } else {
                to_highlight = jQuery('.subnav a[href*=' + t.attr('href') + ']').parent();
            }
            to_highlight.addClass(electrolux.ajax_load.current_class);
        },
        // have called it reveal as we might need to add in design tweeks
        revealMe:function(parentElm,t) {
            // hiding both error or loading messages
            parentElm.find('.message').hide();
            jQuery("." + t + "").fadeIn("slow");
        },
        failMe:function(parentElm,href,remove_id) {
            // removing HTML we don't want anymore
            jQuery('.' + remove_id + '').remove();
            // hiding both error or loading messages
            parentElm.find('.message').hide();
            if (parentElm.find('.fail').length === 0) {
                    parentElm.prepend(electrolux.ajax_load.fail_html);
            } else { 
                // show loader once it's already loaded
                parentElm.find('.fail').show();
            }
        },
        // assigning the required HTML containers for loading/showing content
        init:function() {
            electrolux.ajax_load.$containers.each(function() {
                var initial = jQuery(this).find('.hub_content');
				initial.wrap('<div class="' + electrolux.ajax_load.container_class + '"></div>').wrap('<div class="' + electrolux.ajax_load.load_class + ' initial"></div>');                
            });
            jQuery('.subnav').parent().find('em a').each(function() {
                jQuery(this).addClass('active');
            });
            electrolux.ajax_load.assign_clicks();
        },
        // loading contents from an external page - targetting only the content part
        assign_clicks:function() {
            electrolux.ajax_load.$anchors.click(function() {
                window.stopAllVideos();
                var $that = jQuery(this);
                var href = $that.attr('href');
                var curr_container = $that.parents('.contentBlock');
                var curr_section = curr_container.find('.' + electrolux.ajax_load.container_class + '');
                /* loading in loading box - but only once */
                if (curr_container.find('.loading').length === 0) {
                    curr_section.prepend(electrolux.ajax_load.loader_html);
                } else { 
                    // show loader once it's already loaded
                    curr_container.find('.loading').show();
                }
                curr_container.find('.' + electrolux.ajax_load.load_class + '').hide();
                electrolux.ajax_load.highlight(curr_container,$that);
                electrolux.ajax_load.load_content(href,curr_container);
                return false;
            });
            jQuery('.subnav').parent().find('em a').click(function() {                
                var that = jQuery(this);
                var curr_container = that.parents('.contentBlock');
                if (curr_container.find('.initial').css('display') !== "block") {
                    electrolux.ajax_load.show_initial(curr_container);
                }
                return false;
            });
        },
        // this loads the content and fire the reveal on success
        load_content:function(url,parent) {
            var url_fragments = url.split('/');
            var container_class = url_fragments[url_fragments.length - 2].toLowerCase();
            var curr_section = parent.find('.' + electrolux.ajax_load.container_class + '');
            parent.find('.' + electrolux.ajax_load.load_class + '').hide();
            
            // only want to grab the contents once so quick object detection to check
            if (jQuery('.' + container_class + '').length === 0)
            {
                /*
                    we are embedding forms so that the view state within them (loaded later) allows
                    the .net controls to function correctly
                    PLEASE NOTE - in main.js we need to clear the viewstate info from each embedded form so IE behaves
                */   
                var contents_html = '<form action="' + url + '" method="post" name="aspnetForm" id="aspnetForm" class="' + electrolux.ajax_load.load_class + '"></form>';
                curr_section.append(contents_html);
                parent.find('.load_target:last').addClass(container_class);
                
                var container = jQuery('.' + container_class);
                
                // loading content, fading on complete
                container.load(url + " .hub_content", function(responseText, textStatus, XMLHttpRequest)
                {
                    if (textStatus !== "error")
                    {
                        // in main.js
                        hubInit(container);
                        // loading in the view state information    
                        container.prepend('<div class="view_state"></div>');
                        var view_state = container.find('.view_state');
                        view_state.load(url + " form div:first ");
                        electrolux.ajax_load.revealMe(parent,container_class);
                    }
                    else
                    {
                        electrolux.ajax_load.failMe(curr_section,url,container_class);
                    }
                });
            } else {
                // we only want to scroll, no need to grab pre-cahced content
                electrolux.ajax_load.revealMe(parent,container_class);
            }
        },
        // function which acts on a click on the header tag
        show_initial:function(parent) {
            parent.find('.' + electrolux.ajax_load.current_class + '').removeClass(electrolux.ajax_load.current_class);
            parent.find('.load_target').css('display','none');
            parent.find('.initial').fadeIn("slow");     
        }
    }
    /*
    Pagination of lists, intended for use within tabs but will
     actually work with anything with the defined class ('paginate_me')
    */
    electrolux.paginate_tabs={
        $tabbed_lists:jQuery('.paginate_me'),
        paginate_at:4,
        paginated_class:"pagination",
        hide_class:"inactive",
        prev_btn_class:"prev",
        next_btn_class:"next",
        create_links:function(selector) {
            
           sets = electrolux.paginate_tabs.$tabbed_lists;
           
            sets.each(function() {
                var num_li = jQuery(this).find('li').length;
                if (num_li <= electrolux.paginate_tabs.paginate_at) {
                    return;
                }
                var li_pagination = '<div class=' + electrolux.paginate_tabs.paginated_class + '>';
                var new_ul = "<li class='group'><ul>";
                //li_pagination += "<a href='#' class='" + electrolux.paginate_tabs.prev_btn_class + "'>" + translations.pagination.next + "</a>";
                li_pagination += "<ul>";
                li_pagination += "<li><a href='#' class='1 current'><span>" + translations.pagination.select + "</span>" + 1 + "</a></li>";
                jQuery(this).find('li').each(function(index, domEl) {
                    var times_paginated = 1;
                    new_ul += "<li style='background:" + jQuery(this).css('background') + ";'>";
                    new_ul += jQuery(domEl).html();
                    new_ul += "</li>";
                    if (index % 4 == 3) {
                        new_ul += "</ul></li>";
                        if (index != (num_li -1)) {
                            // if not the last iteration start a new list container
                            // hacking the hidden class on from the start, less DOM stuff
                            new_ul += "<li class='group " + electrolux.paginate_tabs.hide_class + "'><ul>";
                            times_paginated++;
                            li_pagination += "<li><a href='#' class='" + times_paginated + "'><span>" + translations.pagination.select + "</span>" + times_paginated + "</a></li>";
                        }
                    }
                });
                new_ul += "</ul></li>";
                jQuery(this).html(new_ul).addClass('paged');
                li_pagination += "</ul>";
                //li_pagination += "<a class='" + electrolux.paginate_tabs.next_btn_class + "'href='#'>" + translations.pagination.next + "</a></div>";
                jQuery(this).after(li_pagination);
                electrolux.paginate_tabs.assign_pagination(jQuery(this));
            }); 
        },
        assign_pagination:function(elm) {
            var curr_pag = elm.next();
            curr_pag.find('ul a').click(function() {
                jQuery(this).parent().parent().find('.current').removeClass('current');
                var to_show = jQuery(this).attr('class') - 1;
                jQuery(this).addClass('current');
                electrolux.paginate_tabs.reset_lists(elm);
                elm.find('.group:eq(' + to_show + ')').removeClass(electrolux.paginate_tabs.hide_class);
                return false;
            });
        },
        reset_lists:function(elm) {
            elm.find('.group').each(function() {
                jQuery(this).addClass(electrolux.paginate_tabs.hide_class);
            });
        }
    }
    electrolux.ajax_load.init();
    electrolux.paginate_tabs.create_links();
});