/*
 * flickr.js, version 0.6
 * A Flickr API wrapper
 *
 *  (see below for config)
 *
 *
 * Revision history:
 *    0.6  - major code cleaning/rewrite
 *         - all methods correctly mapped
 *         - multiples calls supported
 *         - better callback system
 *         - requests now goes through SACK
 *    0.5  - xmldata bugfixs
 *    0.4  - minor bug fixs
 *    0.3  - 24 Apr 2005 : Initial version
 *
 * Copyright (C) 2005 Gustavo Marin (gustavoandresmarin@gmail.com)
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2.1 of the License, or
 * (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

/*** CONFIG BEGINS HERE ***/

var FLICKRJS_PROXY_URL = '/lfvr/flickr.proxy.php';
var FLICKRJS_ERR_CODE  = '999';
var FLICKRJS_ERR_MSG   = 'Unknown error';

/*** CONFIG END HERE ***/

document.write( '<'+'script type=\'text/javascript\' src=\'/lfvr/flickr.parser.js\' >'+'<'+'/script>' );
document.write( '<'+'script type=\'text/javascript\' src=\'/lfvr/tw-sack.js\' >'+'<'+'/script>' );

function flickrAPI_Base()
{
    this.blogs = function blogs(){};
    this.contacts = function contacts(){};
    this.favorites = function favorites(){};
    this.groups = function groups(){};
    this.groups.pools = function pools(){};
    this.people = function people(){};
    this.interestingness = function photos(){};
    this.photos = function photos(){};
    this.photos.comments = function photos(){};
    this.photos.licenses = function licenses(){};
    this.photos.notes = function notes(){};
    this.photos.transform = function transform(){};
    this.photosets = function photosets(){};
    this.reflection = function reflection(){};
    this.tags = function tags(){};
    this.test = function test(){};
    this.urls = function urls(){};

}


var flickrAPI = new flickrAPI_Base();
var flickrAPI_Parser = new flickrAPI_Base();


flickrSACK = function(method)
{
    var s = new sack(FLICKRJS_PROXY_URL);
    s.method = method;
    s.call = s.runAJAX;

    onLoading = function(){};
    onLoaded = function(){};
    onInteractive = function(){};
    onCompletion = function(){};

    s.isError = function(xml)
    {
        if( !xml ) { this.error = {error:FLICKRJS_ERR_CODE,msg:FLICKRJS_ERR_MSG+'\n\n'+this.response}; return true; }
        var stat = xml.getElementsByTagName('rsp').item(0);
        if (!stat) { this.error = {error:FLICKRJS_ERR_CODE,msg:FLICKRJS_ERR_MSG+'\n\n'+this.response}; return true; }
        stat = stat.getAttribute('stat');
        if(stat == 'fail')
        {
            var err = xml.getElementsByTagName('err').item(0).getAttribute('code');
            var msg = xml.getElementsByTagName('err').item(0).getAttribute('msg');
            //alert("ERROR:"+ err + msg);
            this.error = {error:err,msg:msg};
            return true;
        }
        else
            return false;
    };

    s.setCallback = function(parser,callback,args)
    {
        var result=(s.isError(s.responseXML))?s.error:parser(s.responseXML); 
        callback(result,args);
    }

    s.onLoading = onLoading;
    s.onLoaded = onLoaded;
    s.onInteractive = onInteractive;
    s.onCompletion = onCompletion;
    return s;
}

/* 
 * Extra functionality
 * --------------------------------------------------------*/
flickrAPI.setExtras = function(e){ this.extras = e; }


/*
 * flickr.blogs
 * --------------------------------------------------------*/
flickrAPI.blogs.getList = function(callback,args)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.blogs.getList');
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.blogs.getList,callback,args); }
    s.call();
};

flickrAPI.blogs.postPhoto = function(callback,args,blog_id,photo_id,title,description,blog_password)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.blogs.postPhoto');
    s.setVar('blog_id',blog_id);
    s.setVar('photo_id',photo_id);
    s.setVar('title',title);
    s.setVar('description',description);
    if(blog_password)s.setVar('blog_password',blog_password);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.blogs.getList,callback,args); }
    s.call();
};

/*
 * flickr.contacts
 * --------------------------------------------------------*/
flickrAPI.contacts.getList = function(callback,args)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.contacts.getList');
//    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.contacts.getList,callback,args); }
    s.call();
};
flickrAPI.contacts.getPublicList = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.contacts.getPublicList');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.contacts.getPublicList,callback,args); }
    s.call();
};

/*
 * flickr.favorites
 * --------------------------------------------------------*/
flickrAPI.favorites.add = function(callback,args, photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.favorites.add');
    s.setVar('userAuth',true);
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.favorites.add,callback,args); }
    s.call();
};
flickrAPI.favorites.remove = function(callback,args, photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.favorites.remove');
    s.setVar('userAuth',true);
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.favorites.remove,callback,args); }
    s.call();
};
flickrAPI.favorites.getList = function(callback,args,user_id,extras,per_page,page)/* AUTH */ /* EXTRAS */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.favorites.getList');
    s.setVar('user_id',user_id);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    s.setVar('per_page',per_page);
    s.setVar('page',page);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.favorites.getList,callback,args); }
    s.call();
};
flickrAPI.favorites.getPublicList = function(callback,args,user_id,extras,per_page,page)/* EXTRAS */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.favorites.getPublicList');
    s.setVar('user_id',user_id);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    s.setVar('per_page',per_page);
    s.setVar('page',page);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.favorites.getPublicList,callback,args); }
    s.call();
};

/*
 * flickr.groups
 * --------------------------------------------------------*/
flickrAPI.groups.browse = function(callback,args,cat_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.browse');
    s.setVar('cat_id',cat_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.browse,callback,args); }
    s.call();
};
flickrAPI.groups.search = function(callback,args,text,per_page,page)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.search');
    s.setVar('text',text);
    s.setVar('per_page',per_page);
    s.setVar('page',page);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.search,callback,args); }
    s.call();
};
flickrAPI.groups.getActiveList = function(callback,args)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.getActiveList');
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.getActiveList,callback,args); }
    s.call();
};
flickrAPI.groups.getInfo = function(callback,args,group_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.getInfo');
    s.setVar('group_id',group_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.getInfo,callback,args); }
    s.call();
};

/*
 * flickr.groups.pools
 * --------------------------------------------------------*/
flickrAPI.groups.pools.add = function(callback,args,photo_id,group_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.pools.add');
    s.setVar('photo_id',photo_id);
    s.setVar('group_id',group_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.pools.add,callback,args); }
    s.call();
};
flickrAPI.groups.pools.getGroups = function(callback,args)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.pools.getGroups');
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.pools.getGroups,callback,args); }
    s.call();
};
flickrAPI.groups.pools.remove = function(callback,args,photo_id,group_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.pools.remove');
    s.setVar('photo_id',photo_id);
    s.setVar('group_id',group_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.pools.remove,callback,args); }
    s.call();
};
flickrAPI.groups.pools.getContext = function(callback,args,photo_id,group_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.groups.pools.getContext');
    s.setVar('photo_id',photo_id);
    s.setVar('group_id',group_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.pools.getContext,callback,args); }
    s.call();
};

flickrAPI.groups.pools.getPhotos = function(callback,args,group_id,tags,extras,per_page,page)/* EXTRAS */
{
    var s = new flickrSACK("GET");
    s.setVar('method','flickr.groups.pools.getPhotos');
    s.setVar('group_id',group_id);
    if(tags)s.setVar('tags',tags);
    if(page)s.setVar('page',page);
    if(per_page)s.setVar("per_page",per_page);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.groups.pools.getPhotos,callback,args); }
    s.call();
};


/*
 * flickr.people
 * --------------------------------------------------------*/
flickrAPI.people.findByEmail = function(callback,args,find_email)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.people.findByEmail');
    s.setVar('find_email',find_email);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.people.findByEmail,callback,args); }
    s.call();
};
flickrAPI.people.findByUsername = function(callback,args,username)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.people.findByUsername');
    s.setVar('username',username);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.people.findByUsername,callback,args); }
    s.call();
};
flickrAPI.people.getInfo = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.people.getInfo');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.people.getInfo,callback,args); }
    s.call();
};
flickrAPI.people.getOnlineList = function(callback,args)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.people.getOnlineList');
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.people.getOnlineList,callback,args); }
    s.call();
};
flickrAPI.people.getPublicGroups = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.people.getPublicGroups');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.people.getPublicGroups,callback,args); }
    s.call();
};
flickrAPI.people.getPublicPhotos = function(callback,args,user_id,extras,per_page,page)/* EXTRAS */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.people.getPublicPhotos');
    s.setVar('user_id',user_id);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    if(per_page)s.setVar('per_page',per_page);
    if(page)s.setVar('page',page);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.people.getPublicPhotos,callback,args); }
    s.call();
};

/*
 * flickr.photos
 * --------------------------------------------------------*/
flickrAPI.photos.addTags = function(callback,args,photo_id,tags)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.addTags');
    s.setVar('photo_id',photo_id);
    s.setVar('tags',tags);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.addTags,callback,args); }
    s.call();
};
flickrAPI.photos._delete = function(callback,args,photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.delete');
    s.setVar('photo_id',photo_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos._delete,callback,args); }
    s.call();
};
flickrAPI.photos.getContactsPhotos = function(callback,args,count,just_friends,single_photo,include_self)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getContactsPhotos');
    if(count)s.setVar('count',count);
    if(just_friends)s.setVar('just_friends',just_friends);
    if(single_photo)s.setVar('single_photo',single_photo);
    if(include_self)s.setVar('include_self',include_self);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getContactsPhotos,callback,args); }
    s.call();
};
flickrAPI.photos.getCounts = function(callback,args,dates,taken_dates)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getCounts');
    s.setVar('dates',dates);
    s.setVar('taken_dates',taken_dates);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getCounts,callback,args); }
    s.call();
};
flickrAPI.photos.getPerms = function(callback,args,photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getPerms');
    s.setVar('userAuth',true);
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getPerms,callback,args); }
    s.call();
};
flickrAPI.photos.removeTag = function(callback,args,tag_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.removeTag');
    s.setVar('tag_id',tag_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.removeTag,callback,args); }
    s.call();
};
flickrAPI.photos.setDates = function(callback,args,photo_id,date_posted,date_taken,date_taken_granularity)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.setDates');
    s.setVar('photo_id',photo_id);
    s.setVar('date_posted',date_posted);
    s.setVar('date_taken',date_taken);
    s.setVar('date_taken_granularity',date_taken_granularity);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.setDates,callback,args); }
    s.call();
};
flickrAPI.photos.setMeta = function(callback,args,photo_id,title,description)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.setMeta');
    s.setVar('photo_id',photo_id);
    s.setVar('title',title);
    s.setVar('description',description);
//    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.setMeta,callback,args); }
    s.call();
};
flickrAPI.photos.setPerms = function(callback,args,photo_id,is_public,is_friend,is_family,perm_comment,perm_addmeta)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.setPerms');
    s.setVar('photo_id',photo_id);
    s.setVar('is_public',is_public);
    s.setVar('is_friend',is_friend);
    s.setVar('is_family',is_family);
    s.setVar('perm_comment',perm_comment);
    s.setVar('perm_addmeta',perm_addmeta);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.setPerms,callback,args); }
    s.call();
};
flickrAPI.photos.setTags = function(callback,args,photo_id,tags)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.setTags');
    s.setVar('photo_id',photo_id);
    s.setVar('tags',tags);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.setTags,callback,args); }
    s.call();
};
flickrAPI.photos.getNotInSet = function(callback,args,extras,per_page,page)/* AUTH */ /* EXTRAS */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getNotInSet');
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    if(per_page)s.setVar('per_page',per_page);
    if(page)s.setVar('page',page);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getNotInSet,callback,args); }
    s.call();
};
flickrAPI.photos.getUntagged = function(callback,args,extras,per_page,page)/* AUTH */ /* EXTRAS */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getUntagged');
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    if(per_page)s.setVar('per_page',per_page);
    if(page)s.setVar('page',page);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getUntagged,callback,args); }
    s.call();
};
flickrAPI.photos.getContactsPublicPhotos = function(callback,args,user_id,count,just_friends,single_photo,include_self)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getContactsPublicPhotos');
    s.setVar('user_id',user_id);
    if(count)s.setVar('count',count);
    if(just_friends)s.setVar('just_friends',just_friends);
    if(single_photo)s.setVar('single_photo',single_photo);
    if(include_self)s.setVar('include_self',include_self);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getContactsPublicPhotos,callback,args); }
    s.call();
};
flickrAPI.photos.getContext = function(callback,args,photo_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getContext');
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getContext,callback,args); }
    s.call();
};
flickrAPI.photos.getAllContexts = function(callback,args,photo_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getAllContexts');
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getAllContexts,callback,args); }
    s.call();
};
flickrAPI.photos.getExif = function(callback,args,photo_id,secret)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getExif');
    s.setVar('photo_id',photo_id);
    s.setVar('secret',secret);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getExif,callback,args); }
    s.call();
};
flickrAPI.photos.getFavorites = function(callback,args,photo_id,page,per_page)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getFavorites');
    s.setVar('photo_id',photo_id);
    s.setVar('page',page);
    s.setVar('per_page',per_page);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getFavorites,callback,args); }
    s.call();
};
flickrAPI.photos.getInfo = function(callback,args,photo_id,secret)
{
    var s = new flickrSACK("GET");
    s.setVar('method','flickr.photos.getInfo');
    s.setVar('photo_id',photo_id);
    if(secret)s.setVar('secret',secret);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getInfo,callback,args); }
    s.call();
};

flickrAPI.interestingness.getList = function (callback,args,extras,per_page,page)/* EXTRAS */
{
    var s = new flickrSACK("GET");
    s.setVar('method','flickr.interestingness.getList');
    if(page)s.setVar('page',page);
    if(per_page)s.setVar('per_page',per_page);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.interestingness.getList,callback,args); }
    s.call();
}

flickrAPI.photos.comments.getList = function (callback,args,photo_id)
{
    var s = new flickrSACK("GET");
    s.setVar('method','flickr.photos.comments.getList');
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.comments.getList,callback,args); }
    s.call();
}

flickrAPI.photos.comments.addComment = function (callback,args,photo_id,comment_text)
{
    var s = new flickrSACK("GET");
    s.setVar('method','flickr.photos.comments.addComment');
    s.setVar('photo_id',photo_id);
    s.setVar('comment_text',comment_text);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.comments.addComment,callback,args); }
    s.call();
}

flickrAPI.photos.getRecent = function (callback,args,extras,per_page,page)/* EXTRAS */
{
    var s = new flickrSACK("GET");
    s.setVar('method','flickr.photos.getRecent');
    if(page)s.setVar('page',page);
    if(per_page)s.setVar('per_page',per_page);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getRecent,callback,args); }
    s.call();
}

flickrAPI.photos.getSizes = function(callback,args,photo_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.getSizes');
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.getSizes,callback,args); }
    s.call();
};
flickrAPI.photos.search = function(callback,args,user_id,tags,tag_mode,text,min_upload_date,max_upload_date,min_taken_date,max_taken_date,license,extras,per_page,page,sort,privacy)/* EXTRAS */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.search');
    if( user_id ) s.setVar('user_id',user_id);
    if( tags ) s.setVar('tags',tags);
    if( tag_mode ) s.setVar('tag_mode',tag_mode);
    if( text ) s.setVar('text',text);
    if( min_upload_date ) s.setVar('min_upload_date',min_upload_date);
    if( max_upload_date ) s.setVar('max_upload_date',max_upload_date);
    if( min_taken_date ) s.setVar('min_taken_date',min_taken_date);
    if( max_taken_date ) s.setVar('max_taken_date',max_taken_date);
    if( license ) s.setVar('license',license);
    extras = (extras)? extras : (this.extras)? this.extras : null; 
    if(extras)s.setVar('extras',extras);
    if( per_page )s.setVar('per_page',per_page);
    if( page )s.setVar('page',page);
    if( sort )s.setVar('sort',sort);
    if( privacy )s.setVar('privacy_filter',privacy);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.search,callback,args); }
    s.call();
};


/*
 * flickr.photos.licenses
 * --------------------------------------------------------*/
flickrAPI.photos.licenses.getInfo = function(callback,args)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.licences.getInfo');
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.licences.getInfo,callback,args); }
    s.call();
};

/*
 * flickr.photos.notes
 * --------------------------------------------------------*/
flickrAPI.photos.notes.add = function(callback,args,photo_id,note_x,note_y,note_w,note_h,note_text)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.notes.add');
    s.setVar('photo_id',photo_id);
    s.setVar('note_x',note_x);
    s.setVar('note_y',note_y);
    s.setVar('note_w',note_w);
    s.setVar('note_h',note_h);
    s.setVar('note_text',note_text);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.notes.add,callback,args); }
    s.call();
};
flickrAPI.photos.notes._delete = function(callback,args,note_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.notes._delete');
    s.setVar('note_id',note_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.notes._delete,callback,args); }
    s.call();
};
flickrAPI.photos.notes.edit = function(callback,args,photo_id,note_x,note_y,note_w,note_h,note_text)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.notes.edit');
    s.setVar('photo_id',photo_id);
    s.setVar('note_x',note_x);
    s.setVar('note_y',note_y);
    s.setVar('note_w',note_w);
    s.setVar('note_h',note_h);
    s.setVar('note_text',note_text);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.notes.edit,callback,args); }
    s.call();
};

/*
 * flickr.photos.transform
 * --------------------------------------------------------*/
flickrAPI.photos.transform.rotate = function(callback,args,photo_id,degrees)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photos.transform.rotate');
    s.setVar('userAuth',true);
    s.setVar('photo_id',photo_id);
    s.setVar('degrees',degrees);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photos.transform.rotate,callback,args); }
    s.call();
};


/*
 * flickr.photosets
 * --------------------------------------------------------*/
flickrAPI.photosets.addPhoto = function(callback,args,photoset_id,photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.addPhoto');
    s.setVar('photoset_id',photoset_id);
    s.setVar('photo_id',photo_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.addPhoto,callback,args); }
    s.call();
};
flickrAPI.photosets.create = function(callback,args,title,description,primary_photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.create');
    s.setVar('title',title);
    s.setVar('description',description);
    s.setVar('primary_photo_id',primary_photo_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.create,callback,args); }
    s.call();
};
flickrAPI.photosets._delete = function(callback,args,photoset_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.delete');
    s.setVar('photoset_id',photoset_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets._delete,callback,args); }
    s.call();
};
flickrAPI.photosets.editMeta = function(callback,args,photoset_id,title,description)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.editMeta');
    s.setVar('photoset_id',photoset_id);
    s.setVar('title',title);
    if(description)s.setVar('description',description);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.editMeta,callback,args); }
    s.call();
};
flickrAPI.photosets.editPhotos = function(callback,args,photoset_id,primary_photo_id,photo_ids)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.editPhotos');
    s.setVar('photoset_id',photoset_id);
    s.setVar('primary_photo_id',primary_photo_id);
    s.setVar('photo_ids',photo_ids);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.editPhotos,callback,args); }
    s.call();
};
flickrAPI.photosets.orderSets = function(callback,args,photoset_ids)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.orderSets');
    s.setVar('photoset_ids',photoset_ids);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.orderSets,callback,args); }
    s.call();
};
flickrAPI.photosets.removePhoto = function(callback,args,photoset_id,photo_id)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.removePhoto');
    s.setVar('photoset_id',photoset_id);
    s.setVar('photo_id',photo_id);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.removePhoto,callback,args); }
    s.call();
};
flickrAPI.photosets.getContext = function(callback,args,photo_id,photoset_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.getContext');
    s.setVar('photoset_id',photoset_id);
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.getContext,callback,args); }
    s.call();
};
flickrAPI.photosets.getInfo = function(callback,args,photoset_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.getInfo');
    s.setVar('photoset_id',photoset_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.getInfo,callback,args); }
    s.call();
};
flickrAPI.photosets.getList = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.getList');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.getList,callback,args); }
    s.call();
};
flickrAPI.photosets.getPhotos = function(callback,args,photoset_id,extras)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.photosets.getPhotos');
    s.setVar('photoset_id',photoset_id);
    s.setVar('extras',extras);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.photosets.getPhotos,callback,args); }
    s.call();
};


/*
 * flickr.reflection
 * --------------------------------------------------------*/
flickrAPI.reflection.getMethodInfo = function(callback,args, method_name )
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.reflection.getMethodInfo');
    s.setVar('method_name',method_name);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.reflection.getMethodInfo,callback,args); }
    s.call();
};
flickrAPI.reflection.getMethods = function(callback,args)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.reflection.getMethods');
    s.onCompletion = function(){  s.setCallback(flickrAPI_Parser.reflection.getMethods,callback,args); }
    s.call();
};


/*
 * flickr.tags
 * --------------------------------------------------------*/
flickrAPI.tags.getListPhoto = function(callback,args,photo_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.tags.getListPhoto');
    s.setVar('photo_id',photo_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.tags.getListPhoto,callback,args); }
    s.call();
};
flickrAPI.tags.getListUser = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.tags.getListUser');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.tags.getListUser,callback,args); }
    s.call();
};
flickrAPI.tags.getListUserPopular = function(callback,args,user_id,count)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.tags.getListUserPopular');
    s.setVar('user_id',user_id);
    s.setVar('count',count);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.tags.getListUserPopular,callback,args); }
    s.call();
};
flickrAPI.tags.getRelated = function(callback,args,tag)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.tags.getRelated');
    s.setVar('tag',tag);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.tags.getRelated,callback,args); }
    s.call();
};

/*
 * flickr.test
 * --------------------------------------------------------*/
flickrAPI.test.login = function(callback,args,email,password)/* AUTH */
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.test.login');
    s.setVar('email',email);
    s.setVar('password',password);
    s.setVar('userAuth',true);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.test.login,callback,args); }
    s.call();
};
flickrAPI.test.echo = function(callback,args)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.test.echo');
    s.setVar('foo',22);
    s.setVar('bar',"XXX");
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.test.echo,callback,args); }
    s.call();
};

/*
 * flickr.urls
 * --------------------------------------------------------*/
flickrAPI.urls.getGroup = function(callback,args,group_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.urls.getGroup');
    s.setVar('group_id',group_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.urls.getGroup,callback,args); }
    s.call();
};
flickrAPI.urls.getUserPhotos = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.urls.getUserPhotos');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.urls.getUserPhotos,callback,args); }
    s.call();
};
flickrAPI.urls.getUserProfile = function(callback,args,user_id)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.urls.getUserProfile');
    s.setVar('user_id',user_id);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.urls.getUserProfile,callback,args); }
    s.call();
};
flickrAPI.urls.lookupGroup = function(callback,args,url)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.urls.lookupGroup');
    s.setVar('url',url);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.urls.lookupGroup,callback,args); }
    s.call();
};
flickrAPI.urls.lookupUser = function(callback,args,url)
{
    var s = new flickrSACK('GET');
    s.setVar('method','flickr.urls.lookupUser');
    s.setVar('url',url);
    s.onCompletion = function(){ s.setCallback(flickrAPI_Parser.urls.lookupUser,callback,args); }
    s.call();
};




