(function() {
    $.addNGVideoPlayer = new function(options) {
        var settings = $.extend({
            mainDiv:"video_player_main",
            navMainDiv:"video_nav_main",
            titleDiv:"video_header_title",
            creditsDiv:"video_credits",
            infoTitleDiv:"video_info_title",
            infoDiv:"video_info",
            captionDiv:"video_caption",
            linksDiv:"video_related_links",
            shareDiv:"video_share_info",
            shareURLSpan:"video_share_info_url",
            shareEmbedSpan:"video_share_info_embed",
            dlDiv:"video_dl",
            nextLineupDiv:"next_video_lineup",
            leftNavDiv:"video_left_nav",
            navPagerDiv:"video_nav_pager",
            kidsSearchLink:"kids_search_link",
            lineupDiv:"video_lineup",
            leftCol:"player_left_col",
            rootpath:"/video/player/data/json/",
            //imgpath:"http://"+window.location.hostname,
            //imgpath:"http://video.nationalgeographic.com", // obsolete; all images in json are fully qualified
            baseURL:"http://"+window.location.hostname,
            startupLineup:window.location.toString().indexOf('kids') >= 0 ? "animals-pets-kids":"latest-news", //make default startup lineup be kids specific if on kids site so that non-kids videos don't show up on coming next lineup
            useShare: window.location.toString().indexOf('kids') >= 0 ? false : true,
            listInterval:30,
            lineupColSize:4,
            lineupImgW:160,
            lineupImgH:120,
            nextImgW:60,
            nextImgH:45,
            dlImgW:306,
            dlImgH:230,
            comingNextOffset:363,
            embedCode:'<embed src="'+STATIC_URL+'sites/video/swf/ngplayer_v1.5.1.swf" flashVars="slug=[[vID]]&img=[[vImg]]&vtitle=[[vTitle]]&caption=[[vCaption]]&permalink=[[vLink]]&share=[[vShare]]&autoplay=false&siteid=syndicatedplayer" name="flashObj" width="460" height="321" seamlesstabbing="false" allowfullscreen="true" scale="noscale" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed>',
            embedCodeChannel:'<embed src="http://channel.nationalgeographic.com/channel/videos/satellite/satelliteEmbedPlayer.swf" bgcolor="#000000" flashVars="videoRef=[[vID]]&shareURL=[[vLink]]&embedConfigFileName=config.xml"  allowFullScreen="true" name="flashObj" width="496" height="279" type="application/x-shockwave-flash" swLiveConnect="true" allowScriptAccess="always" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed>',
            embedCodeWild:'<embed src="http://channel.nationalgeographic.com/channel/videos/satellite/satelliteEmbedPlayer.swf" bgcolor="#000000" flashVars="videoRef=[[vID]]&shareURL=[[vLink]]&embedConfigFileName=configWild.xml" allowFullScreen="true" name="flashObj" width="496" height="279" type="application/x-shockwave-flash" swLiveConnect="true" allowScriptAccess="always" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed>'
            },options);

        function NGHTML5Video() {
            if (window.location.port != 80){
                this.playlistStr = settings.baseURL+':' + window.location.port + '/video/player/media-mp4/<slug>/mp4/variant-playlist.m3u8';
            }
            else{
                this.playlistStr = settings.baseURL+'/video/player/media-mp4/<slug>/mp4/variant-playlist.m3u8';
            }

            this.noFlashStr = '<img style="vertical-align:middle;" width="30" height="30" alt="Adobe Flash Player" src="http://wwwimages.adobe.com/www.adobe.com/shockwave/download/images/flashplayer_100x100.jpg"/> This requires the latest version of Flash Player. <a href="http://get.adobe.com/flashplayer/">Click here to download.</a>';
            this.video = null;

            this.setVideo = function(){

                $("#video_flash_player").html("<video src='"+this.playlistStr.replace('<slug>',$.NGPlayer.video.currData.video.id)+"' width='610' height='344' poster='"+$.NGPlayer.video.currData.video.still+"' controls autoplay></video>");

                this.video = document.getElementsByTagName('video')[0];
                this.video.onerror = function(e){
                    if(e.target.error.code > 0) $("#video_flash_player").html("<h3>This video is not available for this platform.</h3><img src='"+$.NGPlayer.video.currData.video.still+"' width='610' height='344'/>");
                }
                this.video.addEventListener('ended',this.endedCallback,false);
            };
            this.endedCallback = function(e){
                $.NGPlayer.comingNext.playNext();
            }
        }

        var preloadImageArray = new Array();

        var NGPlayer = {
            config:settings,
            useHtml5:false,
            handleHtml5Video:new NGHTML5Video(),
            showingDL:true,
            player:'default',
            setNavHeader:function(label){
                var labels = label.split(':');
                var joinedLabel = "<font color='#666666'>";

                for(var i = 0; i < labels.length-1; i++){
                    joinedLabel += labels[i]+" : ";
                }
                joinedLabel += "</font>";
                joinedLabel += labels[labels.length-1];
                // supplant 'Places' with 'Travel & Cultures'
                joinedLabel = joinedLabel.replace(/\bPlaces\b/gi,"Travel &amp; Cultures");
                if (labels[0] == "Kids Video") {
                    $('#'+settings.navMainDiv+' h2').html(labels[0]);
                } else {
                    $('#'+settings.navMainDiv+' h2').html(joinedLabel);
                }
            },
            leftNav:{
                currData:{},
                counter:0,
                startSection:'',
                deepLinkList:[],
                currentLineup:{},
        lineupURL:'',
                populate:function(divName){
                    $.getJSON(settings.rootpath+'main_sections.json',function(data){

                        $.NGPlayer.leftNav.currentMainSections = data;

                        for(var i = 0 ; i < data.sectionlist.section.length; i++){
                            // when creating the left nav, if the startsection is kids then only include kids categories
                            if ($.NGPlayer.leftNav.startSection == "kids") {
                                if (data.sectionlist.section[i].id != "kids"){
                                    continue;
                                }
                            }
                            $(divName).append("<ul class='main' id='"+data.sectionlist.section[i].id+"'><li><a href='#'>"+data.sectionlist.section[i].label+"</a></li></ul>");
                            //Used to open the first few when the video page opened
                            /*if(i < 6 && $.NGPlayer.leftNav.startSection.length <= 0 && data.sectionlist.section[i].id != "kids") $.NGPlayer.leftNav.openCategory(data.sectionlist.section[i].id,$('ul#'+data.sectionlist.section[i].id+' li:first a').text(),data.sectionlist.section[i].id);
                            else */if($.NGPlayer.leftNav.startSection == data.sectionlist.section[i].id){
                                // first see if the landing url maps to a lineup
                                var pathname = window.location.pathname;

                                var vidURLA = pathname.split('/');
                                var subCatID = vidURLA[vidURLA.length-2];

                                $.ajax({
                                  url: settings.rootpath+"lineup_"+subCatID+".json",
                                  async: false,
                                  dataType: 'json',
                                  success:function(data){
                                       // have lineup for path, so use it
                                        var start_section_id = $.NGPlayer.leftNav.currentMainSections.sectionlist.section[i].id;
                                        var id = data.lineup.id
                                        $.NGPlayer.lineup.open(id);
                                        $.NGPlayer.leftNav.openCategory(start_section_id,$('ul#'+start_section_id+' li:first a').text(),start_section_id,$.NGPlayer.leftNav.openDLLeaf);
                                    },
                                  error:function(data){
                                        //no lineup for path, so fallback to promo or dl lineup
                                        var id = $.NGPlayer.leftNav.currentMainSections.sectionlist.section[i].id;
                                        if(id == 'news'){
                                            $.NGPlayer.leftNav.openCategory(id,$('ul#'+id+' li:first a').text(),id,function(){$.NGPlayer.leftNav.openFirstLeaf(id)});
                                        }
                                        else {
                                            $.NGPlayer.lineup.openPromoLineup(id);
                                            $.NGPlayer.leftNav.openCategory(id,$('ul#'+id+' li:first a').text(),id,$.NGPlayer.leftNav.openDLLeaf);
                                        }
                                    }
                                });
                            }
                //if section is kids, make it a link to the kids video landing page
                if(data.sectionlist.section[i].id == "kids"){
            $('ul#'+data.sectionlist.section[i].id+' a').attr('href','/video/player/kids/');
                }
                else {
                $('ul#'+data.sectionlist.section[i].id+' a').bind('click', function(event){
                    var sectionID = $(this).parent().parent().attr('id');

                    if($(this).hasClass('selected')){
                        $(this).removeClass('selected');
                        $(this).parent().parent().removeClass('selected');
                        $(this).nextAll('ul').hide();
                    }
                    else {
                        $.NGPlayer.leftNav.openCategory(sectionID,$('ul#'+sectionID+' li:first a').text(),sectionID);
                        if(!$.NGPlayer.dl.hidden) $.NGPlayer.dl.populate(sectionID);
                    }
                    event.preventDefault();
                });
                }
                        }
                    });
                },
                setHeader:function(){
                    var headerStr = '';
                    $('#'+settings.leftNavDiv+' a.selected').each(function(){
                        headerStr += $(this).text()+':';
                    });
                    $.NGPlayer.setNavHeader(headerStr.substr(0,headerStr.length-1)+$('div#video_nav_main h2').html());
                },
                openDLLeaf:function(){
                    var ln = $.NGPlayer.leftNav;
                    if(ln.deepLinkList.length <= 1) {
                        $('ul#'+ln.deepLinkList[0]+' li:first a').addClass('selected');
                        $.NGPlayer.leftNav.setHeader();

                        //open child categories if not a leaf category
                        ln.openCategory(ln.deepLinkList[0],$('ul#'+ln.deepLinkList[0]+' li:first a').text(),ln.deepLinkList[0],undefined);
                    }
                    else {
                        ln.openCategory(ln.deepLinkList[0],$('ul#'+ln.deepLinkList[0]+' li:first a').text(),ln.deepLinkList[0],ln.openDLLeaf);
                        ln.deepLinkList.shift();
                    }
                },
                openFirstLeaf:function(id){
                    var ln = $.NGPlayer.leftNav;

                    if($('ul#'+id+' ul:first li').hasClass('last')) {
                        $('ul#'+id+' ul:first li:first a').addClass('selected');
                        $.NGPlayer.leftNav.setHeader();
                        $.NGPlayer.lineup.open($('ul#'+id+' ul:first').attr('id'));
                    }
                    else {
                        var nextID = $('ul#'+id+' ul:first').attr('id');
                        ln.openCategory(nextID,$('ul#'+nextID+' li:first a').text(),nextID,function(){ln.openFirstLeaf(nextID);});
                    }
                },
                openCategory:function(id,label,idstr,callback){
                    $('#'+id).addClass('selected');
                    $('#'+id+' a:first').addClass('selected');
                    if($('#'+id+' a:first').siblings().length > 1){
                        $('#'+id+' a:first').siblings().show();
                    }
                    else {
                        $.getJSON(settings.rootpath+"category_"+id+".json",function(data){
                            $.NGPlayer.leftNav.currData.id = id;
                            $.NGPlayer.leftNav.currData.label = label;
                            $.NGPlayer.leftNav.currData.idstr = idstr;
                            $.NGPlayer.leftNav.currData.data = data;
                            $.NGPlayer.leftNav.renderList();
                            if(callback!= undefined) callback();
                        });
                    }
                },
                loadAds:function(uri){
                    // want to to reload ad frames, but
                    // swap out the query string to reflect the new uri
                    // "?site_name={{ result.site_name }}&zone={{ result.zone }}"
                    $.getJSON("/advertising/lookup/?uri=" + uri,function(data){
                        var site_name = data.site_name;
                        var zone = data.zone;

                        var frameIndex = 0;
                        var pageFrames = document.getElementsByTagName('iframe');
                        try {
                            for(var i = 0; i < pageFrames.length; i++){
                                if(pageFrames[i].name.indexOf("ngsAdvertisingRefreshFrame") >= 0){
                                    //in pageFrames[i].src replace site_name and zone in src with new values
                                    var frameSrc = pageFrames[i].src;
                                    var randParamStr="ngsAdvertisingRefreshRand=";

                                    var rand;
                                    if (typeof rand == 'undefined') {
                                        rand = Math.floor(1000000*Math.random());
                                    }

                                    var temp = frameSrc.split('?');
                                    if (temp.length > 0){
                                        frameSrc = temp[0]
                                    }
                                    frameSrc = frameSrc + '?site_name=' + site_name + '&zone=' + zone;
                                    frameSrc = frameSrc  + '&' +  randParamStr + rand;

                                    pageFrames[i].src = frameSrc;
                                }
                            }
                        }
                        catch(e){}
                    });
                },
                renderList:function(){
                    var start = $.NGPlayer.leftNav.counter;
                    var id = $.NGPlayer.leftNav.currData.id;
                    var label = $.NGPlayer.leftNav.currData.label;
                    var idstr = $.NGPlayer.leftNav.currData.idstr;
                    var data = $.NGPlayer.leftNav.currData.data;

                    for(var i = start ; i < start+settings.listInterval; i++){
                        if(i >= data.section.children.length) {
                            $.NGPlayer.leftNav.counter = 0;
                            $.NGPlayer.leftNav.currData = {};
                            return;
                        }
                        if(data.section.children[i].hasChild == "true"){
                            $('#'+settings.leftNavDiv+' #'+id+' li:first').append("<ul id='"+data.section.children[i].id+"'><li><a href='#'>"+data.section.children[i].label+"</a></li></ul>");
                            $('#'+settings.leftNavDiv+' ul#'+data.section.children[i].id+' a').bind('click', function(event){
                                if($(this).hasClass('selected')){
                                    $(this).removeClass('selected');
                                    $(this).parent().parent().removeClass('selected');
                                    $(this).nextAll('ul').hide();
                                }
                                else {
                                    var sectionID = $(this).parent().parent().attr('id');
                                    $.NGPlayer.leftNav.openCategory(sectionID,label+":"+$('ul#'+sectionID+' li:first a').text(),idstr+":"+sectionID);
                                }
                                event.preventDefault();
                            });
                            //This opens up the video categories on the Kids Video page
                            $('#'+settings.leftNavDiv+' ul#kids ul#'+data.section.children[i].id+' a').click();
                        }
                        else {
                            $('#'+settings.leftNavDiv+' #'+id+' li:first').append("<ul class='last' id='"+data.section.children[i].id+"'><li class='last'><a href='#'>"+data.section.children[i].label+"</a></li></ul>");
                            if(data.section.children[i].id.length > 0){
                                $('#'+settings.leftNavDiv+' ul#'+data.section.children[i].id+' a').bind('click', function(event){
                                    // redress the h3 if /player/kids/
                                    // grab title from left nav
                                    var sectionTitle = $(this).text();
                                    varTrailingS = sectionTitle.slice(-1);
                                    // we want to make "animal videos", not "animals videos"
                                    if (varTrailingS == "s") {
                                        sectionTitle = sectionTitle.slice(0,-1);
                                    }
                                    if ($.NGPlayer.leftNav.startSection == "kids" && $("#video_right_nav h3").size() > 0) {
                                        $("#video_right_nav h3").html(sectionTitle + " Videos");
                                    }

                                    var sectionID = $(this).parent().parent().attr('id');

                                    $.getJSON(settings.rootpath+"lineup_url_"+sectionID+".json",function(data){
                                        $.NGPlayer.leftNav.lineupURL = data.lineup_url;
                                        //var topLevelID = lineupURL.split('/')[3]; // get geocore
                                        //window.location.href = lineupURL; // future redesign may do this way
                                        $.NGPlayer.leftNav.loadAds($.NGPlayer.leftNav.lineupURL);
                                    });

                                    $.NGPlayer.lineup.sectionid = idstr+":"+sectionID;
                                    $.NGPlayer.lineup.open($(this).parent().parent().attr('id'));

                                    $.NGPlayer.setNavHeader(label+":"+$('ul#'+sectionID+' li:first a').text()+"<span></span>");
                                    $('#'+settings.leftNavDiv+' li.last a.selected').removeClass('selected');
                                    $('#'+settings.leftNavDiv+' li.selected').removeClass('selected');
                                    $(this).addClass('selected');
                                    $(this).parent().addClass('selected');
                                    event.preventDefault();
                                });
                            }
                        }
                    }
                    $.NGPlayer.leftNav.counter+=settings.listInterval;
                    $.NGPlayer.leftNav.timeout = setTimeout('$.NGPlayer.leftNav.renderList()',100);
                }
            },
            paginator:{
                currentPage:1,
                currentID:"",
                totalPages:"",
                populate:function(totalpages,id,page){
                    $.NGPlayer.paginator.totalPages = totalpages;
                    $.NGPlayer.paginator.currentID = id;
                    $.NGPlayer.paginator.currentPage = page;
                    $('.'+settings.navPagerDiv).width(600);
                    if(totalpages <= 1){
                        $('.'+settings.navPagerDiv).html('');
                    }
                    else {
                        var max = 3;
                        var startPage = 1;

                        $('.'+settings.navPagerDiv).html('<ul></ul>');
                        var pagerUL = $('.'+settings.navPagerDiv+' ul');

                        if(totalpages < 3) max = totalpages;
                        pagerUL.append("<li><a href='#'>&laquo; Previous</a></li>");
                        if(page > 2 && totalpages > 4){
                            pagerUL.append("<li><a href='#1' name='1'>1</a></li>");

                            pagerUL.append("<li>...</li>");
                            startPage = page-1;
                            max = page+1;
                        }
                        if(page >= totalpages-1 && totalpages > 3){
                            startPage = totalpages-2;
                            max = totalpages;
                        }
                        for(var i = startPage; i <= max; i++){
                            pagerUL.append("<li><a href='#"+i+"' name='"+i+"'>"+i+"</a></li>");
                        }
                        if(totalpages > 3 && page < totalpages-1){
                            pagerUL.append("<li>...</li>");
                            pagerUL.append("<li><a href='#"+totalpages+" name='"+totalpages+"'>"+totalpages+"</a></li>");
                        }

                        $('.'+settings.navPagerDiv+' li:first a').bind('click', function(event){
                            $.NGPlayer.paginator.previous();
                            event.preventDefault();
                        });

                        $('.'+settings.navPagerDiv+' li:gt(0) a').bind('click', function(event){
                            $.NGPlayer.paginator.goToPage($(this).text());
                            event.preventDefault();
                        });

                        $("."+settings.navPagerDiv+" a[name='"+page+"']").addClass('selected');
                        pagerUL.append("<li><a href='#'>Next &raquo;</a></li>");
                        $('.'+settings.navPagerDiv+' li:last a').bind('click', function(event){
                            $.NGPlayer.paginator.next();
                            event.preventDefault();
                        });
                    }
                    var width = 0;
                    $('.'+settings.navPagerDiv+':first ul').children().each(function(){
                        width += $(this).outerWidth();
                    });
                    $('.'+settings.navPagerDiv).width(width+20);
                },
                previous:function(){
                    if($.NGPlayer.paginator.currentPage == 1) $.NGPlayer.paginator.currentPage = $.NGPlayer.paginator.totalPages;
                    else $.NGPlayer.paginator.currentPage--;
                    $.NGPlayer.paginator.goToPage($.NGPlayer.paginator.currentPage);
                },
                next:function(){
                    if($.NGPlayer.paginator.currentPage == $.NGPlayer.paginator.totalPages) $.NGPlayer.paginator.currentPage = 1;
                    else $.NGPlayer.paginator.currentPage++;
                    $.NGPlayer.paginator.goToPage($.NGPlayer.paginator.currentPage);
                },
                goToPage:function(num){
                    $.NGPlayer.paginator.currentPage = num*1;
                    if($.NGPlayer.paginator.currentID == "search") $.NGPlayer.search.getPage(num*1);
                    else $.NGPlayer.lineup.open($.NGPlayer.paginator.currentID,num*1);
                }
            },
            lineup:{
                sectionid:'',
                currentLineup:{},
                staticPromoUrlData:
                    {
                    "/video/player/places" : "promoted-videos-places"
                    },

                open:function(id,page){
                    var pageNum = "_"+(page-1);

                    if(page == undefined) page = 1;
                    if(page == 1) pageNum = '';

                    $.getJSON(settings.rootpath+"lineup_"+id+pageNum+".json",function(data){
                        $.NGPlayer.lineup.populate(data,page,false);
                    });
                },
                openBestMatchPromoLineupStatic:function(data, id){
                    $.NGPlayer.lineup.openBestMatchPromoLineup($.NGPlayer.lineup.staticPromoUrlData, id);
                },
                openBestMatchPromoLineup:function(data, id){
                    // upon landing on one of the promotable urls, load the
                    // promotable lineup if present, or fall back to the featured videos lineup
                    // id is the lineup's category slug
                    // <promo url>  lineup slug override>

                    var pathname = window.location.pathname;

                    var offset = pathname.lastIndexOf("/");
                    if (offset < pathname.length-1){
                        offset = pathname.length-1;
                    }
                    pathname = pathname.substr(0, offset);
                        found = false;
                        while (true){
                            if (data[pathname] != undefined){
                                found = true;
                                promoSlug = data[pathname];
                                break;
                            }
                            var offset = pathname.lastIndexOf("/");
                            if (offset > 0){
                                pathname = pathname.substr(0, offset);
                            }
                            else{
                                break;
                            }
                        }
                        if (found){
                            NGPlayer.lineup.open(promoSlug);
                        }
                        else{
                            NGPlayer.lineup.open('featured-videos-'+id);
                        }
                },
                openPromoLineup:function(id,page){
                    $.ajax({
                      url: settings.rootpath+"promo_urls.json",
                      async: false,
                      dataType: 'json',
                      success:function(data){
                            if (data != null){
                                $.NGPlayer.lineup.openBestMatchPromoLineup(data, id);
                            }
                            else{
                              $.NGPlayer.lineup.openBestMatchPromoLineupStatic(data, id);
                            }
                        },
                      error:function(data){
                          $.NGPlayer.lineup.openBestMatchPromoLineupStatic(data, id);
                        }
                    });
                },
                openWNext:function(lineupID,vidID){
                    $.getJSON(settings.rootpath+"lineup_"+lineupID+".json",function(data){
                        $.NGPlayer.lineup.populate(data,1,false);
                        $.NGPlayer.comingNext.populate(vidID,data);
                        $.NGPlayer.comingNext.playcount = 0;
                    });
                },
                populate:function(data,page,isSearch){
                   var col = settings.lineupColSize;
                    var lineupDiv = $('#'+settings.lineupDiv);
                    var totalVids;

                    $.NGPlayer.lineup.currentLineup = data;

                    if ((data.lineup.id.indexOf('promoted-video') == -1)&&(data.lineup.id.indexOf('featured-video') == -1)){
                        if(data.lineup.total*1 <= 1) totalVids = "(1 Video)";
                        else totalVids = "("+data.lineup.total+" Videos)";
                    }

                    $('#'+settings.navMainDiv+' h2 span').html(totalVids);
                    $.NGPlayer.paginator.populate(data.lineup.totalpages,data.lineup.id,page);

                    lineupDiv.html('');
                    for(var i = 0; i < data.lineup.video.length; i++){
                        if(col >= settings.lineupColSize){
                            lineupDiv.append("<ul></ul>");
                            col = 0;
                        }
                        $.NGPlayer.lineup.createItem(data.lineup.video[i],data);
                        col++;
                    }

                    if(isSearch&&NGPlayer.leftNav.startSection != 'kids'){
                        if(data.lineup.total*1 <= 16){
                            $('#'+settings.kidsSearchLink).addClass('no_float');
                        } else {
                            $('#'+settings.kidsSearchLink).removeClass('no_float');
                        }
                        $('#'+settings.kidsSearchLink).show();
                    } else {
                        $('#'+settings.kidsSearchLink).hide();
                    }
                },
                createItem:function(data,lineupData){
                    var title = data.title;
                    var caption = $.NGPlayer.lineup.truncateCaption(data.caption);
                    if (caption.indexOf('<em>') != -1) {
                        if (caption.indexOf('</em>') == -1) {
                            caption += "</em>";
                        }
                    }

                    img = data.thumb;

                    $('#'+settings.lineupDiv+' ul:last').append("<li id='"+data.id+"'><a href='#"+data.id+"'><img src='"+img+"' alt='"+$('<div>'+title+'</div>').text()+"' width='"+settings.lineupImgW+"' height='"+settings.lineupImgH+"'/></a><h4><a href='#"+data.id+"'>"+title+"</a></h4><p>"+caption+"</p><p class='time'>"+data.time+"</p></li>");

                    $('#'+settings.lineupDiv+' ul:last li:last a').bind('click', function(event){
                        $.NGPlayer.video.load(data.id);
                        //if lineup only contains 1 video when in search, trying loading the lineup for the vid as it may have more videos to show
                        if(parseInt(lineupData.lineup.total) <= 2){
                            $.getJSON(settings.rootpath+"video_"+data.id+".json",function(vidData){
                                var vidURLA = vidData.video.url.split('/');
                                var subCatID = vidURLA[vidURLA.length-2];
                                $.getJSON(settings.rootpath+"lineup_"+subCatID+".json",function(lData){
                                    $.NGPlayer.comingNext.populate(subCatID,lData);
                                });
                            });
                        }
                        else $.NGPlayer.comingNext.populate(data.id,lineupData);
                        $.NGPlayer.comingNext.playcount = 0;

                        // lineups can contain videos where each can have a different skin
                        // so, need to determine from the video what it's seo url is and use that to
                        // select the skin
                         $.getJSON(settings.rootpath+"video_"+data.id+".json",function(vidData){
                                var vidURLA = vidData.video.url.split('/');
                                var offset = vidURLA.indexOf("player");
                                topLevelID = vidURLA[offset+1];
                                $.NGPlayer.skin.changeTo(topLevelID);
                            });

                        event.preventDefault();
                        $('html,body').animate({scrollTop: 200}, 500);
                    });
                },
                truncateCaption:function(str){
                    var n = 70;

                    if(str.length > n){
                        var s = str.substr(0, n);
                        var words = s.split(' ');
                        words[words.length-1] = '';
                        str = words.join(' ') + '&hellip;'
                    }

                    return str;
                },
                padNumber:function(num){

                    var paddedNum = "";

                    if(num < 10) paddedNum = "0"+num;
                    else paddedNum = String(num);

                    return paddedNum;
                }
            },
            comingNext:{
                lineupData:{},
                lineupPage:1,
                playcount:0,
                totalItems:0,
                currentNode:null,
                vidList:'',
                populate:function(id,data){
                    $.NGPlayer.comingNext.vidList = '';
                    $('#'+settings.nextLineupDiv).scrollTop(0);
                    if(data.lineup.video.length > 0){
                        var currVid = 0;

                        for(var i = 0; i < data.lineup.video.length; i++){
                            if(data.lineup.video[i].id == id) currVid = i;
                            if($.NGPlayer.comingNext.vidList.indexOf(data.lineup.video[i].id) <= 0){
                                $.NGPlayer.comingNext.vidList += data.lineup.video[i].id+',';
                            }
                            else {
                                data.lineup.video.splice(i,1);
                                i--;
                            }
                        }

                        $('#'+settings.nextLineupDiv+' ul:first').html('');
                        for(var i = currVid+1; i < data.lineup.video.length; i++){
                            $.NGPlayer.comingNext.createItem(data.lineup.video[i]);
                        }
                        for(var i = 0; i < currVid; i++){
                            $.NGPlayer.comingNext.createItem(data.lineup.video[i]);
                        }
                        $('#'+settings.nextLineupDiv+' ul:last').parent().children('div').removeClass('padding');
                        $('#'+settings.nextLineupDiv+' ul:last').parent().children('div').addClass('padding_last');
                        $.NGPlayer.comingNext.lineupData = data;
                        $.NGPlayer.comingNext.lineupPage = data.lineup.page;
                        $.NGPlayer.comingNext.currentNode = $('#video_left_nav ul li.last.selected').parent();
                        if($.NGPlayer.comingNext.currentNode.length <= 0) $.NGPlayer.comingNext.currentNode = $('#'+settings.startupLineup);
                    }
                    $.NGPlayer.comingNext.totalItems = data.lineup.video.length;
                    if(data.lineup.video.length < 16) $.NGPlayer.comingNext.findClosest();
                },
                findClosest:function(start){
                    if(start == undefined) start = false;
                    var id = $.NGPlayer.comingNext.currentNode.next().attr('id');
                    if(id == undefined){
                        id = $.NGPlayer.comingNext.currentNode.parent().parent('ul').next().attr('id');
                        if(id == undefined) $.NGPlayer.comingNext.appendLineup(settings.startupLineup,start);
                        else $.NGPlayer.comingNext.findLeaf(id,start);
                    }
                    else $.NGPlayer.comingNext.appendLineup(id,start);
                },
                findLeaf:function(id,start){
                    $.getJSON(settings.rootpath+"category_"+id+".json",function(data){
                        if(data.section.children[0].hasChild == "true") $.NGPlayer.comingNext.findLeaf(data.section.children[0].id,start);
                        else $.NGPlayer.comingNext.appendLineup(data.section.children[0].id,start);
                    });
                },
                appendLineup:function(id,start){
                    $.NGPlayer.comingNext.currentNode = $('ul#'+id);
                    $.getJSON(settings.rootpath+"lineup_"+id+".json",function(data){
                        $.NGPlayer.comingNext.totalItems += data.lineup.video.length;
                        if($.NGPlayer.comingNext.totalItems < 16) $.NGPlayer.comingNext.findClosest();
                        $.NGPlayer.comingNext.lineupData = data;
                        $('#'+settings.nextLineupDiv+' ul:last').parent().children('div').removeClass('padding_last');
                        for(var i = 0; i < data.lineup.video.length; i++){
                            if(start && i == 0){
                                $.NGPlayer.video.load(data.lineup.video[i].id);
                            }
                            else {
                                if($.NGPlayer.comingNext.vidList.indexOf(data.lineup.video[i].id) <= 0){
                                    $.NGPlayer.comingNext.createItem(data.lineup.video[i]);
                                    $.NGPlayer.comingNext.vidList += data.lineup.video[i].id+',';
                                }
                            }
                        }
                        $('#'+settings.nextLineupDiv+' ul:last').parent().children('div').removeClass('padding');
                        $('#'+settings.nextLineupDiv+' ul:last').parent().children('div').addClass('padding_last');
                    });
                },
                createItem:function(data){
                    var title = data.title;

                    img = data.thumb
                    var imgLI = "<li class='item_img'><a href='#'><img src='"+img+"' alt='"+$('<div>'+title+'</div>').text()+"' width='"+settings.nextImgW+"' height='"+settings.nextImgH+"'/></a></li>";

                    var time = data.time;
                    var infoLI = "<li class='item_info'><a href='#'>"+title+"</a><p>"+time+"</p></li>";

                    $('#'+settings.nextLineupDiv+' ul:first').append("<li id='nextvid_"+data.id+"'><ul class='item'>"+imgLI+infoLI+"</ul><div class='padding'></div></li>");
                    $('#'+settings.nextLineupDiv+' ul:last a').bind('click', function(event){
                        $.NGPlayer.video.load(data.id);
                        event.preventDefault();
                    });
                },
                resize:function(h){
                    $('#'+settings.nextLineupDiv).height(h);
                },
                playNext:function(){
                    $.NGPlayer.comingNext.playcount++;
                    if($.NGPlayer.comingNext.playcount < $.NGPlayer.comingNext.totalItems){
                        var id = $('#'+settings.nextLineupDiv+' ul:first li:first').attr('id').replace('nextvid_','');
                        $.NGPlayer.video.load(id);
                        $.NGPlayer.comingNext.populate(id,$.NGPlayer.comingNext.lineupData);
                    }
                    else {
                        if($.NGPlayer.comingNext.lineupPage < $.NGPlayer.comingNext.lineupData.lineup.totalpages){
                            $.getJSON(settings.rootpath+"lineup_"+$.NGPlayer.comingNext.lineupData.lineup.id+"_"+(parseInt($.NGPlayer.comingNext.lineupPage)+1)+".json",function(data){
                                var id = data.lineup.video[0].id;
                                $.NGPlayer.comingNext.populate(id,data);
                                $.NGPlayer.video.load(id);
                                $.NGPlayer.comingNext.playcount = 0;
                                $.NGPlayer.comingNext.totalItems = data.lineup.video.length;
                                if(data.lineup.video.length < 16) $.NGPlayer.comingNext.findClosest();
                            });
                            $.NGPlayer.comingNext.lineupPage++;
                        }
                        else {
                            $.NGPlayer.comingNext.lineupPage = 1;
                            $.NGPlayer.comingNext.findClosest(true);
                        }
                    }
                }
            },
            video:{
                currData:{},
                load:function(id){
                    $.getJSON(settings.rootpath+"video_"+id+".json",function(data){
                        var title = data.video.title;
                        var caption = data.video.description;
                        var credit = data.video.credit;
                        var url = settings.baseURL+data.video.url;
                        var player = 'default';
                        var embedCode = settings.embedCode;

                        $.NGPlayer.video.currData = data;

                        $('#'+settings.mainDiv+' h2').html(title);
                        $('#'+settings.creditsDiv+' p').html(credit);
                        // Add the email and IM links for kids videos
                        if (NGPlayer.leftNav.startSection == "kids" && $('.kids_video_social').length == 0){
                            $('#'+settings.creditsDiv).append("<div class=\"kids_video_social\"><a href=\"javascript:document.location.href = 'aim:goim?message=" + url + "';\" title=\"IM to a friend\">IM This</a><a class=\"kids_email\" href=\"javascript:SendLink('" + url + "');\" title=\"Email to a friend\">Email This</a></div>");
                        }
                        $('#'+settings.captionDiv+' p').html(caption);

                        // kids player auto-expand the infoDev
                        if (NGPlayer.leftNav.startSection == "kids"){
                            if($('#'+settings.infoDiv).css('display') == 'none') {
                                $('#'+settings.infoDiv).toggle();
                            }
                        }

                        if($('#'+settings.infoDiv).css('display') == 'none') $('#'+settings.infoTitleDiv+' li:first a').html(data.video.title+" - Click for Video Details");
                        else $('#'+settings.infoTitleDiv+' li:first a').html(title+" - Click to Hide");
                        $('#'+settings.linksDiv+' ul').html('');
                        for(var i = 0; i < data.video.related.link.length; i++){
                            $('#'+settings.linksDiv+' ul').append("<li><a href='"+data.video.related.link[i].url+"' target='_blank'>"+data.video.related.link[i].name+"</a></li>");
                        }
                        $.NGPlayer.comingNext.resize($('#'+settings.leftCol).innerHeight()-settings.comingNextOffset);

                        if(url.search('national-geographic-channel') >= 0){
                            embedCode = settings.embedCodeChannel.replace('[[vID]]',data.video.id);
                            player = 'channel';
                            if($.NGPlayer.leftNav.lineupURL.length > 0) url = settings.baseURL+$.NGPlayer.leftNav.lineupURL+data.video.url.substr(data.video.url.lastIndexOf('/')+1);
                        }
                        else if(url.search('nat-geo-wild') >= 0){
                            embedCode = settings.embedCodeWild.replace('[[vID]]',data.video.id);
                            player = 'channel';
                            if($.NGPlayer.leftNav.lineupURL.length > 0) url = settings.baseURL+$.NGPlayer.leftNav.lineupURL+data.video.url.substr(data.video.url.lastIndexOf('/')+1);
                        }
                        else if(url.search('kids') >= 0){
                            embedCode = settings.embedCode.replace('[[vShare]]', false).replace('[[vID]]', id);
                        }
                        else{
                            embedCode = embedCode.replace('[[vID]]',id);
                        }
                        $('#'+settings.shareDiv+' form input')[0].value = url;
                        if(data.video.allowUserEmbed == "false"){

                            $('#'+settings.shareDiv+' form input')[1].value = '';
                            $('#'+settings.shareDiv+' form input')[1].disabled = true;

                            // hide embed box if allow embed is false
                            $('#' + settings.shareEmbedSpan).hide();
                    }
                        else {
                            // fully qualify the img
                            if (data.video.still.indexOf("http://") != 0){
                                $('#'+settings.shareDiv+' form input')[1].value = embedCode.replace('[[vImg]]',"http://"+window.location.hostname+data.video.still).replace('[[vTitle]]',encodeURI(title)).replace('[[vCaption]]',encodeURI(caption)).replace('[[vLink]]',url).replace('[[vShare]]','true');
                            }
                            else{
                                $('#'+settings.shareDiv+' form input')[1].value = embedCode.replace('[[vImg]]',data.video.still).replace('[[vTitle]]',encodeURI(title)).replace('[[vCaption]]',encodeURI(caption)).replace('[[vLink]]',url).replace('[[vShare]]','true');
                            }

                            $('#'+settings.shareDiv+' form input')[1].disabled = false;

                            //  show embed box if allow embed is true
                            $('#' + settings.shareEmbedSpan).show();
                        }
                        if($.NGPlayer.showingDL){
                            $.NGPlayer.showingDL = false;
                            if(!$.NGPlayer.dl.hidden) $.NGPlayer.dl.hide();
                            $('#video_flash_player').hide();
                            $('#'+settings.mainDiv).show("slow",function(){$('#video_flash_player').show();embedPlayer(data.video.id,data.video.still,settings.useShare,title,caption,url,player);});
                        }
                        else {
                            if($.NGPlayer.useHtml5){
                                $.NGPlayer.handleHtml5Video.setVideo();
                            }
                            else if(player != $.NGPlayer.player)
                            $('#'+settings.mainDiv).show("slow",function(){$('#video_flash_player').show();embedPlayer(data.video.id,data.video.still,settings.useShare,title,caption,url,player);});
                            else loadVideoInFlashPlayer(data.video.id,data.video.still,settings.useShare,title,caption,url,player);
                        }
                    });
                }
            },
            dl:{
                hidden:false,
                populate:function(id){
                    if(id == undefined) id = "global";
                    $.getJSON(settings.rootpath+"video_dl_"+id+".json",function(data){
                        if ($.NGPlayer.leftNav.startSection == "kids") {
                            $('#'+settings.dlDiv).html("<div id='video_dl_title'>&nbsp;</div><ul class='content'></ul>");
                        }
                        else {
                            $('#'+settings.dlDiv).html("<ul class='content'></ul>");
                        }

                        for(var i = 0; i < data.video_dl.slide.length; i++){
                            $.NGPlayer.dl.createItem(data.video_dl.slide[i]);
                        }

                        $('div#'+settings.dlDiv+' h3').addClass('hidden');
                        $('div#'+settings.dlDiv+' .credit').removeClass('hidden');
                        if ($.NGPlayer.leftNav.startSection == "kids") {
                            $('div#'+settings.dlDiv+' ul').kidsSlideshow();
                        }
                        else {
                            $('div#'+settings.dlDiv+' ul').slideshow();
                        }
                        $('div#'+settings.dlDiv).removeClass('restrain');
                    });
                },
                createItem:function(data){
                    var title = data.title;
                    var caption = data.caption;

                    var img = "";
                    // handle legacy paths
                    if (data.image.indexOf("/video/player/media/") != -1){
                        img = data.image.replace('410x230','480x360');
                        img = data.image.replace('306x230','480x360');
                    }
                    else{
                        img = data.image
                    }

                    if ($.NGPlayer.leftNav.startSection == "kids") {
                        // preload the images to ensure clean transistions
                        preloadImageArray.push(img);
                        $(preloadImageArray).each(function(){
                            $('<img/>')[0].src = this;
                        });
                        var imgDiv = "<div class='video_dl_img'><a href='#'></a><img src='"+img+"' alt='"+$('<div>'+title+'</div>').text()+"' width='"+settings.dlImgW+"' height='"+settings.dlImgH+"'/></div>";
                        var infoDiv = "<div class='video_dl_info'><p class='title'><a href='#'>"+title+"</a><span>"+data.time+"</span><p><p>"+caption+"</p><!--[if IE]><div class='ie_wrap_video_dl'><![endif]--><p class='action'><a href='#' class='kids_button kb_110'><span>Play Now</span></a></p><!--[if IE]></div><![endif]--> ";
                    }
                    else {
                        var imgDiv = "<div class='video_dl_img'><a href='#'><img src='"+img+"' alt='"+$('<div>'+title+'</div>').text()+"' width='"+settings.dlImgW+"' height='"+settings.dlImgH+"'/></a></div>";
                        var infoDiv = "<div class='video_dl_info'><h4>Featured Video</h4><p class='title'><a href='#'>"+title+"</a><span>"+data.time+"</span></p><p>"+caption+"</p><p class='action'><a href='#'>Play Now</a></p>";
                    }
                    var vidID = data.video;

                    $('#'+settings.dlDiv+' ul.content').append("<li class='slide'>"+imgDiv+infoDiv+"</li>");
                    $('#'+settings.dlDiv+' ul.content li:last').bind('click', function(event){
                        $.NGPlayer.video.load(vidID);
                        $.NGPlayer.comingNext.populate(vidID,$.NGPlayer.lineup.currentLineup);
                        event.preventDefault();
                    });
                },
                hide:function(){
                    $('#'+settings.dlDiv).hide("slow");
                    $('#'+settings.leftNavDiv).height(1100);
                    $.NGPlayer.dl.hidden = true;
                }
            },
            search:{
                query:'',
                ldata:null,
                submitQuery:function(q,page){
                    if(page == undefined) page = 1;
                    var start = (page-1)*16;
                    var qObj = {
                        q:q,
                        num:"16",
                        site:"default_collection",
                        client:"default_frontend",
                        output:"xml_no_dtd",
                        filter:"0",
                        sitesearch:"video.nationalgeographic.com",
                        partialfields:"ngs-gsa-feed-video-title:"+q+"|ngs-gsa-feed-video-description:"+q+"|ngs-gsa-feed-video-keywords:"+q,
                        requiredfields:"(ngs-gsa-feed-mediaType:video).(ngs-gsa-feed-video-source:animals|ngs-gsa-feed-video-source:environment|ngs-gsa-feed-video-source:movies|ngs-gsa-feed-video-source:music|ngs-gsa-feed-video-source:news|ngs-gsa-feed-video-source:places|ngs-gsa-feed-video-source:specials|ngs-gsa-feed-video-source:science|ngs-gsa-feed-video-source:nat-geo-wild|ngs-gsa-feed-video-source:national-geographic-channel)",
                        getfields:"ngs-gsa-feed-video-title.ngs-gsa-feed-video-slug.ngs-gsa-feed-video-description",
                        start:start
                    }

                    // if kids-only player, only include kids in search results
                    if ($.NGPlayer.leftNav.startSection == "kids"){
                        qObj.requiredfields = "(ngs-gsa-feed-mediaType:video).(ngs-gsa-feed-video-source:kids)";
                        qObj.sitesearch = "";
                    }

                    $.NGPlayer.search.query = q;

                    if(!$.NGPlayer.dl.hidden) $.NGPlayer.dl.hide();
                    $('#player_wrapper').html('<div id="video_flash_player"></div>');
                    $('#'+settings.mainDiv).hide("slow");
                    $.NGPlayer.showingDL = true;

                    $.get("/video/player/search",qObj,function(data){
                        var totalR = $(data).find("M").text()*1;
            $.NGPlayer.leftNav.lineupURL = '';
                        if(totalR <= 0){
                            $('#'+settings.lineupDiv).html("<div id='no_video_results'>No videos found for <strong>\""+q+"\"</strong>. Please search for a different keyword.</div>");
                            $.NGPlayer.setNavHeader("Search Results: "+q+"<span>(No Videos Found)</span>");
                            $('#'+settings.navPagerDiv).html('');
                        }
                        else {

                            $.NGPlayer.search.ldata = {
                                lineup:{
                                    id:"search",
                                    total:totalR,
                                    totalpages:Math.ceil($(data).find("M").text()/16),
                                    page:1,
                                    pagesize:16,
                                    video:new Array()
                                }
                            };
                            $(data).find("R").each(function(){
                               var id = "";
                                var title = "";
                                var caption = "";
                                $(this).find("MT").each(function(){
                                    if($(this).attr("N") == "ngs-gsa-feed-video-slug"){
                                        id = $(this).attr("V");
                                    }
                                    else if($(this).attr("N") == "ngs-gsa-feed-video-title"){
                                        title = $(this).attr("V");
                                    }
                                    else if($(this).attr("N") == "ngs-gsa-feed-video-description"){
                                        caption = $(this).attr("V");
                                    }
                                });
                                if (caption == ""){
                                    caption = $(this).find("S").text();
                                }
                               $.ajax({
                                    type: 'GET',
                                    url: settings.rootpath+"video_"+id+".json",
                                    dataType: 'json',
                                    success: function(data){
                                            $.NGPlayer.search.ldata.lineup.video.push({id:id,title:title,thumb:data.video.still,caption:caption,time:""})},
                                    async: false
                                });
                            });
                            $.NGPlayer.setNavHeader("Search Results: "+q+"<span></span>");
                            $.NGPlayer.lineup.populate($.NGPlayer.search.ldata,page,true);
                        }
                    });
                },
                getPage:function(page){
                    $.NGPlayer.search.submitQuery($.NGPlayer.search.query,page);
                }
            },
            skin:{
                currentTheme : '_default',
                themes : {
                    kids : {
                        url : STATIC_URL+'sites/kids/c/screen.css',
                        headerLink : 'http://kids.nationalgeographic.com/Videos/'
                    },
                    _default : {
                        url : STATIC_URL+'sites/video/c/default.css',
                        headerLink : 'http://video.nationalgeographic.com'
                    },
                    'national-geographic-channel' : {
                        url : STATIC_URL + 'sites/video/c/channel.css',
                        headerLink : 'http://channel.nationalgeographic.com/channel/videos/'
                    },
                    'nat-geo-wild' : {
                        url : STATIC_URL+'sites/video/c/wild.css',
                        headerLink : 'http://animals.nationalgeographic.com/animals/'
                    }
                },
                change : function(url){
                    var $stylesheet = $('<link />').attr({
                            rel:  "stylesheet",
                            type: "text/css",
                            href: url
                        });
                    $("head").append($stylesheet);
                },
                remove : function(theme){
                    $('head link[href*="'+$.NGPlayer.skin.themes[theme].url+'"]').remove();
                },
                changeTo : function(theme){
                    if(theme != $.NGPlayer.skin.currentTheme){
                        var headerLink = "http://video.nationalgeographic.com";
                        if($.NGPlayer.skin.themes[theme] === undefined) {
                            theme = '_default';
                        }
                        $.NGPlayer.skin.remove($.NGPlayer.skin.currentTheme);
                        $.NGPlayer.skin.change($.NGPlayer.skin.themes[theme].url);
                        if($.NGPlayer.skin.themes[theme].headerLink !== undefined) {
                            headerLink = $.NGPlayer.skin.themes[theme].headerLink;
                        }
                        $.NGPlayer.skin.currentTheme = theme;

                        $('#video_header_title h1').bind('click', function(event){
                            window.location.href = headerLink;
                        });
                        if(theme === "kids"){
                            //toggle("kids_header");
                            //toggle("navigation_tophat_container");
                            //toggle("kids_nav_header");
                            toggle("footer_breadcrumb");
                            toggle("footer_global");
                            toggle("kids_footer_new");
                            //randomizeBackground();
                            $("#video_left_nav > ul").each(function() {
                                if ($(this).attr("id") !== "kids") {
                                    $(this).hide();
                                }
                            });
                            $("#video_header_title h1").text("Videos");
                            $("#video_left_nav ul#kids > li > a").hide();
                            //alert($("#video_right_nav #video_dl div.video_dl_info p.action").text());
                            $("#video_right_nav #video_nav_lineup").before("<h3>Cool Videos</h3>");
                            jQuery('#kids_header .input_field1').labelify({ text: function(input) { return "Search"; } });
                            jQuery('#video_search').addClass('kids');
                            jQuery('#video_search_input').labelify({ text: function(input) { return "Search Kids Videos"; } });
                            $("li.nav9").html('<a href="http://kids.nationalgeographic.com/kids/stories/">News</a>');
                            $("li.nav3").html('<a href="http://kids.nationalgeographic.com/kids/videos/"><b>Videos</b></a>');
                        }
                    }
                },
                addTheme:function(category,theme){
                    $.NGPlayer.skin.themes[category] = theme;
                }
            }
        }
        $(document).ready(function() {
            var useragent = navigator.userAgent;

            if(useragent.search('iPhone') >= 0 || useragent.search('iPad') >= 0){
                NGPlayer.config.rootpath = '/video/player/data/mp4/json/';
            }

            NGPlayer.leftNav.populate('#'+settings.leftNavDiv);

            $('#'+settings.infoTitleDiv+' li:first a').bind('click', function(event){
                $('#'+settings.infoDiv).toggle();
                var aTitle = $('#'+settings.infoTitleDiv+' li:first a');

                if($('#'+settings.infoDiv).css('display') == 'none'){
                    aTitle.html(aTitle.html().replace("Click to Hide","Click for Video Details"));
                    $('#'+settings.infoTitleDiv+' ul').removeClass('selected');
                }
                else {
                    aTitle.html(aTitle.html().replace("Click for Video Details","Click to Hide"));
                    $('#'+settings.infoTitleDiv+' ul').addClass('selected');
                }

                $.NGPlayer.comingNext.resize($('#'+settings.leftCol).innerHeight()-settings.comingNextOffset);
                event.preventDefault();
            });

            $('#'+settings.shareDiv+' form input').bind('click', function(event){
                $(this).focus();
                $(this).select();
            });

            $('#video_search_form').submit(function(){
                $.NGPlayer.search.submitQuery($("#video_search_form input:first").val());
                return false;
            });
            $('#video_header_title h1').bind('click', function(event){
                window.location.href = settings.baseURL;
            });

            //Fix for IE (doesn't support indexOf!).
            if(!Array.indexOf){
                Array.prototype.indexOf = function(obj){
                    for(var i=0; i<this.length; i++){
                        if(this[i]==obj){
                            return i;
                        }
                    }
                    return -1;
                }
            }

            var url = window.location.href;
            var linkA = url.split("/");
            var offset = linkA.indexOf("player");

            if(offset > 0 && linkA.length-2 > offset && linkA[linkA.length-1].search('.html') >= 0 && linkA[linkA.length-1].search('index.html') < 0){
                // it's a url to a specific video
                var vidID = linkA[linkA.length-1].replace(/\.html.*/,'');
                // open particular leaf that the video is in
                var lineupID = linkA[linkA.length-2];
                // get root category
                var topLevelID = linkA[offset+1];

                NGPlayer.leftNav.deepLinkList = linkA.slice(offset+2,linkA.length-1);
                NGPlayer.leftNav.startSection = topLevelID;
                NGPlayer.setNavHeader(" <span></span>");
                NGPlayer.video.load(vidID);
                NGPlayer.lineup.openWNext(lineupID,vidID);
                NGPlayer.skin.changeTo(topLevelID);
            }
            else if(offset+2 == linkA.length-1){
                // it's path to a root category
                var topLevelID = linkA[offset+1];
//              var title = topLevelID.substr(0,1).toUpperCase()+topLevelID.substr(1)+" Featured Videos";
                NGPlayer.leftNav.startSection = topLevelID;
                NGPlayer.setNavHeader(" <span></span>");
                NGPlayer.skin.changeTo(topLevelID);
                NGPlayer.dl.populate(topLevelID);
            }

            else if (offset+2 < linkA.length-1){
                // it's something other than a root category or specific video or the root /
                var topLevelID = linkA[offset+1];

                // want to open to the category in the left nav
                NGPlayer.leftNav.deepLinkList = linkA.slice(offset+2,linkA.length-1);
                NGPlayer.leftNav.startSection = topLevelID;
                NGPlayer.setNavHeader(" <span></span>");
                NGPlayer.skin.changeTo(topLevelID);
                NGPlayer.dl.populate(topLevelID);
            }
            else {
                NGPlayer.dl.populate();
                NGPlayer.setNavHeader("Featured Videos <span></span>");
                NGPlayer.lineup.open(settings.startupLineup);
            }
        });

        $.NGPlayer = NGPlayer;
    };
})();

function thisPlayerSWFName(swfName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[swfName];
    } else {
        return document[swfName];
    }
}
function loadVideoInFlashPlayer(slug,still,share,title,caption,permalink,player) {
    var slugURL = "http://"+window.location.hostname+"/video/player/data/xml/"+slug+".smil";

    thisPlayerSWFName("ngplayer").loadVideoInFlashPlayer((player == 'channel' ? slug : slugURL),still,share,encodeURI(title),encodeURI(caption),permalink);
}
function videoFinished() {
    $.NGPlayer.comingNext.playNext();
}
function embedPlayer(slug,img,share,title,caption,permalink,player){
    var DEFAULT_PLAYER = STATIC_URL+"sites/video/swf/ngplayer_v1.5.1.swf";
    var CHANNEL_PLAYER = "http://channel.nationalgeographic.com/channel/videos/satellite/NGCJointPlayer.swf";
    var playerURL = DEFAULT_PLAYER;

    $.NGPlayer.player = player;

    if(player == 'channel') playerURL = CHANNEL_PLAYER;

    if($('#player_wrapper #video_flash_player').length <= 0) $('#player_wrapper').html('<div id="video_flash_player"></div>');

    var slugURL = "http://"+window.location.hostname+"/video/player/data/xml/"+slug+".smil";
    var flashvars = {};
    flashvars.slug = (player == 'channel' ? slug : slugURL);
    flashvars.img = img;
    flashvars.share = String(share);
    flashvars.vtitle = encodeURI(title);
    flashvars.caption = encodeURI(caption);
    flashvars.permalink = permalink;
    flashvars.adenabled = getQueryParam('adenabled');

    var params = {};
        params.allowscriptaccess = "always";
        params.allowfullscreen = "true";
        params.scale = "allowscale";
        params.wmode = "opaque";
        params.menu = "false";
        params.quality = "best";
        params.bgcolor = "#000000";
        params.name = "ngplayer";

    var attributes = {};
        attributes.id = "ngplayer";
    swfobject.embedSWF(playerURL, "video_flash_player","610", "374", "10", false, flashvars, params, attributes,useHtml5Player);
}
function useHtml5Player(e) {
    var useragent = navigator.userAgent;
    var supported = false;

    if(useragent.search('iPhone') >= 0 || useragent.search('iPad') >= 0) supported = true;
    else if(useragent.search('Safari')){
        var sPos = useragent.indexOf('Intel Mac OS X ')+15;
        var ePos = useragent.indexOf(';',sPos);
        var version = useragent.substring(sPos,ePos).split('_');

        if(parseInt(version[0]) >= 10 && parseInt(version[1]) >= 6) supported = true;
    }

    if(!e.success && supported){
        $.NGPlayer.useHtml5 = true;
        $.NGPlayer.handleHtml5Video.setVideo();
        $.NGPlayer.skin.change(STATIC_URL+'sites/video/c/html5.css');
    }
}
function getQueryParam(name){
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec(window.location.href);
    if( results == null) return "";
    else return results[1];
}
function displayCompanionBanners_728x90(banners) {
    $('#adCompanionBanner728x90').html('');
    tmDisplayBanner(banners, "adCompanionBanner728x90", 728, 90);
}
function displayCompanionBanners_300x250(banners) {
    $('#adCompanionBanner300x250').html('');
    tmDisplayBanner(banners, "adCompanionBanner300x250", 300, 250);
}

function toggle(identifier){
        if(document.getElementById(identifier).style.display == "none"){
            document.getElementById(identifier).style.display = "block";
        } else {
            document.getElementById(identifier).style.display = "none";
        }
}

function ngsVideoPlayerDebug(debugString){
    if(debugNGSPlayer)console.log("VIDEO DEBUG: "+debugString);
}
