﻿
//uses prototype

//class that encapsulates the basic page request
var SNJPPageRequest = Class.create();
SNJPPageRequest.prototype = 
{   
    initialize: function(id,rows,page) 
    {     
        this.id = id;
        this.rows = rows;
        this.page = page;
    }
};

var PickData = Class.create();
PickData.prototype = 
{   
    initialize: function(league,game) 
    {     
        this.game = game;
        this.league = league;
    }
};


//main dispatcher for all paging activities
function onPageRequest(nPage,sResource,nID,nRows,el,fnSuccessCallback,fnFailureCallback)
{    
    //find element to perform effect on
    Effect.Fade(el, { duration: 0.5, from: 1, to: 0.1 });
    
    //create the request object
    var req = new SNJPPageRequest(nID,nRows,nPage);
    var sBuff = Object.toJSON(req);
    
    new Ajax.Request(sResource,  
    {
        method:'post',
        postBody: 'snjp=' + sBuff,
        onSuccess: function(transport)
        {
            var json = transport.responseText.evalJSON();
            var func = eval(fnSuccessCallback);
            func(json);
            Effect.Appear(el);
        },
        onFailure: function(transport)
        {
            var json = transport.responseText.evalJSON();
            var func = eval(fnFailureCallback);
            func(json);
            Effect.Appear(el,{duration:0.5});
        }

    });
}

//updates the page tools
function updatePageTools(pageData)
{
    var oElement = null;
    
    //next
    oElement = $('pnext');
    if(oElement != null)
    {
        updatePageToolElement(oElement,pageData.next);
    }
    
    //previous
    oElement = null;
    oElement = $('pprev');
    if(oElement != null)
    {
        updatePageToolElement(oElement,pageData.prev);
    }
    
    //last
    oElement = null;
    oElement = $('plast');
    if(oElement != null)
    {
        updatePageToolElement(oElement,pageData.last);
    }
    
    //first
    oElement = null;
    oElement = $('pfirst');
    if(oElement != null)
    {
        updatePageToolElement(oElement,pageData.first);
    }
    
    //page num
    oElement = null;
    oElement = $('ppage');
    if(oElement != null)
    {
        oElement.innerHTML = pageData.page;
    }    
    
}

//updates a single page tool element
function updatePageToolElement(link,val)
{
    var html = null;
    var arr = null;
    var arrFirst = null;
    
    
    //first, remove disabled attribute
    link.removeAttribute("disabled");
        
    if(val == -1)
    {
        link.setAttribute("disabled","'disabled'");
    }
    else
    {
        arr = link.href.split(",");
        arrFirst = arr[0].split("(");
        arrFirst[1] = val;
        arr[0] = arrFirst.join("(");
        link.href = arr.join(",");
    }
}


//function for on success challenge paging
function OnChallengePage(json)
{    
    var i = 0;
        
    //sanity test
    if(json.data == null)
    {
        return;
    }
    
    //get the hunch table
    var oTable = $('hunchTable');
    if(oTable == null)
    {
        return;
    }
    
    //clear all rows but the header, get the cells ready
    while(oTable.tBodies[0].rows.length > 0)
    {
        oTable.tBodies[0].deleteRow(oTable.tBodies[0].rows.length - 1);
    }
    
    var oTR = null;
    var oTD = null;
    //iterate on the returned objects
    var tipText = null;
    var rowIndex = 0;
    for(i = 0; i < json.data.listCount; i++)
    {
        oTR = oTable.tBodies[0].insertRow(rowIndex);
        oTD = oTR.insertCell(0);
        oTD.innerHTML = json.data.listData[i].huncher;
        
        oTD = oTR.insertCell(1);
        oTD.innerHTML = json.data.listData[i].hunch;
        
        oTD = oTR.insertCell(2);
        oTD.innerHTML = json.data.listData[i].posted;
        
        oTD = oTR.insertCell(3);
        oTD.innerHTML = json.data.listData[i].points;
        oTD.className = json.data.listData[i].pointsClass;
        tipText = "Accuracy: " + json.data.listData[i].accuracy + "<br/>Risk: " + json.data.listData[i].risk;
        oTD.setAttribute("tipText", tipText);
        oTD.onmouseover = function()
        {
            var t = this.getAttribute("tipText");
            Tip(t, WIDTH, 150, TITLE, 'Score Summary', SHADOW, false, FADEIN, 500, FADEOUT, 500, CLOSEBTN, false, CLICKCLOSE, true, BGCOLOR, '#FFFFFF', TITLEBGCOLOR, '#EAF1F4', TITLEFONTCOLOR, 'Black', LEFT, false, ABOVE, true);
        };
        oTD.onmouseout = function()
        {
            UnTip();
        };
        oTD = oTR.insertCell(4);
        oTD.innerHTML = json.data.listData[i].pitch;
        
        if(((i+1) % 2) == 0)
        {
            oTR.className = 'even';
        }
        else
        {
            oTR.className = 'odd';
        }        
        
        //pitch special row
        if(json.data.listData[i].hasPitch)
        {
            rowIndex++;
            oTR = oTable.tBodies[0].insertRow(rowIndex);
            oTR.id = 'p_' + json.data.listData[i].pid;
            oTR.className = 'extRow';
            oTD = oTR.insertCell(0);
            oTD.innerHTML = json.data.listData[i].pitchText;
            oTD.className = 'extCell';
            oTD.colSpan = '5';
        }
        rowIndex++;
    }
    
    //update paging tools
    updatePageTools(json.data.pageObject);
}


//function for on failure
function OnChallengePageFailed(json)
{
    alert('challenge page failure');
}

//function for game page success
function OnGamePage(json)
{
    var i = 0;
        
    //sanity test
    if(json.data == null)
    {
        return;
    }
    
    //get the game table
    var oTable = $('gameTable');
    if(oTable == null)
    {
        return;
    }
    
    //clear all rows but the header, get the cells ready
    while(oTable.tBodies[0].rows.length > 0)
    {
        oTable.tBodies[0].deleteRow(oTable.tBodies[0].rows.length - 1);
    }
    
    //actual iteration on data
    var oTR = null;
    var oTD = null;
    for(i = 0; i < json.data.listCount; i++)
    {        
        oTR = oTable.tBodies[0].insertRow(i);
        oTD = oTR.insertCell(0);
        oTD.innerHTML = json.data.listData[i].fieldImage;
        
        oTD = oTR.insertCell(1);
        oTD.innerHTML = json.data.listData[i].gameName;
        oTD.className = '';
        
        oTD = oTR.insertCell(2);
        oTD.innerHTML = json.data.listData[i].score;
        
        oTD = oTR.insertCell(3);
        oTD.innerHTML = json.data.listData[i].startTime;
        
        oTD = oTR.insertCell(4);
        oTD.innerHTML = json.data.listData[i].countdown;
        
        oTD = oTR.insertCell(5);
        oTD.innerHTML = json.data.listData[i].league;
        oTD.className = '';        
        
        if(((i+1) % 2) == 0)
        {
            oTR.className = 'even';
        }
        else
        {
            oTR.className = 'odd';
        }
    }
    
    //update paging tools
    updatePageTools(json.data.pageObject);
       
}

//function for game page failure
function OnGamePageFailed(json)
{
    alert('game page failure');
}




/* Addition to replace pick */
function loadPrevPick()
{
    var data = fetchPickData();
    loadPick(data.league,data.game,0);
}

function loadNextPick()
{
    var data = fetchPickData();
    loadPick(data.league,data.game,1);
}


function loadPick(league,game,n)
{
    var pickUrl = '/Games/partial/GamePickElement.aspx?GID=' + game + '&LID=' + league + '&NEXT=' + n + '&t=' + getTimeStr();
    new Ajax.Updater ('divPick', pickUrl, { method: 'get', onComplete : onGameDataLoaded });  

}

function onGameDataLoaded()
{
    $('rarr').observe('click', loadNextPick); 
    $('larr').observe('click', loadPrevPick); 
    var data = fetchPickData();
    setTimeout('fetchPieChart(' + data.game + ')',500);
}

function fetchPieChart(game)
{
    var so = new SWFObject("/amCharts/ampie/ampie.swf", "ampie", "320", "243", "8", "#FFFFFF");
    so.addVariable("path", "/amCharts/ampie/");
    so.addVariable("settings_file", encodeURIComponent("/Games/GetPieSettings.ashx?GID=" + game));
    so.addVariable("data_file", encodeURIComponent("/Games/GamePieData.ashx?GID=" + game));
    so.write("flashchart");
}


function fetchPickData()
{
    var dataElement = $('pickData');
    var arr = dataElement.value.split('_');
    var pick = null;
    
    if(arr.length == 0)
    {
        pick = new PickData(0,0);
    }
    else
    {
        pick = new PickData(arr[0],arr[1]);
    }
    return pick;
}
