﻿/**
2 * Copyright 2008 MySpaceChina
3 * <DISCLAIMER HERE>
4 * @fileoverview requestShareApp implementation beta1 for MySpace China; everything needed to query/update MySpace API data via OpenSocial interface.
5 *
6 * @author fanyang [_at_] myspace [_dot_] cn (Yang Fan)
8 */

MyOpenSpace.EndPoint.ShareApp = {
    Viewer: "/opensocial/v1/VIEWER/shareapp/{KEYS}.json?" + MyOpenSpace.EndPoint.AuthorizationQueryString
}
MyOpenSpace.requestShareApp = function(recipients, reason, opt_callback){
    var url, responseItem;
    if (recipients) {
        url = this.endPoint_.ShareApp.Viewer.replace("{KEYS}", recipients.join(";"));
    }
    else {
        if (opt_callback) 
            opt_callback({
                "errorCode": opensocial.ResponseItem.Error.INTERNAL_ERROR,
                "errorMessage": "No target to share"
            });
        return false;
    }
    MyOpenSpace.Ajax.sendRequest({
        method: "POST",
        endPoint: url,
        params: gadgets.io.encodeValues(reason.fields_),
        osToken_: this.osToken_
    }, "ShareApp", complete_, errored_, true);
    function complete_(response, type, opt_key){
        opt_callback(response, false, opt_key);
        return;
    }
    function errored_(response, type, opt_key){
        opt_callback(response, true, opt_key);
        return;
    }
}
opensocial.Container.prototype.requestShareApp = MyOpenSpace.requestShareApp;
/**
add RequestCreateActivity function
*/


MyOpenSpace.EndPoint.Activity = {
    Viewer: "/opensocial/v1/VIEWER/activities.json?" + MyOpenSpace.EndPoint.AuthorizationQueryString,
    Owner: "/opensocial/v1/OWNER/activities.json?" + MyOpenSpace.EndPoint.AuthorizationQueryString
}

MyOpenSpace.MySpaceContainer.prototype.requestCreateActivity = function(activity, priority, opt_callback) {
    var title = activity.getField(opensocial.Activity.Field.TITLE) || activity.getField(opensocial.Activity.Field.TITLE_ID)
    var url, responseItem;
    opt_callback = opt_callback || function() {}
    if (title != null && title.replace(" ", "") != "") {
        url = this.endPoint_.Activity.Viewer;
    }
    else {
        if (opt_callback)
            opt_callback({
                "errorCode": opensocial.ResponseItem.Error.INTERNAL_ERROR,
                "errorMessage": "No Acitivies to Send"
            });
        return false;
    }
    var params = {};
    for (var i in activity.fields_) {
        if (i == opensocial.Activity.Field.MEDIA_ITEMS) {
            if (!params[opensocial.Activity.Field.MEDIA_ITEMS]) params[opensocial.Activity.Field.MEDIA_ITEMS] = {};
            params[opensocial.Activity.Field.MEDIA_ITEMS] = activity.getField(opensocial.Activity.Field.MEDIA_ITEMS);
        }
        else {
            if (!params[opensocial.Activity.Field.TEMPLATE_PARAMS]) params[opensocial.Activity.Field.TEMPLATE_PARAMS] = {};
            if (i == "appparams") params[opensocial.Activity.Field.TEMPLATE_PARAMS][i] = escape(JSON.stringify(activity.getField(i)));
            else params[opensocial.Activity.Field.TEMPLATE_PARAMS][i] = activity.getField(i);
        }
    }

    params[opensocial.Activity.Field.MEDIA_ITEMS] = JSON.stringify(params[opensocial.Activity.Field.MEDIA_ITEMS]) || "";
    params[opensocial.Activity.Field.TEMPLATE_PARAMS] = JSON.stringify(params[opensocial.Activity.Field.TEMPLATE_PARAMS]) || "";
    params["templateid"] = 1;
    MyOpenSpace.Ajax.sendRequest({
        method: "POST",
        endPoint: url,
        params: gadgets.io.encodeValues(params),
        osToken_: this.osToken_
    }, "INSERT_ACTIVITIES", complete_, errored_, true);
    function complete_(response, type, opt_key) {
        opt_callback(response, false, opt_key);
        return;
    }
    function errored_(response, type, opt_key) {
        opt_callback(response, true, opt_key);
        return;
    }
}

MyOpenSpace.requestInvite = function() {
    if (gadgets.views.getCurrentView().getName() == MyOpenSpace.View.Field.CANVAS) {
        var params_ = gadgets.views.getParams();
        _IFPC.call(
        params_.panelId,
        "requestInvite",
        [params_.appid, params_.ownerid, null, null],
        params_.remoteRelay,
        null,
        params_.localRelay,
        null);
    }
}


/**
* Migrating OpenSocial v0.7 gadgets to v0.8
*/
opensocial.IdSpec = function(opt_params) {
    this.fields_ = opt_params || {};
};
opensocial.IdSpec.Field = {
    USER_ID: 'userId',
    GROUP_ID: 'groupId',
    NETWORK_DISTANCE: 'networkDistance'
};

opensocial.IdSpec.PersonId = {
    OWNER: 'OWNER',
    VIEWER: 'VIEWER'
};
opensocial.IdSpec.GroupId = {
    SELF: 'SELF',
    FRIENDS: 'FRIENDS',
    ALL: 'ALL'
};

opensocial.IdSpec.prototype.getField = function(key, opt_params) {
    return opensocial.Container.getField(this.fields_, key, opt_params);
};
opensocial.IdSpec.prototype.setField = function(key, data) {
    return this.fields_[key] = data;
};
opensocial.IdSpec.prototype.toString = function() {
    return this.fields_[opensocial.IdSpec.Field.USER_ID] + ((this.fields_[opensocial.IdSpec.Field.GROUP_ID]) ? "_" + this.fields_[opensocial.IdSpec.Field.GROUP_ID] : "");
}

/**
 * @static
 * @class
 * The enum keys used by the lookingFor field.
 * <p><b>See also:</b>
 * <a href="opensocial.Person.Field.html">
 * opensocial.Person.Field.LookingFor</a>
 * </p>
 *
 * @name opensocial.Enum.LookingFor
 */
opensocial.Enum.LookingFor = {
  /** @member opensocial.Enum.LookingFor */
  DATING : 'DATING',
  /** @member opensocial.Enum.LookingFor */
  FRIENDS : 'FRIENDS',
  /** @member opensocial.Enum.LookingFor */
  RELATIONSHIP : 'RELATIONSHIP',
  /** @member opensocial.Enum.LookingFor */
  NETWORKING : 'NETWORKING',
  /** @member opensocial.Enum.LookingFor */
  ACTIVITY_PARTNERS : 'ACTIVITY_PARTNERS',
  /** @member opensocial.Enum.LookingFor */
  RANDOM : 'RANDOM'
};

opensocial.MediaItem = opensocial.Activity.MediaItem;
