var entries_per_page = 8;
var start, end, current_page, total_pages, total_entries, catalog_entries;
var endeca_results, selected_entry;
var loader_ad_timeout, loader_ad_trigger, loader_ad_elapsed_time;

var products_path = imghost + '/product/';
var express_install_path = imghost + '/agkidzone/swf/expressInstall.swf';
var game_instruction_images_path = imghost + '/agkidzone/catalog/game_instructions/';

$(function() {
    switch(product_type) {
        case 'Games':
            set_loader_ad_timeout();
            initialize_catalog();
            break;
        case 'Videos':
            initialize_video_player();
            break;
        default: 
            initialize_catalog();
    }
});

function set_loader_ad_timeout() {
    loader_ad_timeout = parseInt($('#loader_ad_timeout').html(), 10) * 1000;
}

function initialize_video_player() {
    flashvars = {
        prefix : products_path
    };

    params = {
        base : imghost + '/agkidzone/' + brand +
            (brand == '' ? '' : '/') + 'swf/',
        allowfullscreen : 'true',
        swliveconnect : 'true',
        allowscriptaccess : 'always',
        wmode : 'transparent'
    };
    
    attributes = {
        id : 'vidplayerHD',
        name : 'vidplayerHD',
        bgcolor: '#000'
    };

    swfobject.embedSWF(
        imghost + '/agkidzone/swf/newvidplayer.swf',
        'vidplayerHD',
        '640', '390', '9',
        express_install_path,
        flashvars, params, attributes
     );
}

/*The following function updates the catalog and is called by the
video player once it has been initialized.*/
function player_ready() {
    initialize_catalog();
}

function determine_asset_type(icon_class) {
    switch(icon_class) {
        case 'video-clip':
            asset_type = 'movieClip';
            break;
        case 'show':
            asset_type = 'tvShow';
            break;
        case 'music-video':
            asset_type = 'musicVideo';
            break;
        case 'game':
            asset_type = 'games';
            break;
        case 'printable':
            asset_type = 'printables';
            break;                         
        default: 
            asset_type = icon_class; 
    }
    return asset_type;
}

function initialize_catalog() {
    insert_catalog_loading_text();
    display_catalog();
}

function display_catalog() {
    refresh_components();
    set_catalog_entries_and_parameters();
    show_catalog();
    if(selected_entry_on_current_page()) {
        update_main_section();
    }
}

function set_catalog_entries_and_parameters() {
    catalog_entries = endeca_results.products;
    total_entries = catalog_entries.length;
    selected_entry = endeca_results.selected_entry;
    current_page = get_number_of_pages(selected_entry+1);
    total_pages = get_number_of_pages(total_entries);
}

function refresh_catalog(query) {
    insert_catalog_loading_text();
    query_url = [
        '/catalog/' + (brand == 'spil' ? 'spilgames' : ''),
        '?path=',
        query].join('');

    $.getJSON(query_url, function(data, textStatus) {
        endeca_results = data;
        display_catalog();
    });
    return false;
}

function insert_catalog_loading_text() {
    $('#catalog_entries').html('<div id="loading_catalog">Loading catalog...</div>');
}

function refresh_components() {
    for(component in endeca_results.components) {
        refresh_component(component);
    }
    update_leftnav_separator();
    update_highlighted_leftnav_items_and_tabs();
}

function refresh_component(component) {
    new_html = [];
    links = endeca_results.components[component];
    for(i = 0; i < links.length; i++) {
        link = links[i];
        new_html.push(link.type == 'endeca' ?
        ['<a href="/js" id="', link.id,'" onclick="',"return refresh_catalog('", link.path, "')", '"></a>'].join('') :
        ['<a href="', link.path, '" id="', link.id, '"></a>'].join(''));
    }
    $('#'+component).html(new_html.join(''));
}

function get_number_of_pages(number_of_entries) {
    non_full_page_size = number_of_entries % entries_per_page;
    number_of_pages = (number_of_entries - non_full_page_size) / entries_per_page;
    if(non_full_page_size > 0) {
        number_of_pages++;
    }
    return number_of_pages;
}

function update_indices() {
    start = (current_page - 1) * entries_per_page;
    end = total_entries - start <= entries_per_page ? total_entries : start + entries_per_page;
}

function update_leftnav_separator() {
    $('#leftnav_top').html() != '' && $('#leftnav_bottom').html() != '' ?
    $('#leftnav_separator').show() : $('#leftnav_separator').hide();
}

function update_highlighted_leftnav_items_and_tabs() {
    remove_highlighted_leftnav_items_and_tabs();
    ids = endeca_results.highlighted_ids;
    for(i = 0; i < ids.length; i++) {
        $('#'+ids[i]).attr('id', ids[i]+'_sel');
    }
}

function remove_highlighted_leftnav_items_and_tabs() {
    $('#catalog a[id$="_sel"]').each(function(index, element) {
        id = $(element).attr('id');
        $(element).attr('id', id.substring(0, id.length-4));
    });
}

function show_catalog() {
    update_indices();
    build_catalog();
    update_page_links();
    $("#pageNum").html('Page ' + current_page + ' of ' + total_pages);
}

function build_catalog() {
    html = [];
    for(i = start; i < end; i++) {
        entry = catalog_entries[i];
        html.push([
            '<a href="#top" class="catalog_entry" onclick="select_entry(this)">',
            '<span class="',  entry.icon_class, '"></span>',
            '<img src="', get_asset_src(i, 'thumb.jpg'), '" />',
            '<h2>', entry.title, '</h2>',
            '<h3>', entry.description, '</h3></a>'].join(''));
    }
    $('#catalog_entries').html(html.join(''));
    if(selected_entry_on_current_page()) {
        highlight_selected_entry();
    }
}

function nextPage() {
    current_page++;
    show_catalog();
    return false;
}

function previousPage() {
    current_page--;
    show_catalog();
    return false;
}

function update_page_links() {
    start == 0 ? $("#previous_link").hide() : $("#previous_link").show();
    end == total_entries ? $("#next_link").hide() : $("#next_link").show();
}

function selected_entry_on_current_page() {
    return (selected_entry >= start && selected_entry < end) ? true : false;
}

function highlight_selected_entry() {
    $('#catalog_entries .catalog_entry:eq('+(selected_entry-start)+')').attr('id', 'selected_entry');
}

function unhighlight_previously_selected_entry() {
    $('#selected_entry').removeAttr('id');
}

function get_asset_src(entry_indice, asset_name) {
    relative_asset_url = catalog_entries[entry_indice].relative_asset_url;
    return [products_path, relative_asset_url, asset_name].join('')
}

function update_main_section() {
    if(product_type == 'Games'){
        display_loader_ad();
        get_and_insert_game_container();
    }
    else if(product_type == 'Videos'){
        play_selected_video();
    }
    else if(product_type == 'Activities'){
        update_main_activities_section();
    }
    track_current_entry();
}

function get_and_insert_game_container() {
    $.ajax({
        type: 'GET',
        url: '/game-container',
        data: {relative_path : catalog_entries[selected_entry].relative_asset_url},
        success: function(container_html){
            subs = {
                'product_base' : get_asset_src(selected_entry, ''),
                'express_install_path' : express_install_path,
                'game_instruction_images_path' : game_instruction_images_path};
            for(sub in subs) {
                regex = new RegExp('\{'+sub+'\}', 'g');
                container_html = container_html.replace(regex, subs[sub]);
            }
            $('#game_content').html(
                brand == 'spil' ? container_html : container_html + get_game_links());
        },
        error: function(response_object){
            $('#game_content').html(response_object.responseText);
        }
    });
}

function get_game_links() {
    return [
        '<div id="game_links">',
        '<a href="/js" id="send_to_friend_link" onclick="return showEmailPage()">Send to a friend</a>',
        '<a href="/js" id="copy_url_link" onclick="return showLinkIt()">Copy the link</a></div>'].join('');
}

/* Video player logic */
function play_selected_video(){
    update_video_info_section();
    play_main_video();
}

function play_main_video(){
    document.getElementById('vidplayerHD').playVid([
        products_path,
        catalog_entries[selected_entry].relative_asset_url,
        'video.',
        catalog_entries[selected_entry].format
    ].join(''));
}

function video_complete(){
    next_entry();
}
function update_video_info_section(){
    entry = catalog_entries[selected_entry];
    next_indice = selected_entry + 1 == total_entries ? 0 : selected_entry + 1;
    next_img_src = get_asset_src(next_indice, 'thumb.jpg');
    
    var info_html = '<div id="' + entry.brand + '_video_logo" class="video_logo"></div>'
    + '<span class="video_title">' + entry.title + '</span>'
    + '<span class="video_desc">' + entry.description +'</span>'; 
    $('#video_info').html(info_html);
    
    var next_html = '<span id="next_video_header">Next Video</span>'
    + '<div id="next_video_thumb">'
    + '<a  href="/js" onclick="return next_entry();">'
    + '<span id="next_entry_icon"></span>'
    + '<img src="' + next_img_src + '" />'
    + '</a></div>';
    $('#next_video').html(next_html);
}

function update_main_activities_section() {
    main_img_src = get_asset_src(selected_entry, 'full.jpg');
    main_pdf_src = get_asset_src(selected_entry, 'activity.pdf');
    $('#main_entry_link img').attr('src', main_img_src).parent().attr('href', main_pdf_src).show();

    previous_indice = selected_entry == 0 ? total_entries - 1 : selected_entry - 1;
    previous_img_src = get_asset_src(previous_indice, 'thumb.jpg');
    $('#previous_entry_link img').attr('src', previous_img_src).parent().show();

    next_indice = selected_entry + 1 == total_entries ? 0 : selected_entry + 1;
    next_img_src = get_asset_src(next_indice, 'thumb.jpg');
    $('#next_entry_link img').attr('src', next_img_src).parent().show();
    
    $('#print_link').attr('href', main_pdf_src).parent().show();
}

function previous_entry() {
    selected_entry = selected_entry == 0 ? total_entries - 1 : selected_entry - 1;
    show_catalog_page_with_selected_entry();
    update_main_section();
    return false;
}

function next_entry() {
    selected_entry = selected_entry + 1 == total_entries ? 0 : selected_entry + 1;
    show_catalog_page_with_selected_entry();
    update_main_section();
    return false;
}

function show_catalog_page_with_selected_entry() {
    if(selected_entry_on_current_page()) {
        unhighlight_previously_selected_entry();
        highlight_selected_entry();
    }
    else {
        current_page = get_number_of_pages(selected_entry+1);
        show_catalog();
    }
}

function select_entry(entry) {
    selected_entry = start + $(entry).prevAll().length;
    unhighlight_previously_selected_entry();
    highlight_selected_entry();
    update_main_section();
}

function track_current_entry() {
    current_entry = catalog_entries[selected_entry];
    track_asset(
        current_entry.brand,
        current_entry.title,
        determine_asset_type(current_entry.icon_class));
}

/*Ad-specific functions*/
function display_loader_ad() {
    if(brand == 'spil') {
        load_spil_banner_ad();
        show_loader_ad('spil');
    } else if(display_ads == 'True') { 
        show_loader_ad('agk');
    }
}

function show_loader_ad(ad_type) {
    $('#game_content').hide();
    $.get(ahost + '/loader-ad/' + ad_type, function(iframe) {
        $('#loader_ad').html(
            ['<div class="loader_ad_text">Advertisement</div>', iframe,
            '<div id="loader_ad_message"></div>',
            '<div id="loader_ad_progress_bar_container">',
            '<div id="loader_ad_progress_bar"></div></div><div class="loader_ad_text">',
            '<a href="/js" onclick="return hide_loader_ad()">Click here to start game</a>',
            '</div>'].join(''));
        $('#loader_ad_container').show();
        initialize_loader_ad_progress_bar();
    });
}

function initialize_loader_ad_progress_bar() {
    if(loader_ad_trigger) {
        clearInterval(loader_ad_trigger);
    }
    loader_ad_elapsed_time = 0;
    loader_ad_trigger = setInterval('update_loader_ad_progress_bar()', 100);
}

function update_loader_ad_progress_bar() {
    loader_ad_elapsed_time += 100;
    loaded_width = Math.round(loader_ad_elapsed_time / loader_ad_timeout * 298);
    $('#loader_ad_progress_bar').css({'width' : ''+loaded_width+'px'});
    if(loader_ad_elapsed_time >= loader_ad_timeout) {
        hide_loader_ad();
    }
}

function hide_loader_ad() {
    if(loader_ad_trigger) {
        clearInterval(loader_ad_trigger);
    }
    $('#loader_ad_container').hide();
    $('#loader_ad').html('');
    $('#game_content').show();
    return false;
}

function load_spil_banner_ad()
{   //load the hard coded Ad tag for the spill group page.
    $('#spil_ad').html(
        "<iframe id='a0aaa882' name='a0aaa882' src='http://www2.boago.com/www/delivery/afr.php?n=a0aaa882&amp;zoneid=1572' framespacing='0' frameborder='no' scrolling='no' width='728' height='90'>" +
        "<a href='http://www2.boago.com/www/delivery/ck.php?n=a11182b3' target='_blank'><img src='http://www2.boago.com/www/delivery/avw.php?zoneid=1572&amp;n=a11182b3' border='0' alt='' /></a></iframe>"
    );
    //scroll to top of page so the ad is viewable
    scroll(0,0);	
}