var API_USAGE_DISALLOWED = 1;
var API_USAGE_REQUIRED= 2;
var API_USAGE_OPTIONAL= 3;

var API_RESPONSE_USERITEM = 1;
var API_RESPONSE_USERLIST= 2;
var API_RESPONSE_CONTENTITEM= 3;
var API_RESPONSE_CONTENTLIST= 4;
var API_RESPONSE_EVENTLIST= 5;
var API_RESPONSE_HTML= 6;
var API_RESPONSE_SUCCESS = 7;
var API_RESPONSE_BOOLEAN = 8;
var API_RESPONSE_COMMENTSLIST = 9;
var API_RESPONSE_RATINGSTREE = 10;
var API_RESPONSE_ARRAY = 11;
var API_RESPONSE_INDEXEDCONTENTLIST = 12;
var API_RESPONSE_RATEDCONTENTLIST = 13;
var API_RESPONSE_RANKEDUSERLIST = 14;
var API_RESPONSE_RANKEDCONTENTLIST =15;

function methodObject(response, relevant,target,content,signed,additionalParameters,implemented)
{
    this.responseType = response;
    this.requireRelevant = relevant;
    this.requireTarget = target;
    this.requireContent = content;
    this.requireSigned = signed;
    this.additionalParameters = (additionalParameters) ? additionalParameters : [];
    this.implemented = (implemented == false) ? false : true;
}

var methodDetails = {
        ripl:
        {
            user:
            {
                getInfo:new methodObject(API_RESPONSE_USERITEM,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),

                getFollowers:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getFollowings:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getMayKnow:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getSuperFans :new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),

                getOwnedContent:new methodObject(API_RESPONSE_CONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getFavoriteContent:new methodObject(API_RESPONSE_CONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getRecommendedContent :new methodObject(API_RESPONSE_CONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getHighestRatedContent: new methodObject(API_RESPONSE_RANKEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),

                getTags: new methodObject(API_RESPONSE_ARRAY,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getTagCloud:new methodObject(API_RESPONSE_HTML,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getTagMatchedUsers: new methodObject(API_RESPONSE_RANKEDUSERLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getHighestRatingsMatchedContent: new methodObject(API_RESPONSE_RANKEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                
                getRecentActivities:new methodObject(API_RESPONSE_EVENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getRecentContentActivity:new methodObject(API_RESPONSE_EVENTLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),

                getComments:new methodObject(API_RESPONSE_COMMENTSLIST,API_USAGE_OPTIONAL,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false)

            },
            content:
            {
                addTags:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true,['tags']),
                removeTags:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true,['tags']),
                addComment:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true,['message']),
                removeComment:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true,['messageid']),
                setRating:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true,['rating']),
                addToFavorites:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true),
                removeFromFavorites:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true),
                watch:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,true),
                
                getInfo:new methodObject(API_RESPONSE_CONTENTITEM,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),

                getSimilarContent:new methodObject(API_RESPONSE_CONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),
                getTagMatchedContent:new methodObject(API_RESPONSE_CONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),
                getTagMatchedUsers:new methodObject(API_RESPONSE_RANKEDUSERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),
                
                getTags:new methodObject(API_RESPONSE_ARRAY,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),

                getTagCloud:new methodObject(API_RESPONSE_HTML,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),

                getRatings:new methodObject(API_RESPONSE_ARRAY,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),

                getComments:new methodObject(API_RESPONSE_COMMENTSLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),

                getFavorited:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),
                getSimilarUsers:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),
                getRecentViewers:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false),

                getRecentActivity:new methodObject(API_RESPONSE_EVENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_REQUIRED,false)
            },
            relationships:
            {
                getBlocks:new methodObject(API_RESPONSE_BOOLEAN,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getFollows:new methodObject(API_RESPONSE_BOOLEAN,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                getFollowedBy:new methodObject(API_RESPONSE_BOOLEAN,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                
                setBlocks:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false,['block']),
                addFollow:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                removeFollow:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false),
                addComment:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false,['message']),
                removeComment:new methodObject(API_RESPONSE_SUCCESS,API_USAGE_REQUIRED,API_USAGE_REQUIRED,API_USAGE_DISALLOWED,false)
            },
            charts:
            {
                getTopTags:new methodObject(API_RESPONSE_ARRAY,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false),
                getTopTagsCloud:new methodObject(API_RESPONSE_HTML,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false),

                getMostPlayed:new methodObject(API_RESPONSE_INDEXEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false),
                getMostShared:new methodObject(API_RESPONSE_INDEXEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false),
                getMostFavorited:new methodObject(API_RESPONSE_INDEXEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false),
                getMostCommented:new methodObject(API_RESPONSE_INDEXEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false),
                getHighestRated:new methodObject(API_RESPONSE_RATEDCONTENTLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false)
            },
            people:
            {
                findByLogin:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false,['login']),
                findByName:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false,['firstname','lastname']),
                findByEmail:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false,['email']),
                findByDisplayName:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false,['displayname']),
                findByDistance:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false,['zipcode','distance']),
                findByForeignId:new methodObject(API_RESPONSE_USERLIST,API_USAGE_OPTIONAL,API_USAGE_DISALLOWED,API_USAGE_DISALLOWED,false,['foreign_id','foreign_service'],false)
            }
        },
        getFromString:function(methodName)
        {
            var pKeys = methodName.split('.');
            if ((methodDetails[pKeys[0]]) && (methodDetails[pKeys[0]][pKeys[1]]) && (methodDetails[pKeys[0]][pKeys[1]][pKeys[2]]))
            {
                return pMethodObj = methodDetails[pKeys[0]][pKeys[1]][pKeys[2]];
            }
            return false;
        },
        propertyCache:{}
    };
methodDetails.currentMethod = methodDetails.ripl.user.getInfo;