﻿var recUrl = "http://beta.video.msn.com/play/"
function getNodes(element, xpath, namespaceURLMapper) {
	       
        
        if (!element || !xpath) return null;

        if (typeof(element.selectNodes) != "undefined") {
            return element.selectNodes(xpath);
        }
        else if (typeof(XPathEvaluator) != "undefined")  {
            
            var xEvaluator = new XPathEvaluator();
            if (!xEvaluator) return null;
           
            var xIterator = xEvaluator.evaluate(xpath, element, namespaceURLMapper, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
            var nodes = new Array;
            
            if (xIterator != null) {
                var newNode = xIterator.iterateNext();
                while(newNode) {
                    nodes.push(newNode);
                    newNode = xIterator.iterateNext();
                }
           }
            return nodes;
        }
        else if (typeof(document.createExpression) != "undefined") {
            var xpathExpr = document.createExpression(xpath, namespaceURLMapper);
            var xEvaluator = xpathExpr.evaluate(element, XPathResult.ORDERED_NODE_ITERATOR_TYPE, namespaceURLMapper);
            if (xEvaluator) {
                var nodes = new Array(xEvaluator.snapshotLength);
                for (var i = 0; i < xEvaluator.snapshotLength; i++)
                    nodes[i] = xEvaluator.snapshotItem(i);
                return nodes; 
            }        
        }
        else
            return this.selectNodesInSafari(element, xpath);

        return null;
    }
var anchorColor;
if(document.getElementById("styleholder").childNodes[0].currentStyle)
    anchorColor = document.getElementById("styleholder").childNodes[0].currentStyle.color;
else
    anchorColor = document.defaultView.getComputedStyle(document.getElementById("styleholder").childNodes[0],null).color;

var seriesHistory = new Array();
var viewedList = new Array();
var seriesByDate = new Array();
var topObj = new Array();
var itemObj = new Array();
var topSeries = new Array();
var historyNode = document.getElementById("historyholder");
var compNode = document.getElementById("compholder");
var watchNode = document.getElementById("watchholder");
var series_id = "series_id";
var pid = "partnerpid";
var watchDivCount = watchNode.getElementsByTagName("div");

function initRecommend(theFeed){
   
    topObj = getNodes(theFeed,"//group[@id='mostpopulartv']/item");
    var showItems = getNodes(theFeed,"//group[@id='showguide']/item");
    var items = getNodes(theFeed,"//group[@id='showguide']/item | //group[@id='mostpopulartv']/item");
      
        for(var i=0;i<items.length;i++){
            itemObj[i] = {seriesTitle:items[i].getElementsByTagName("series")[0].getAttribute("title"),episodeTitle:items[i].getElementsByTagName("title")[0].childNodes[0].nodeValue,url:recUrl + "?uuids=" + items[i].getElementsByTagName("id")[0].getAttribute("guid"),market:items[i].getElementsByTagName('id')[0].getAttribute('marketId'),tmsid:items[i].getElementsByTagName('series')[0].getAttribute('tmsId')}
        }
        
        var plusI = items.length;
        
        for(var j=0;j<showItems.length;j++){
            var relatedItems = showItems[j].getElementsByTagName("related");
            var marketId = showItems[j].getElementsByTagName('id')[0].getAttribute('marketId');
            var marketUrl = "http://beta.video.msn.com/play/?v=hulu&ocid=vgeasy&pid=";
            if(marketId.toLowerCase() == "cbs-en-us")
                marketUrl = "http://beta.video.msn.com/play/?v=cbs&ocid=vgeasy&pid="
            if(relatedItems){
                for(var k=0;k<relatedItems.length;k++){
                    itemObj[plusI] = {seriesTitle:showItems[j].getElementsByTagName("series")[0].getAttribute("title"),episodeTitle:relatedItems[k].getAttribute("title"),url:marketUrl + relatedItems[k].getAttribute("pid"),market:showItems[j].getElementsByTagName('id')[0].getAttribute('marketId'),tmsid:showItems[j].getElementsByTagName('series')[0].getAttribute('tmsId')}
                    plusI++;
                }
            }
        }
    getViewedList(itemObj);
}

function writeTopTv(topObj,writeCount){
    
    var styleCheck;
    var writeLength = 6 + (4 - writeCount);
    for(var i=6;i<writeLength;i++){
        
        var topItem = document.createElement("div");
        var topanchor = document.createElement("a");
        topanchor.href = recUrl + "?uuids=" + topObj[i].getElementsByTagName("id")[0].getAttribute("guid")+ "&ocid=vgeasytv";
        var topTitle = topObj[i].getElementsByTagName("title")[0].childNodes[0].nodeValue;
        topanchor.appendChild(document.createTextNode(topTitle));
        topItem.appendChild(topanchor);
         
        watchNode.appendChild(topItem);
        
        if(topanchor.currentStyle){
            styleCheck = topanchor.currentStyle.color;
        }
        else
            styleCheck = document.defaultView.getComputedStyle(topanchor,null).color;
        
        if(styleCheck != anchorColor){
            watchNode.removeChild(topItem)
         }
        
        if(i>=writeLength-1){
            checkWatchNode();
            break
            }
     }
    
    
}

function checkWatchNode(){
    
    for(var i=0;i<watchDivCount.length;i++){
        if(watchCount(watchDivCount[i].childNodes[0].childNodes[0].nodeValue)>1){
            watchNode.removeChild(watchDivCount[i]);
        }
    }
}
function watchCount(item){
    var count = 0;
    for(var i=0;i<watchDivCount.length;i++){
        if(item == watchDivCount[i].childNodes[0].childNodes[0].nodeValue){
        count++;
        }
    }
    return count;
}

function postByDate(a, b) 
 { 
    if(a.startDate.$ > b.startDate.$) 
       return -1 
    if(a.startDate.$ < b.startDate.$) 
       return 1 
    return 0 
 } 

function returnTagName(tagItem,tagObject){

    for(var i=0;i<tagObject.tag.length;i++){
        if(tagObject.tag[i].$namespace.toLowerCase() == tagItem){
            return tagObject.tag[i].$;
            break;
        }
    }
}

function recommend(obj){
   
    for(var i=0;i<obj.video.length;i++){
        seriesByDate.push(obj.video[i]);
        if(seriesByDate.length >= seriesHistory.length){
                trimDuplicates(seriesByDate,seriesHistory);
                break;
        }
    }
}

function hasDuplicateTitle(seriesTitle,videoObject){
    var count = 0;
    for(var i=0;i<videoObject.length;i++){
       if(seriesTitle == videoObject[i].title.$){
            count++;
            if(count > 0){
            return true;
            break;
            }
       } 
    }
    return false;
}

//seriesByDate is JSON object from catalog.  seriesHistory is xml object containing 
//viewed shows.
function trimDuplicates(seriesByDate,seriesHistory){
    
    for(var i=0;i<seriesByDate.length;i++){
       if(hasDuplicateId(seriesByDate[i].title.$,seriesHistory)){
            seriesByDate.splice(i,1);
         }
    }
    seriesByDate.sort(postByDate)
    writeRecommendations(seriesByDate);
}

function hasDuplicateId(seriesTitle,seriesHistory){
    var count = 0;
    for(var i=0;i<seriesHistory.length;i++){
        if(seriesTitle == seriesHistory[i].episodeTitle){
            count++;
            if(count > 0){
            return true;
            break;
            }
       } 
    }
    return false;
}
//Create a callback for each series ID that has been marked as viewed.
function checkSeries(seriesHistory){
    
    for(var i=0;i<seriesHistory.length;i++){
       var sourceurl="http://edge2.catalog.video.msn.com/videoByTag.aspx?mk="+seriesHistory[i].market+"&ns=Series_ID,FullEpisode&tag="+seriesHistory[i].tmsid+",1&ps=1&sf=ActiveStartDate&responseEncoding=json&callbackName=recommend"
       var sourcescript = document.createElement("script");
 	   sourcescript.type = "text/javascript";
 	   sourcescript.src = sourceurl;
 	   document.getElementsByTagName("head")[0].appendChild(sourcescript);
    }
}

function writeRecommendations(seriesByDate){
    var stylecheck;
    var watchCount = 0;
    var writeCount = 0; 
    var watchList = new Array();
       
    for(var i=0;i<seriesByDate.length;i++){
        var isIE = false;
        var watchItem = document.createElement("div");
        var watchAnchor = document.createElement("a");
        watchAnchor.title = seriesByDate[i].title.$;
        
        if(seriesByDate[i].csId.$.toLowerCase() == "newsite")
            watchAnchor.href = "http://beta.video.msn.com/play/?v=hulu&ocid=vgeasy&pid=" + returnTagName(pid,seriesByDate[i].tags);
        else
            watchAnchor.href = "http://beta.video.msn.com/play/?v=cbs&ocid=vgeasy&pid=" + returnTagName(pid,seriesByDate[i].tags);
        
        var watchTitle = seriesByDate[i].source.$friendlyName +":  "+seriesByDate[i].title.$;
        watchAnchor.appendChild(document.createTextNode(watchTitle));
        watchItem.appendChild(watchAnchor);
        
        compNode.appendChild(watchItem);
        
        if(watchAnchor.currentStyle){
            isIE = true;
            styleCheck = watchAnchor.currentStyle.color;
        }
        else
            styleCheck = document.defaultView.getComputedStyle(watchAnchor,null).color;
             
        if(styleCheck == anchorColor){
           watchCount++;
           watchNode.appendChild(watchItem);
        }
        
        if(watchCount >= 4){
            checkWatchNode();
            break;
        }
                  
        if(i>= seriesByDate.length-1 && watchCount < 4){
            writeTopTv(topObj,watchCount);
        }
}}

//Check link color from top weekly videos.  If visited, push to seriesHistory object.
function getViewedList(viewedList){
    var styleCheck;
    var isIE=false;    
        
    for(var i=0;i<viewedList.length;i++){
        var viewedItem = document.createElement("div");
        var viewedanchor = document.createElement("a");
        viewedanchor.href = viewedList[i].url;
        var episodeTitle = viewedList[i].seriesTitle+": "+ viewedList[i].episodeTitle;
        viewedanchor.appendChild(document.createTextNode(episodeTitle));
        viewedItem.appendChild(viewedanchor);
         
    compNode.appendChild(viewedItem);
    
    if(viewedanchor.currentStyle){
        isIE = true;
        styleCheck = viewedanchor.currentStyle.color;
    }
    else
        styleCheck = document.defaultView.getComputedStyle(viewedanchor,null).color;
     
    if(styleCheck != anchorColor){
        seriesHistory.push(viewedList[i]);
        historyNode.appendChild(viewedItem);    
    }
    if(i >= viewedList.length-1 && seriesHistory.length > 0){
        checkSeries(seriesHistory);
        }
    if(i >= viewedList.length-1 && seriesHistory.length <= 0)
        writeTopTv(topObj,0);
}}