
var comment = "";

// app. entry point
function loadUser() 
{
    var sql = "SELECT name FROM user WHERE uid=" + currentUserId;
    FB.Facebook.apiClient.fql_query(sql, function(result, ex) {
        //
        var ownerName = result[0]['name'];
        
        
        //
        insertUser(ownerName);
        getGrade(daysBack);
    });
}

function save()
{
    if (currentUserId == null)
    {
        FB.Connect.requireSession();
        return;
    }
    
    // 
    var grade = $("rating").value;
    comment = $("txtComment").value;
    
    var url = "http://www.daygrader.com/ws/daygrademanager.aspx";
    var vars = "action=insertdaygrade&platformid=1&userid=" + currentUserId + "&daysback=" + daysBack + "&grade=" + grade + "&comment=" + encodeURIComponent(comment);
    postData(url, vars, handleSave);
}

function insertUser(oName)
{
    // 
    var url = "http://www.daygrader.com/ws/getusermanager.aspx";
    var vars = "action=insertuser&platformid=1&userid=" + currentUserId + "&name=" + encodeURIComponent(oName);
    postData(url, vars, handleInsertUser);
}
    
function getGrade()
{
    // 
    var url = "http://www.daygrader.com/ws/daygrademanager.aspx";
    var vars = "action=getdaygrade&platformid=1&userid=" + currentUserId + "&daysback=" + daysBack;
    postData(url, vars, handleGetGrade);
}

function getLifeReport()
{
    // 
    var url = "http://www.daygrader.com/ws/reportdata.aspx?action=getlifereportdata&platformid=1&userid=" + currentUserId;
    getData(url, handleGetLifeReport);
}

function getMonthReport()
{
    // 
    var url = "http://www.daygrader.com/ws/reportdata.aspx?action=getcurrentmonthreportdata&platformid=1&userid=" + currentUserId;
    getData(url, handleGetMonthReport);
}

function handleGetLifeReport(response) 
{               
    // 
    var vals = response;
    var valsLegend = vals.replace(/,/g,"|");
    
    $("chart1").innerHTML = "<img src='http://chart.apis.google.com/chart?chs=420x150&cht=p3&chl=A|B|C|D|F&chco=095487&chdl=" + valsLegend + "&chd=t:" + vals + "' />";
}

function handleGetMonthReport(response) 
{         
    var arrData = response.split(":");

    var data1 = arrData[0];
    var data2 = arrData[1];
          
    //
    var vals1 = data1;
    var vals2 = data2;
    
    var vals1Legend = vals1.replace(/,/g,"|");
    
    $("chart1").innerHTML = "<img src='http://chart.apis.google.com/chart?chs=420x150&cht=p3&chl=A|B|C|D|F&chco=095487&chdl=" + vals1Legend + "&chd=t:" + vals1 + "' />";
    $("chart2").innerHTML = "<img src='http://chart.apis.google.com/chart?cht=bvg&chtt=Current+month+daily&chs=420x150&chco=095487&chxt=x,y&chds=0,5&chxl=0:||||||5|||||10|||||15|||||20|||||25|||||30|||1:||F|D|C|B|A|&chbh=a&chg=20,20,2,5&chxp=1,0,20,40,60,80,100&chd=t:" + vals2 + "' />";
}
    
function handleSave(response) 
{
    // ++++++++++++++++++++
    var arrData = response.split(":");

    var dayParam = arrData[0];
    var gradeParam = arrData[1];
    var grade = parseInt(gradeParam);
    
    // prepare data to publish
    var letr = "A";
    if (grade == 5)
    {
        letr = "A";
    }
    else if (grade == 4)
    {
        letr = "B";
    }
    else if (grade == 3)
    {
        letr = "C";
    }
    else if (grade == 2)
    {
        letr = "D";
    }
    else if (grade == 1)
    {
        letr = "F";
    }
    
    // publish to stream
    // attachment
    var attachment = {};
    var media = new Array();
    var media1 = {};
    media1["type"] = "image";
    media1["src"] = "http://images.x2line.com/apps/daygrader/feed/ball" + grade + ".png";
    media1["href"] = appExternalUrl;
    media[0] = media1;
    attachment["name"] = "daygrader - my grade for " + dayParam;
    attachment["href"] = appExternalUrl;
    attachment["caption"] = "{*actor*} gave grade " + letr + " for " + dayParam;
    attachment["media"] = media;
    
    // actionlinks
    var actionLinks = new Array();
    var actionLink1 = {};
    actionLink1["text"] = "Go to daygrader";
    actionLink1["href"] = appExternalUrl;
    actionLinks[0] = actionLink1;
    
    if ($("chkShare").checked)
    {
        FB.Connect.streamPublish(comment, attachment, actionLinks, null, null, publishCallback);
    }
    else
    {
        publishCallback();
    }
}

function publishCallback()
{
    document.location.href = location.href;    
}
    
function handleInsertUser(response) 
{
    // do nothing
}
    
function handleGetGrade(response) 
{
    // change markup
    var divGrade = $("divGrade");
    divGrade.style.backgroundColor = "#ffff99";
    divGrade.style.border = "#ee0000 1px solid";
    divGrade.innerHTML = response;
}

function postData(url, vars, callbackFunction)
{
    var oXmlHttp = GetXmlHttp();
    oXmlHttp.open("POST", url, true);
    oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    oXmlHttp.setRequestHeader("Content-Length", vars.length);
    oXmlHttp.setRequestHeader("Connection", "close");
    
    oXmlHttp.onreadystatechange = function()
    {
        if ((oXmlHttp.readyState == 4) && (oXmlHttp.status == 200))
        {
            if (oXmlHttp.responseText)
            {
                eval(callbackFunction(oXmlHttp.responseText));
            }
        }
    };
    
    oXmlHttp.send(vars);
}

function getData(url, callbackFunction)
{
    var oXmlHttp = GetXmlHttp();
    oXmlHttp.open("GET", url, true);
    oXmlHttp.onreadystatechange = function()
    {
        if ((oXmlHttp.readyState == 4) && (oXmlHttp.status == 200))
        {
            if (oXmlHttp.responseText)
            {
                eval(callbackFunction(oXmlHttp.responseText));
            }
        }
    };
    
    oXmlHttp.send(null);
}

// Create and return XmlHttp object
function GetXmlHttp()
{
    var oXmlHttp = null;

    if (window.XMLHttpRequest)
    {
        oXmlHttp = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    return oXmlHttp;
}

// select friends to invite
function showInviteFriendsDialog()
{
    var api = FB.Facebook.apiClient;   
    api.fql_query("SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=" + currentUserId + ") and is_app_user=1", function(result, ex) {   
  
        var str = "";
        for (var i = 0; i < result.length; i++)   
        {   
            str += result[i].uid + ",";
        }

        var excludeIds = '';
        if (str.length > 0)
        {
            str = str.substring(0, str.length - 1);
            excludeIds = 'exclude_ids="' + str + '"';
        }

        //
        // produce to selector   
        var actn = "http://www.daygrader.com/facebook/fbcanvas.aspx";

        var the_fbml = '<fb:fbml><fb:request-form action="' + actn + '" method="POST" invite="true" type="daygrader" content=""><fb:fbml-attribute name="content"><fb:intl>Come be friends with me on daygrader - give a letter grade to your day today. A, B, C, D or F! &lt;fb:req-choice url=&quot;' + appExternalUrl + '&quot; label=&quot;Confirm&quot; /&gt;</fb:intl></fb:fbml-attribute>  \
                    <fb:multi-friend-selector rows="3" cols="4" max="60" showborder="true" email_invite="false" ' + excludeIds + ' bypass="cancel" actiontext="Invite Your Facebook Friends">  \
                </fb:request-form></fb:fbml>';
        var dlg = new FB.UI.FBMLPopupDialog('Invite Friends', the_fbml);
        dlg.setContentWidth(625);
        dlg.setContentHeight(400);
        dlg.set_placement(FB.UI.PopupPlacement.topCenter);
        dlg.show();  
    });
}

function $(id)
{
    return document.getElementById(id);
}
