/**
 *
 * MySpace Javascript.
 *
 * $Id: $
 *
 * @copyright   (c) 2008 Project Two Fifty Inc.
 *
 */

var pageLoaded = false;
var maxMakeRequestRetries = 2;

function secondCountDownTimer(secondsLeft, countdownId, pageLoadTime, reloadId, reloadPage, extendedVersion)
{
    // is this a call from a past page?
    if (pageLoadTime != pageLoadTime_global) { return; }
    if (typeof extendedVersion === 'undefined') { extendedVersion = false; }

    if ($('#'+countdownId).length == 0) { return; }

    if (secondsLeft <= 0)
    {
    	if (reloadPage == '') { return; }

    	var app_install_state   = getInstallState();
        var params = getMakeRequestParams('ajax=1&installState=' + app_install_state);

        if ((reloadPage.length != 0) && (reloadPage[reloadPage.length - 1] !== '/')) { reloadPage += '/'; }

        // reload reloadId with the timeout url passed in
        gadgets.io.makeRequest(rootURL + reloadPage,
                function(content, proxyUrl, errored)
                {
                    if (content && content.text) { $('#'+reloadId).html(content.text); }
                    else { /* somekind of error */ }
                }
              , params);
    }
    else
    {
        secondsLeft--;
        var seconds = (secondsLeft % 60);

        var minutesLeft = Math.floor(secondsLeft / 60);
        var minutes = (minutesLeft % 60);

        var hoursLeft = Math.floor(minutesLeft / 60);
        var hours = (hoursLeft % 24);

        var days = Math.floor(hoursLeft / 24);

        if(extendedVersion)
        {
            if(days == 0) { days = "00"; } else { days = addZero(days); }
            if(hours == 0) { hours = "00"; } else { hours = addZero(hours); }
            if(minutes == 0) { minutes = "00"; } else { minutes = addZero(minutes); }
            if(seconds == 0) { seconds = "00"; } else { seconds = addZero(seconds); }

            $('#'+countdownId).html(days + ":" + hours + ":" + minutes + ":" + seconds);
        }
        else
        {
            hours = hoursLeft;

            if(hours > 0)   { $('#'+countdownId).html(hours + ":" + addZero(minutes) + ":" + addZero(seconds)); }
            else            { $('#'+countdownId).html(minutes + ":" + addZero(seconds)); }
        }

        setTimeout(function() {secondCountDownTimer(secondsLeft, countdownId, pageLoadTime, reloadId, reloadPage, extendedVersion);} , 1000);
    }
} // secondCountDownTimer()


function sendApplicationActivity(templateName, templateParams, mediaItemLink)
{
    if ( typeof mediaItemLink === 'undefined' ) { mediaItemLink = ''; }

    var mediaItemArray = [];

    if (mediaItemLink != '')
    {
        mediaItemArray.push(opensocial.newMediaItem("", mediaItemLink));
    }
    else { }

    var params = {};
    params[opensocial.Activity.Field.TITLE_ID]          = templateName;
    params[opensocial.Activity.Field.TEMPLATE_PARAMS]   = templateParams;
    params[opensocial.Activity.Field.MEDIA_ITEMS]       = mediaItemArray;

    var activity = opensocial.newActivity(params);
    opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH,
        function(response)
        {
            var result = true;

            if(response.hadError() || !response || -1 === response.getData())
            {
               result = false;
               failure_page = 'myspace/publish_activity_error/';
            }
            else
            {
                if (1 === response.getData()) { /* the user clicked "publish" */ }
                else if (0 === response.getData())
                {
                    //document.getElementById("debug").innerHTML = "CANCELLED";
                    // the user clicked "cancel"
                    result = false;
                    failure_page = 'myspace/publish_activity_cancelled/';
                }
            }

            // did the activity not get published, either user cancelled or error
            if (result == false)
            {
            	var app_install_state   = getInstallState();
                var params              = getMakeRequestParams('ajax=1&installState=' + app_install_state);

                if ((failure_page.length != 0) && (failure_page[failure_page.length - 1] !== '/')) { failure_page += '/'; }

                gadgets.io.makeRequest(rootURL + failure_page, function(content) {}, params);
            }
        });
}

// general post makerequest params
function getMakeRequestParams(postData)
{
    var params = {};
    params[gadgets.io.RequestParameters.METHOD]         = gadgets.io.MethodType.POST;
    params[gadgets.io.RequestParameters.POST_DATA]      = postData;
    params[gadgets.io.RequestParameters.CONTENT_TYPE]   = gadgets.io.ContentType.TEXT;
    params[gadgets.io.RequestParameters.AUTHORIZATION]  = gadgets.io.AuthorizationType.SIGNED;
    return params;
}

function getInstallState()
{
    // get the install state
    switch(gadgets.views.getParams()["installState"])
    {
        case "0": app_install_state="0"; break; // APP_NOT_INSTALLED
        case "1": app_install_state="1"; break; // APP_INSTALLED
        case "2": app_install_state="2"; break; // APP_JUST_INSTALLED
        default: app_install_state="99"; break; // APP_INSTALL_STATE_UNKNOWN
    }
    return app_install_state;
}

// home surface for myspace
function getHomeSurface(page, updateDivId)
{
    if (page.substr((page.length - 1), 1) != '/') { page = page + '/'; }

	var app_install_state   = getInstallState();
    var params = getMakeRequestParams('installState=' + app_install_state);
    var fullRequestedUrl = rootURL + page;

    makeRequestWithRetry(fullRequestedUrl, params, updateDivId, 0, '', false)
}

// profile surface for myspace
function getProfileSurface(page, updateDivId)
{
    if (page.substr((page.length - 1), 1) != '/') { page = page + '/'; }

	var app_install_state   = getInstallState();
    var params = getMakeRequestParams('installState=' + app_install_state);
    var fullRequestedUrl = rootURL + page;

    makeRequestWithRetry(fullRequestedUrl, params, updateDivId, 0, '', false)
}

function getContent(page, extraParams, updateDivId)
{
	// check for optional params
	if ( typeof extraParams === 'undefined' )    { extraParams = 'ajax=1'; }
	if ( typeof updateDivId === 'undefined' )    { updateDivId = 'inner-container'; }

	var app_install_state = getInstallState();

    if (page == '') { page = 'home/'; }
    else if (page.substr((page.length - 1), 1) != '/') { page = page + '/'; }

    if (extraParams.search('ajax=') == -1) { extraParams = extraParams + '&ajax=1'; }

    if (extraParams != '' && extraParams.charAt(0) != '&') { extraParams = '&' + extraParams; }

    var params = getMakeRequestParams('installState=' + app_install_state + extraParams);

    makeRequestBasic((rootURL + page), params, updateDivId);

} // end of getContent()

function makeRequestBasic(fullRequestedUrl, params, updateDivId)
{
        gadgets.io.makeRequest(fullRequestedUrl,
            function(content, proxyUrl, errored)
            {
                if (content && content.text)
                {
                    if (updateDivId != '')
                    {
                        $('#'+updateDivId).css('display', 'block');
                        $('#'+updateDivId).html(content.text);
                    }
                }
                else
                {
                    if (errored == true)
                    {
                        //setTimeout(function() { makeRequestBasic(fullRequestedUrl, params, updateDivId);}, 1000); // retry if errored
                    }
                    else
                    {
                        if (updateDivId != '') { $('#'+updateDivId).css('display', 'none'); }
                    }
                }
            }
          , params);
}

/**
 * Get page through ajax load. POST ajax signed variables to myspace app.
 */
function getPage(page, extraParams, updateDivId, hideDiv, jumpToTop)
{
	// check for optional params
	if ( typeof extraParams === 'undefined' )    { extraParams = 'ajax=1'; }
	if ( typeof updateDivId === 'undefined' )    { updateDivId = 'inner-container'; }
	if ( typeof hideDiv === 'undefined' )        { hideDiv = false; }
	if ( typeof jumpToTop === 'undefined' )      { jumpToTop = true; }

	var app_install_state = getInstallState();

    if (page.indexOf('#') != -1) { var pageSplitOnAnchor = page.split('#'); page = pageSplitOnAnchor[0]; var pageAnchor = pageSplitOnAnchor[1]; }
    else { var pageAnchor = ''; }

    if (page == '') { page = 'home/'; }
    else if (page.substr((page.length - 1), 1) != '/') { page = page + '/'; }

    if (extraParams.search('ajax=') == -1) { extraParams = extraParams + '&ajax=1'; }

    if (extraParams != '' && extraParams.charAt(0) != '&') { extraParams = '&' + extraParams; }

    var params = getMakeRequestParams('installState=' + app_install_state + extraParams);

    pageLoaded          = false;
    var pageLoadTime    = pageLoadTime_global;

    if (app_install_state != "0" && jumpToTop != false) { topOfApplication(); }

    makeRequestWithRetry((rootURL + page), params, updateDivId, 0, pageAnchor, hideDiv)

    setTimeout(function() { if (makeRequestInProgress == true && pageLoadTime == pageLoadTime_global) { $('#ajax-load-overlay').css('display', 'block'); makeRequestInProgress = false; }}, 1000);

} // end of getPage()


var makeRequestInProgress = false;
function makeRequestWithRetry(fullRequestedUrl, params, updateDivId, numRetry, pageAnchor, hide)
{
    if ( makeRequestInProgress == true )    { return false; }
    if (numRetry > maxMakeRequestRetries)   { return false; }
//	if ( typeof pageAnchor === 'undefined' ){ pageAnchor = ''; }
//	if ( typeof hide === 'undefined' )      { hide = false; }

    makeRequestInProgress = true;

    gadgets.io.makeRequest(fullRequestedUrl,
            function(content, proxyUrl, errored)
            {
                makeRequestInProgress = false;
                pageLoaded = true;

                if (content && content.text)
                {

                    $('#ajax-load-overlay').css('display', 'none');

                    if (updateDivId != '')
                    {
                        $('#'+updateDivId).css('display', 'block');
                        $('#'+updateDivId).html(content.text);
                    }

                    //if (pageAnchor != '' ) { setTimeout(function() { $('#'+pageAnchor).focus(); }, 200); /*delay required for IE*/  }
                    if (pageAnchor != '' )
                    {
            			var destination = $('#'+pageAnchor).offset().top;
            			$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, 300, function() {
            				window.location.hash = '#'+pageAnchor;
            			});
                    }
                }
                else
                {
                    if (errored == true)
                    {
                        //setTimeout(function() { makeRequestWithRetry(fullRequestedUrl, params, updateDivId, numRetry + 1, pageAnchor, hide);}, 1000); // retry if errored
                    }
                    else
                    {
                        $('#ajax-load-overlay').css('display', 'none');

                        if (updateDivId != '' && hide == true) { $('#'+updateDivId).css('display', 'none'); }
                    }
                }
            }
          , params);
}


function init()
{
    gadgets.window.adjustHeight(10000);
    os = opensocial.Container.get();
    var params = {};
    params[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [opensocial.Person.Field.HAS_APP];
    dataReqObj = os.newDataRequest();
    var viewerReq = os.newFetchPersonRequest(opensocial.IdSpec.PersonId.VIEWER, params);
    dataReqObj.add(viewerReq, "viewer");
    dataReqObj.send(verifyInstalled);
}

function verifyInstalled(data)
{
    // do we have an error?
    if (!data)
    {
        // had error
    }
    else if (data.hadError())
    {
        var viewerResponse = data.get("viewer");  // opensocial 0.8
        switch(viewerResponse.getErrorCode())
        {
            // There was an error on the server.
            case opensocial.ResponseItem.Error.INTERNAL_ERROR:
                break;

            // There was a permissions issue: most likely the user does not have the app installed.
            case opensocial.ResponseItem.Error.UNAUTHORIZED:
                gadgets.views.getParams()["installState"] = "0";
                break;

            // There was an error in the Container.
            case opensocial.ResponseItem.Error.BAD_REQUEST:
                break;

            // The Container was unable to contact the server.
            case opensocial.ResponseItem.Error.FORBIDDEN:
                break;

            // MySpace has not implement this particular OpenSocial interface.
            case opensocial.ResponseItem.Error.NOT_IMPLEMENTED :
                break;
        }
    }  //No error. Must mean user has app installed...
    else
    {
        var viewer = data.get("viewer").getData();

        //this no longer works in ie for installing off of canvas
//        var has_app = viewer.getField(opensocial.Person.Field.HAS_APP);
//        if (has_app != true) {gadgets.views.getParams()["installState"] = "0";}

        if (!viewer)
        {
            gadgets.views.getParams().installState = 0;
        }
        else if (viewer && !(gadgets.views.getParams().installState > 0))
        {
            gadgets.views.getParams().installState = 1;
        }
    }


    var prefs = new gadgets.Prefs();
    var extraParams = 'os_lang=' + prefs.getLang();

    if (typeof gadgets.views.getParams()["t_1"] === 'undefined') { }
    else { extraParams = extraParams + '&t_1=' + gadgets.views.getParams()["t_1"]; }

    if (typeof gadgets.views.getParams()["t_2"] === 'undefined') { }
    else { extraParams = extraParams + '&t_2=' + gadgets.views.getParams()["t_2"]; }

    if (typeof gadgets.views.getParams()["join_id"] === 'undefined') { }
    else { extraParams = extraParams + '&join_id=' + gadgets.views.getParams()["join_id"]; }

    if (typeof gadgets.views.getParams()["os_action_params"] === 'undefined') { }
    else { extraParams = extraParams + '&os_action_params=' + gadgets.views.getParams()["os_action_params"]; }

	var app_install_state = getInstallState();

    if (extraParams != '' && extraParams.charAt(0) != '&') { extraParams = '&' + extraParams; }

    var params = getMakeRequestParams('installState=' + app_install_state + extraParams);

    makeRequestWithRetry((rootURL + 'home/'), params, 'myspace-container', 0, '', false)
}

var bulkMaxInvites = 20;
var bulkFriendRequestIndex = 0;
var bulkMaxFriendRequests = 100;
var bulkInvitesUserIdArray = new Array();
var sendBulkInviteComplete = false;
var totalFriends = -1;
var totalFriendsInvited = 0;

function sendBulkInvite(bulkInviteUserIdArrayIndex, requestedPage, reloadId, bulkInviteMessage, randomInvites)
{
    // is this a new bulk invite?
    if (bulkInviteUserIdArrayIndex == 0) { bulkInvitesUserIdArray = new Array(); }
    if (typeof randomInvites === 'undefined') { randomInvites = false; }
    if (typeof reloadId === 'undefined' ) { reloadId = 'inner-container'; }

    var request = opensocial.newDataRequest();

    var params = {};
    params[opensocial.IdSpec.Field.USER_ID] = opensocial.IdSpec.PersonId.VIEWER;
    params[opensocial.IdSpec.Field.NETWORK_DISTANCE] = 1;

    var idspec = opensocial.newIdSpec(params);

    if (randomInvites == true && totalFriends > -1)
    {
        var maxPages = Math.floor(totalFriends/bulkMaxFriendRequests);
        var page = Math.floor(Math.random()*(maxPages+1));
    }
    else
    {
        var page = Math.floor(bulkFriendRequestIndex/bulkMaxFriendRequests);
    }

    params[opensocial.DataRequest.PeopleRequestFields.FIRST] = (page*bulkMaxFriendRequests) + 1;
    params[opensocial.DataRequest.PeopleRequestFields.MAX] = bulkMaxFriendRequests;

    request.add(request.newFetchPeopleRequest(idspec, params), "friends");

    request.send(
        function(response)
        {
            if (response.hadError())
            {
                var response = response.get("friends");
                switch(response.getErrorCode())
                {
                    // There was an error on the server.
                    case opensocial.ResponseItem.Error.INTERNAL_ERROR: errorString = 'MySpace Error'; break;

                    // There was a permissions issue: most likely the user does not have the app installed.
                    case opensocial.ResponseItem.Error.UNAUTHORIZED: errorString = 'Not Authorized'; break;

                    case opensocial.ResponseItem.Error.BAD_REQUEST: // There was an error in the Container.
                    case opensocial.ResponseItem.Error.FORBIDDEN: // The Container was unable to contact the server.
                        errorString = 'MySpace Error';
                        break;

                    // MySpace has not implement this particular OpenSocial interface.
                    case opensocial.ResponseItem.Error.NOT_IMPLEMENTED : errorString = 'MySpace Error'; break;

                    default: errorString = 'Unknown Error'; break;
                }
                // retry?
                document.getElementById(reloadId).innerHTML = 'MySpace Error - <a href="" onclick="sendBulkInvite(bulkInviteUserIdArrayIndex, requestedPage, reloadId, bulkInviteMessage); return false;">Click here to try again</a>';
//                errorString += ' - <a href="" onclick="sendBulkInvite(bulkInvitesUserIdArray); return false;">retry invite</a>';
//                document.getElementById('debug').innerHTML = errorString + response.getErrorMessage();
            }
            else
            {
                friendsArray = response.get("friends").getData().asArray();
                totalFriends = response.get('friends').getData().getTotalSize();

                var totalFriendsReturned = friendsArray.length;

                // there is no friends returned
                if (totalFriendsReturned == 0)
                {
                    sendBulkInviteComplete = true;
                    // do we have user ids to invite?
                    if (bulkInviteUserIdArrayIndex > 0)
                    {
                        sendInvites(bulkInvitesUserIdArray, requestedPage, reloadId, bulkInviteMessage, '&bulk_invites_completed=1');
                    }
                    else // all friends have been invited
                    {
                        getPage(requestedPage, 'bulk_invites_completed=1', reloadId);
                    }

                    return;
                }

                if (randomInvites == true)
                {
                    if (totalFriendsReturned > bulkMaxInvites)
                    {
                        var startIndex = Math.floor(Math.random()*((totalFriendsReturned - bulkMaxInvites)+1));
                    }
                    else
                    {
                        var startIndex = 0;
                    }
                }
                else
                {
                    var startIndex = bulkFriendRequestIndex % bulkMaxFriendRequests;
                }
                for (var i=startIndex; i < totalFriendsReturned; i++)
                {
                    if (randomInvites == false)
                    {
                        bulkFriendRequestIndex++;
                    }
                    id      = friendsArray[i].getId().split(':');
                    userId  = id[1];
                    hasApp  = friendsArray[i].getField(opensocial.Person.Field.HAS_APP);

                    if (hasApp == false && userId != 6221)
                    {
                        bulkInvitesUserIdArray[bulkInviteUserIdArrayIndex] = userId;
                        bulkInviteUserIdArrayIndex++;
                    }

                    if (bulkInviteUserIdArrayIndex >= bulkMaxInvites) { break; }
                }

                if ((bulkInviteUserIdArrayIndex < bulkMaxInvites) && totalFriendsReturned == bulkMaxFriendRequests)
                {
                    sendBulkInvite(bulkInviteUserIdArrayIndex, requestedPage, reloadId, bulkInviteMessage);
                }
                else if (bulkInviteUserIdArrayIndex >= bulkMaxInvites)
                {
                    sendInvites(bulkInvitesUserIdArray, requestedPage, reloadId, bulkInviteMessage, '&bulk_invites_completed=0');
                }
                else // if (totalFriendsReturned < bulkMaxFriendRequests && bulkInviteUserIdArrayIndex > 0)
                {
                    // no more friends to invite, send out invites
                    sendInvites(bulkInvitesUserIdArray, requestedPage, reloadId, bulkInviteMessage, '&bulk_invites_completed=1');
                }

            }
        }
    );
} // sendBulkInvite()


function sendInvites(userIds, requestedPage, reloadId, invite_message, extraParams)
{
//    var params = {};
//    params[opensocial.Message.Field.TITLE] = 'Play Now!';

    if ( typeof reloadId === 'undefined' ) { reloadId = 'inner-container'; }
    var message = opensocial.newMessage(invite_message);
    message.setField(opensocial.Message.Field.TITLE, 'Play Now!');

    var sent_invites    = new Array();
    var errored_invites = new Array();
    var cancelled_invites = new Array();
    var sent_invites_index = 0;
    var errored_invites_index = 0;
    var cancelled_invites_index = 0;

    opensocial.requestShareApp(userIds, message,
        function (response)
        {
            for(var i = 0; i < userIds.length; i++)
            {
                if (response && !response.hadError())
                {
                    if (response.getData() === 1) { sent_invites[sent_invites_index++] = userIds[i]; } // Invite sent successfully
                    else { cancelled_invites[cancelled_invites_index++] = userIds[i]; } // user cancelled
                }
                else if (response.hadError()) { errored_invites[errored_invites_index++] = userIds[i]; }
            }

            // add sent invite array to the post params
            if (sent_invites.length > 0)
            {
                for (i=0; i < sent_invites.length; i++) { extraParams += '&sent_invites[]=' + sent_invites[i]; }
            }
            // add cancelled invite array to the post params
            if (cancelled_invites.length > 0)
            {
                for (i=0; i < cancelled_invites.length; i++) { extraParams += '&cancelled_invites[]=' + cancelled_invites[i]; }
            }
            // add errored invite array to the post params
            if (errored_invites.length > 0)
            {
                for (i=0; i < errored_invites.length; i++) { extraParams += '&errored_invites[]=' + errored_invites[i]; }
            }
            //document.getElementById("debug").innerHTML += '<br />PARAMETERS' + extraParams + '<br />';
            getPage(requestedPage, extraParams, reloadId);
        } );
}

var friendsArray_global = new Array();
var friendsCount_global = 0;

var giftedIdsArray_global = new Array();
var pendingIdsArray_global = new Array();
var acceptedIdsArray_global = new Array();
var numFriendsSelected = 0;
var maxNumFriends_global = 0;
var filterType_global = 'ALL';
var maxAllowedSelections_global = -1;
var viewType_global = 'text';
var reloadDivId_global = 'friend_load_div';

var invitePostParam_global = '';
var inviteMessageText_global = '';
var inviteFormId_global = '';

function switchViewPreference(typeVal)
{
    if(viewType_global == 'text')
    {
        viewType_global = 'graphical';
    }
    else
    {
        viewType_global = 'text';
    }
    filterType_global = typeVal;
    getFriendInviteForm();
}

function getFriendInviteForm()
{
    if(friendsArray_global.length == 0)
    {
        var params = {};
        params[opensocial.DataRequest.PeopleRequestFields.MAX] = 1;
        params[opensocial.DataRequest.PeopleRequestFields.FIRST] = 1;
        params[opensocial.DataRequest.PeopleRequestFields.FILTER] = opensocial.DataRequest.FilterType.ALL;

        var request = opensocial.newDataRequest();
        var idSpec      = opensocial.newIdSpec({'userId':'VIEWER', 'groupId':'FRIENDS'});
        var friendsReq  = request.newFetchPeopleRequest(idSpec, params);

        request.add(friendsReq, "friend_count");
        request.send(getFriendInviteFormResponse);
    }
    else
    {
        var contentHtml = '';
        friendsCount_global = 0;
        for(var pageIndex = 0; pageIndex < friendsArray_global.length; pageIndex++)
        {
            contentHtml += getFriendInviteContent(friendsArray_global[pageIndex]);
        }
        reloadInviteData(contentHtml);
    }
}

function getFriendInviteFormResponse(friendCountData)
{
    totalFriendCount = friendCountData.get("friend_count").getData().getTotalSize();
    var params = {};
    params[opensocial.DataRequest.PeopleRequestFields.MAX] = maxNumFriends_global;
    params[opensocial.DataRequest.PeopleRequestFields.FILTER] = opensocial.DataRequest.FilterType.ALL;

    var request = opensocial.newDataRequest();
    var idSpec      = opensocial.newIdSpec({'userId':'VIEWER', 'groupId':'FRIENDS'});
    var friendsReq  = '';
    var numberOfPages = Math.ceil(totalFriendCount/maxNumFriends_global);

    for(var pageIndex = 0; pageIndex < numberOfPages; pageIndex++)
    {
        params[opensocial.DataRequest.PeopleRequestFields.FIRST] = maxNumFriends_global*(pageIndex) + 1;
        friendsReq  = request.newFetchPeopleRequest(idSpec, params);
        request.add(friendsReq, 'viewer_friends' + pageIndex);
    }
    request.send(
        function (friendsData)
        {
            if (friendsData.hadError())
            {
                var response = friendsData.get("viewer_friends");  // opensocial 0.8
                switch(response.getErrorCode())
                {
                    case opensocial.ResponseItem.Error.INTERNAL_ERROR: errorString = 'MySpace Error'; break;
                    case opensocial.ResponseItem.Error.UNAUTHORIZED: errorString = 'Not Authorized'; break;
                    case opensocial.ResponseItem.Error.BAD_REQUEST:
                    case opensocial.ResponseItem.Error.FORBIDDEN:
                        errorString = 'MySpace Error';
                        break;
                    case opensocial.ResponseItem.Error.NOT_IMPLEMENTED : errorString = 'MySpace Error'; break;
                    default: errorString = 'Unknown Error'; break;
                }

                errorString += ' - <a href="" onclick="getFriendInviteForm(); return false;">Retry this Page</a>';
                $('#'+reloadDivId_global).html(errorString);
            }
            else
            {
                var contentHtml = '';
                friendsCount_global = 0;
                for(var pageIndex = 0; pageIndex < numberOfPages; pageIndex++)
                {
                    var viewerFriends = friendsData.get("viewer_friends" + pageIndex).getData().asArray();

                    contentHtml += getFriendInviteContent(viewerFriends);

                    //assign to stored variable
                    friendsArray_global[pageIndex] = viewerFriends;
                }
                reloadInviteData(contentHtml);
            }
        });
}

function reloadInviteData(contentHtml)
{
    var html = '';
    html += '<ul id="filterdiv" class="' + viewType_global + '">';
    html += contentHtml;
    html += '</ul><div style="clear:both;"></div>';

    var scriptString = '\<script type="text/javascript"\>';
    scriptString += '$(document).ready(function(){';

    scriptString += '$(".invite-select").click(function(){' +
			'if($(this).hasClass("hidden")) { $(this).removeClass("hidden"); var data = this.id.split("_"); removeFormField(document.getElementById("friendform_" + data[1]));}'+
			'else { if(maxAllowedSelections_global == -1 || numFriendsSelected < maxAllowedSelections_global) { $(this).addClass("hidden"); var data = this.id.split("_"); addFormField(data[1],$("#friendname_" + data[1]).text()); '+
			'if (numFriendsSelected == bulkMaxInvites) { submitInviteForm(\'' + invitePostParam_global + '\', \'' + inviteFormId_global + '\', \'' + inviteMessageText_global + '\'); } } } return false; });';

    scriptString += '$(".selected-item").live("click", function(){ var data = this.id.split("_"); $("#friendbox_" + data[1]).removeClass("hidden"); removeFormField(document.getElementById("friendform_" + data[1])); return false; });';
    scriptString += '});';
    scriptString += '\<\/script\>';

    $('#'+reloadDivId_global).html(html + scriptString);

    $("#filter-count").text(friendsCount_global);
    $("#filter-total").text(friendsCount_global);
}

function getFriendInviteContent(viewerFriends)
{
        var name = '';
        var userId = '';
        var thumbnailUrl = '';
        var html = '';

        for (var i=0; i < viewerFriends.length; i++)
        {
            // myspace.com:6221
            userId = viewerFriends[i].getField(opensocial.Person.Field.ID).split(':');
            userId = userId[1];
            hasApp = viewerFriends[i].getField(opensocial.Person.Field.HAS_APP);

            if(viewType_global == 'graphical')
            {
                thumbnailUrl = viewerFriends[i].getField(opensocial.Person.Field.THUMBNAIL_URL);
            }

            if (viewerFriends[i].getDisplayName() === undefined) { name = ''; }
            else { name = viewerFriends[i].getDisplayName().replace(/[^a-z0-9\s]/i, ''); }

            if (name == '') { name = 'No Name'; }

            if ( (filterType_global == 'ALL' || (filterType_global == 'HAS_APP' && hasApp == true)) && userId != 6221 && pendingIdsArray_global[userId] != 1 && acceptedIdsArray_global[userId] != 1 && giftedIdsArray_global[userId] != 1 )
            {
                if(viewType_global == 'graphical')
                {
                    html += '<li id="friendbox_' + userId + '" class="invite-select" style="background: url(' + thumbnailUrl + ') center center no-repeat;">';
                    html += '<div id="friendname_' + userId + '" class="invite-name">'+ name.substring(0,12) +'</div>';
                    html += '</li>';
                }
                else
                {
                    html += '<li id="friendbox_' + userId + '" class="invite-select invite-text"><div id="friendname_' + userId + '"><input type=\'checkbox\' name="" value="" />&nbsp;'+ name +'</div></li>';
                }
                friendsCount_global++;
            }
            else if (userId != 6221 && acceptedIdsArray_global[userId] == 1)
            {
//                        html += '<div id="friendbox_' + userId + '" class="accepted-invite" style="background: url(' + thumbnailUrl + ') center center no-repeat;">';
//                        html += '<div class="invited-name">'+ name.substring(0,12) +'</div>';
//                        html += '<div class="invite-notice">Accepted</div>';
//                        html += '</div>';
//                        friendsCount_global++;
            }
            else if (userId != 6221 && pendingIdsArray_global[userId] == 1)
            {
                if(viewType_global == 'graphical')
                {
                    html += '<li id="friendbox_' + userId + '" class="invite-select" style="background: url(' + thumbnailUrl + ') center center no-repeat;">';
                    html += '<div id="friendname_' + userId + '" class="invited-name">'+ name.substring(0,12) +'</div>';
                    html += '<div class="invite-notice">Re-Invite</div>';
                    html += '</li>';
                }
                else
                {
                    html += '<li id="friendbox_' + userId + '" class="invite-select invite-text"><div id="friendname_' + userId + '"><input type=\'checkbox\' name="" value="" />&nbsp;'+ name +' (Re-Invite)</div></li>';
                }
                friendsCount_global++;
            }
            else if (userId != 6221 && giftedIdsArray_global[userId] == 1)
            {
                if(viewType_global == 'graphical')
                {
                    html += '<li id="friendbox_' + userId + '" class="invite-inactive" style="background: url(' + thumbnailUrl + ') center center no-repeat;">';
                    html += '<div id="friendname_' + userId + '" class="invited-name">'+ name.substring(0,12) +'</div>';
                    html += '<div class="invite-notice">Already Gifted</div>';
                    html += '</li>';
                }
                else
                {
                    html += '<li id="friendbox_' + userId + '" class="invite-text"><div id="friendname_' + userId + '">'+ name +' (Already Gifted)</div></li>';
                }
                friendsCount_global++;
            }
        }
        return html;
}

function addFormField(id,user_name)
{
	$("#devSelections").append("<li class=\'selected-item\' id=\'friendform_" + id + "\'>" + user_name + "<span style=\'display:none;\'><input type=\'checkbox\' checked name=\'ids[]\' value=\'" + id + "\'></span></li>");

	numFriendsSelected++;
	if(maxAllowedSelections_global != -1 && numFriendsSelected >= maxAllowedSelections_global)
	{
	    $("#selected-count").text(numFriendsSelected + " You have reached the maximum allowed selections.");
	}
	else
	{
	    $("#selected-count").text(numFriendsSelected);
	}
}

function removeFormField(field) { $(field).remove(); numFriendsSelected--;document.getElementById("selected-count").innerText = numFriendsSelected;document.getElementById("selected-count").textContent = numFriendsSelected;}


/***************************************************************************
 SUBMIT FUNCTIONS BELOW NEED TO BE CLEANED UP, ONLY PROTOTYPED
 NEW NOTIFICATION API MAY BE RELEASED SHORTLY (01/03/2009) - EKH
***************************************************************************/


function submitSingleInvite(requestedPage, user_id, invite_message, invite_title)
{
    var extraParams = '';
    var params = {};
    params[opensocial.Message.Field.TITLE] = invite_title;

    var message = opensocial.newMessage(invite_message, params);

    var user_ids        = new Array();
    var sent_invites    = new Array();
    var errored_invites = new Array();
    var cancelled_invites = new Array();

    opensocial.requestShareApp(user_id, message,
        function (response)
        {
            if (response && !response.hadError())
            {
                if (response.getData() === 1) { extraParams = '&sent_invites[]=' +  user_id; } // Invite sent successfully
                else { extraParams = '&cancelled_invites[]=' + user_id; } // user cancelled
            }
            else if (response.hadError()) { extraParams += '&errored_invites[]=' + user_id; }

            //document.getElementById("debug").innerHTML += '<br />PARAMETERS' + extraParams + '<br />';
            getPage(requestedPage, extraParams);
        } );
}


function submitInviteForm(requestedPage, form_id, invite_message, reloadId)
{
    var extraParams = '';
    if ( typeof reloadId === 'undefined' ) { reloadId = 'inner-container'; }

    var user_id_index   = -1;
    var user_ids        = new Array();

    // loop through checked friends and send invites
    $('#' + form_id + ' input:checkbox:checked').each(function(i) { if (i < bulkMaxInvites) { user_ids[i] = $(this).val(); } });

    // if no friends selected throw an error
    if (user_ids.length == 0)
    {
        topOfApplication();
        return;
    }

    sendInvites(user_ids, requestedPage, reloadId, invite_message, extraParams);

} // end of submitInviteForm()



function sendSingleMessageInvite(requestedPage, user_id, type, invite_message, invite_title)
{
    var extraParams = '';
    var params = {};

    if (typeof type === 'undefined') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE; }
    else if (type == 'PRIVATE') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE } // private inbox
    else if (type == 'PUBLIC') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PUBLIC_MESSAGE } // comments
//    else if (type == 'NOTIFICATION') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.NOTIFICATION } // bulletin
    else { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE }


    if (typeof invite_title !== 'undefined' || invite_title != '')
    {
        params[opensocial.Message.Field.TITLE] = invite_title;
    }
    else
    {
        params[opensocial.Message.Field.TITLE] = 'Play Now!';
    }

    var message = opensocial.newMessage(invite_message, params);

    var sent_invites    = new Array();
    var errored_invites = new Array();
    var cancelled_invites = new Array();

    opensocial.requestSendMessage(user_id, message,
        function (response)
        {
            if (response && !response.hadError())
            {
                if (response.getData() === 1) { extraParams = '&sent_invites[]=' +  user_id; } // Invite sent successfully
                else { extraParams = '&cancelled_invites[]=' + user_id; } // user cancelled
            }
            else if (response.hadError()) { extraParams += '&errored_invites[]=' + user_id; }

            //document.getElementById("debug").innerHTML += '<br />PARAMETERS' + extraParams + '<br />';
            getPage(requestedPage, extraParams);
        } );

}

function submitMessageInviteForm(requestedPage, form_id, type, invite_message, invite_title)
{
    var extraParams = '';
    var params = {};

    if (typeof type === 'undefined') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE; }
    else if (type == 'PRIVATE') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE } // private inbox
    else if (type == 'PUBLIC') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PUBLIC_MESSAGE } // comments
//    else if (type == 'NOTIFICATION') { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.NOTIFICATION } // bulletin
    else { params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE }


    if (typeof invite_title !== 'undefined' || invite_title != '')
    {
        params[opensocial.Message.Field.TITLE] = invite_title;
    }
    else
    {
        params[opensocial.Message.Field.TITLE] = 'Play Now!';
    }

    var message = opensocial.newMessage(invite_message, params);

//    var message = opensocial.newMessage("[sender]"+invite_message1+"[app]"+invite_message2, params);

    var user_id_index   = -1;
    var user_ids        = new Array();
    var sent_invites    = new Array();
    var errored_invites = new Array();
    var cancelled_invites = new Array();
    var sent_invites_index = 0;
    var errored_invites_index = 0;
    var cancelled_invites_index = 0;
    var friends_selected = false;

    // loop through checked friends and send invites
    $('#' + form_id + ' input:checkbox:checked').each(function(i) { user_ids[i] = $(this).val(); });

    extraParams += '&inventory_id=' + $('input[name=inventory_id]').val();

    // if no friends selected throw an error
    if (user_ids.length == 0)
    {
        topOfApplication();
        return;
    }

    sendNextMessageInvite =
        function (user_ids, user_id_index)
        {
            user_id_index++;
            if (user_id_index < user_ids.length)
            {
                opensocial.requestSendMessage(user_ids[user_id_index], message,
                    function (response)
                    {
                        if (response && !response.hadError())
                        {
                            if (response.getData() === 1) { sent_invites[sent_invites_index++] = user_ids[user_id_index]; } // Invite sent successfully
                            else { cancelled_invites[cancelled_invites_index++] = user_ids[user_id_index]; } // user cancelled
                        }
                        else if (response.hadError()) { errored_invites[errored_invites_index++] = user_ids[user_id_index]; }

                        if (user_id_index < (user_ids.length-1)) { sendNextMessageInvite(user_ids, user_id_index); }
                        else
                        {
                            // add sent invite array to the post params
                            if (sent_invites.length > 0)
                            {
                                for (i=0; i < sent_invites.length; i++) { extraParams += '&sent_invites[]=' + sent_invites[i]; }
                            }
                            // add cancelled invite array to the post params
                            if (cancelled_invites.length > 0)
                            {
                                for (i=0; i < cancelled_invites.length; i++) { extraParams += '&cancelled_invites[]=' + cancelled_invites[i]; }
                            }
                            // add errored invite array to the post params
                            if (errored_invites.length > 0)
                            {
//                                for (i=0; i < errored_invites.length; i++) { extraParams += '&errored_invites[]=' + errored_invites[i]; }
                                for (i=0; i < errored_invites.length; i++) { extraParams += '&sent_invites[]=' + errored_invites[i]; }
                            }

                            //document.getElementById("debug").innerHTML += '<br />PARAMETERS' + extraParams + '<br />';
                            getPage(requestedPage, extraParams);
                        }
                    } );
           }
        }

    sendNextMessageInvite(user_ids, user_id_index);
}

function sendPrivateMessage(user_id, title, content, requestedPage)
{
    var params = {};

    params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE;    // inbox message
    params[opensocial.Message.Field.TITLE] = title;

    var message = opensocial.newMessage(content, params);

    opensocial.requestSendMessage(user_id, message,
                    function(response)
                    {
                        var id_param = null;

                        if (response && !response.hadError())
                        {
                            // Invite sent successfully
                            if (response.getData() === 1)
                            {
                                id_param = '&sent_id=' + user_id;
                            }
                            else // user cancelled
                            {
                                id_param = '&cancelled_id=' + user_id;
                            }
                        }
                        else if (response.hadError())
                        {
                            id_param = '&errored_id=' + user_id;
                        }
                        getPage(requestedPage, id_param);
                    }
                );
}


function sendPublicMessage(user_id, title, message, requestedPage)
{
    var params = {};

    params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PUBLIC_MESSAGE;    // inbox message
    params[opensocial.Message.Field.TITLE] = title;

    var message = opensocial.newMessage(message, params);

    opensocial.requestSendMessage(user_id, message,
                    function(response)
                    {
                        var message_sent = null;

                        if (response && !response.hadError())
                        {
                            // Invite sent successfully
                            if (response.getData() === 1)
                            {
                                message_result = 'sent';
                            }
                            else // user cancelled
                            {
                                message_result = 'cancelled';
                            }
                        }
                        else if (response.hadError())
                        {
                            message_result = 'error';
                        }
                        getPage(requestedPage, 'message_result='+message_result, 'inner-container');
                    }
                );
}


function sendBulletinMessage(title, message, requestedPage, updateDivId)
{
    if (typeof updateDivId === 'undefined') { updateDivId = 'inner-container'; }


    var params = {};

    params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.NOTIFICATION;    // bulletin message
    params[opensocial.Message.Field.TITLE] = title;


    var bulletinMessage = opensocial.newMessage(message, params);


    opensocial.requestSendMessage(opensocial.IdSpec.PersonId.VIEWER, bulletinMessage,
                    function(response)
                    {
                        var message_sent = 'error';

                        if (response && !response.hadError())
                        {
                            // Bulletin sent successfully
                            if (response.getData() === 1)
                            {
                                message_result = 'sent';
                            }
                            else // user cancelled
                            {
                                message_result = 'cancelled';
                            }
                        }
                        else if (response.hadError())
                        {
                            message_result = 'error';
                        }

                        getPage(requestedPage, 'message_result='+message_result, updateDivId);
                    }
                );
}

function sendNextMessage(user_ids, current_user_id_index)
{

    var params = new Object();

    params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PRIVATE_MESSAGE;    // inbox message
//    params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.NOTIFICATION;     // bulletins
//    params[opensocial.Message.Field.TYPE] = opensocial.Message.Type.PUBLIC_MESSAGE;   // comments

    params[opensocial.Message.Field.TITLE] = "TEST MESSAGE!";

    var message = opensocial.newMessage("TESTMESSAGE: Message Goes Here", params);

    current_user_id_index++;
    if (current_user_id_index < user_ids.length)
    {
        opensocial.requestSendMessage(user_ids[current_user_id_index], message,
                                    function (response)
                                    {
                                        sendNextInvite(user_ids, current_user_id_index);
                                    }
                                   );
   }
}
