var digg = 
{
    functionId: 0,
    appkey: null,

    //lock: function() {}, //not needed
    //unlock: function() {}, //not needed

    initialize: function(appkey)
    {
    	this.appkey = appkey;
    },

    createUniqueFunctionName: function()
    {
	//this.lock();
	return "digg_function" + this.functionId++;
	//this.unlock();
    },

    createCbFunction: function(args)
    {
	var cbName = this.createUniqueFunctionName();
	var cb = args[0];
	var errorCb = args[1];
	args = args.splice(2, args.length - 2);

	window[cbName] = function(data) {
	    args.unshift(data);
	    if (errorCb && data.code)
	    	errorCb.apply(null, args)
	    else
		cb.apply(null, args); 
	};
	return cbName;
    },

    sendRequest: function(cbName, event, params)
    {
	var id = event.join("/");
	var request = "http://services.digg.com/" + id + "?appkey=" + escape(this.appkey) + "&type=javascript&callback=" + cbName;
	if (params)
	    for (var key in params)
		request += '&' + key + '=' + params[key];
	var scr = document.createElement("script");
	scr.type = "text/javascript";
	scr.charset = "utf-8";
	scr.src = request;
	document.getElementsByTagName("head")[0].appendChild(scr);
    },

    createApiRequestFunction: function(cbName, eventInfo, paramCount)
    { 
	return this[cbName] = function()
	{
		var nArg = 0;
		var cb = arguments[nArg++];
		var errorCb = arguments[nArg++];
		var sprintfArgs = [];
		var cbFunctionArgs = [cb, errorCb];
		var event = [];
		for (var i = 0; i < eventInfo.length; i++)
		{
		    if (eventInfo[i] == null)
		    {
			cbFunctionArgs.push(typeof(arguments[nArg]) == 'array' ? arguments[nArg].join(",") : arguments[nArg]);
			event[i] = arguments[nArg++];
		    } else {
		    	event[i] = eventInfo[i];
		    }
		}
		var params = arguments[nArg++];
		var extra = arguments[nArg++];
		cbFunctionArgs.push(extra);
		this.sendRequest(this.createCbFunction(cbFunctionArgs), event, params, extra);
		
	}
    }
};

/**** Auto generated code start ****/
digg.createApiRequestFunction("getErrors", ['errors'], 0);
digg.createApiRequestFunction("getError", ['error', null], 1);
digg.createApiRequestFunction("getStories", ['stories'], 0);
digg.createApiRequestFunction("getStories", ['stories', null], 1);
digg.createApiRequestFunction("getStoriesComments", ['stories', null, 'comments'], 1);
digg.createApiRequestFunction("getStoriesDiggs", ['stories', null, 'diggs'], 1);
digg.createApiRequestFunction("getStoriesComments", ['stories', 'comments'], 0);
digg.createApiRequestFunction("getStoriesContainer", ['stories', 'container', null], 1);
digg.createApiRequestFunction("getStoriesContainerPopular", ['stories', 'container', null, 'popular'], 1);
digg.createApiRequestFunction("getStoriesContainerUpcoming", ['stories', 'container', null, 'upcoming'], 1);
digg.createApiRequestFunction("getStoriesDiggs", ['stories', 'diggs'], 0);
digg.createApiRequestFunction("getStoriesPopular", ['stories', 'popular'], 0);
digg.createApiRequestFunction("getStoriesPopularComments", ['stories', 'popular', 'comments'], 0);
digg.createApiRequestFunction("getStoriesPopularDiggs", ['stories', 'popular', 'diggs'], 0);
digg.createApiRequestFunction("getStoriesTopic", ['stories', 'topic', null], 1);
digg.createApiRequestFunction("getStoriesTopicPopular", ['stories', 'topic', null, 'popular'], 1);
digg.createApiRequestFunction("getStoriesTopicUpcoming", ['stories', 'topic', null, 'upcoming'], 1);
digg.createApiRequestFunction("getStoriesUpcoming", ['stories', 'upcoming'], 0);
digg.createApiRequestFunction("getStoriesUpcomingComments", ['stories', 'upcoming', 'comments'], 0);
digg.createApiRequestFunction("getStoriesUpcomingDiggs", ['stories', 'upcoming', 'diggs'], 0);
digg.createApiRequestFunction("getStory", ['story', null], 1);
digg.createApiRequestFunction("getStoryActivity", ['story', null, 'activity'], 1);
digg.createApiRequestFunction("getStoryActivityComments", ['story', null, 'activity', 'comments'], 1);
digg.createApiRequestFunction("getStoryActivityDiggs", ['story', null, 'activity', 'diggs'], 1);
digg.createApiRequestFunction("getStoryComments", ['story', null, 'comments'], 1);
digg.createApiRequestFunction("getStoryDiggs", ['story', null, 'diggs'], 1);
digg.createApiRequestFunction("getStoryComment", ['story', null, 'comment', null], 2);
digg.createApiRequestFunction("getStoryCommentReplies", ['story', null, 'comment', null, 'replies'], 2);
digg.createApiRequestFunction("getStoryComments", ['story', null, 'comments'], 1);
digg.createApiRequestFunction("getStoryUserDigg", ['story', null, 'user', null, 'digg'], 2);
digg.createApiRequestFunction("getTopics", ['topics'], 0);
digg.createApiRequestFunction("getUser", ['user', null], 1);
digg.createApiRequestFunction("getUserActivity", ['user', null, 'activity'], 1);
digg.createApiRequestFunction("getUserActivityComments", ['user', null, 'activity', 'comments'], 1);
digg.createApiRequestFunction("getUserActivityDiggs", ['user', null, 'activity', 'diggs'], 1);
digg.createApiRequestFunction("getUserComments", ['user', null, 'comments'], 1);
digg.createApiRequestFunction("getUserDiggs", ['user', null, 'diggs'], 1);
digg.createApiRequestFunction("getUserFan", ['user', null, 'fan', null], 2);
digg.createApiRequestFunction("getUserFans", ['user', null, 'fans'], 1);
digg.createApiRequestFunction("getUserFriend", ['user', null, 'friend', null], 2);
digg.createApiRequestFunction("getUserFriends", ['user', null, 'friends'], 1);
digg.createApiRequestFunction("getUserSubmissions", ['user', null, 'submissions'], 1);
digg.createApiRequestFunction("getUsers", ['users'], 0);
digg.createApiRequestFunction("getUsersComments", ['users', null, 'comments'], 1);
digg.createApiRequestFunction("getUsersDiggs", ['users', null, 'diggs'], 1);

/**** Auto generated code end ****/
