/**
 * ID Map
 * ------
 * #viewcount - int, times video viewed.
 ** */

/* ********************************************************************** */
/* * Functions ********************************************************** */
/* ********************************************************************** */
function install_link_tracking() {
    var sel = "a[href^='http://'], a[href^='http://']";
    $(sel).bind('click keypress', function() {
        var url = $(this).attr('href');
        var track_name = url.match(/:\/\/(.[^/]+)/)[1];

        if ($(this).parent().attr('id') == 'banner_container') {
            track_name += '-banner';
        }

        var pt = _gat._getTracker("UA-10983762-5");
        pt._trackEvent('referral', track_name);
        window.open(url);
        return false;
    });
}

function install_sidebar_tooltips() {
    var x_offset = -100;
    var y_offset = 20;

    $('a.video-link').live('mouseenter', function(e) {
        var url = $(this).attr('rel');
        $('body').append('<p id = "preview"><img src = "' + url + '"/></p>');
        $('#preview')
            .css('top', (e.pageY + y_offset) + 'px')
            .css('left', (e.pageX + x_offset) + 'px')
            .fadeIn('fast');
    });
    $('a.video-link').live('mouseleave', function() {
        $('#preview').remove();
    });
}

/* ********************************************************************** */
/* * FLV URL Resolving ************************************************** */
/* ********************************************************************** */
function set_download_url(data) {
    if (data['error']) {
        var text = data['error'];
    } else {
        var url = data['url'];
        var name = data['name'];
        var size = data['size'];
        var text = '<a href = "' + url + '" target = "_blank">' +
        name + ' (' + size + ')</a>';
    }
    $('#thinking').fadeOut(function() {
        $('#dyn-download').append(text).hide().fadeIn();
    });
}

function install_resolve_flv_url(url) {
    $('#resolve-flv-url').click(function() {
        $('#resolve-flv-url').fadeOut(function() {
            var html = '<span id = "thinking">Thinking...</span>';
            $('#dyn-download').append(html).hide().fadeIn();
            $.getJSON(url, set_download_url);
        });
        return false;
    });
}

/* ********************************************************************** */
/* * Cross-fade effect ************************************************** */
/* ********************************************************************** */
function fade_el(sel, opacity, new_cb) {
    var q = $(sel).delay(3000);
    q = q.animate({opacity: opacity}, 1000, new_cb);
}
function banner_in() {
    fade_el('.crossfade-banner', 1, banner_out);
}
function banner_out() {
    fade_el('.crossfade-banner', 0, banner_in);
}

function install_cross_fade() {
    $('.crossfade-banner').cross();
    banner_out();
}

/* ********************************************************************** */
/* * Dynamic data handling ********************************************** */
/* ********************************************************************** */
function DynDataHandler(url, video_id) {
    this.url = url;
    this.video_id = video_id;
}

DynDataHandler.prototype.place_bookmark_indicators = function(all_bookmarks) {
    $('.box').each(function() {
        var box_id = $(this).attr('id');
        var id = parseInt(box_id.split('-')[1]);
        if (all_bookmarks.indexOf(id) != -1) {
            var html = '<div class = "star"></div>';
            $('.thumbnail-box', this).append(html);
        }
    });
}

DynDataHandler.prototype.add_sidebar_video = function(id, video) {
    var el_id = id + '-' + video.id;
    $('#' + id).prepend(   
        '<li><a ' +
        'href = "' + video.url + '" ' +
        'id = "' + el_id + '" ' +
        'class = "video-link" ' +
        'title = "' + video.title + '" ' +
        'rel = "' + video.thumbnail + '">' + video.title + '</a></li>');    
}

DynDataHandler.prototype.render_sidebar_list = function(id, videos) {
    for (var n = 0; n < videos.length; n++) {
        var video = videos[n];
        this.add_sidebar_video(id, video);
    }
}

DynDataHandler.prototype.set_view_count = function(id, views) {
    $('#' + id).text(views);
}

DynDataHandler.prototype.set_delete_bookmark = function() {
    var el = $(".add-bookmark");
    $(el).removeClass("add-bookmark");
    $(el).addClass("del-bookmark");
    $(el).text("Remove Favorite");
}

DynDataHandler.prototype.set_add_bookmark = function() {
    var el = $(".del-bookmark");
    $(el).removeClass("del-bookmark");
    $(el).addClass("add-bookmark");
    $(el).text("Add Favorite");
}

DynDataHandler.prototype.add_bookmark_handlers = function() {
    var parent = this;
    $('.add-bookmark').live('click', function() {
        $.get(ADD_BOOKMARK_URL);
        parent.add_sidebar_video('bookmark-list', VIDINFO);

        parent.set_delete_bookmark();
        return false;
    });

    $('.del-bookmark').live('click', function() {
        $.get(DEL_BOOKMARK_URL);
        $('#bookmark-list-' + VIDINFO.id).remove();

        parent.set_add_bookmark();
        return false;
    });
}

DynDataHandler.prototype.call_json = function() {
    var parent = this;
    $.getJSON(this.url, function(data) {
        var all_bookmarks = data['all_bookmarks'];
        var video_id = parent.video_id;
        parent.place_bookmark_indicators(all_bookmarks);
        if (video_id != -1) {
            parent.set_view_count('viewcount', data['views']);
            if (all_bookmarks.indexOf(video_id) != -1) {
                parent.set_delete_bookmark();
            } else {
                parent.set_add_bookmark();
            }
        }
        parent.render_sidebar_list('bookmark-list', data['bookmarks']);
        parent.render_sidebar_list('recent-list', data['recents']);
        parent.add_bookmark_handlers();
    });
}



