Flickr = {
    sign_params: function(dict) {
        var list = [];
        for (var key in dict) { 
            list.push(key);
        }
        list = list.sort();
        sign = secret;
        for(var i = 0; i < list.length; i++) {
            sign += list[i] + dict[list[i]];
        }
        return hex_md5(sign);
    },
    
    call: function(dict, callback, error) {
        func = function(data) { 
            if(data.stat && data.stat=="fail") {
                if (error) { error(data); }
                else {
                    alert('Error: ' + data.message);
                }    
            }
            callback(data);
        }     
    
        if (!window.responseHandlers) { 
            responseHandlers = {};
            responseHandlerCount = 0;
        }
        window['response'+responseHandlerCount] = func;
        var callstring = 'response'+responseHandlerCount;
        responseHandlerCount += 1;
        dict['jsoncallback'] = callstring;
        dict['format'] = 'json';
        url = Flickr.create_url(dict);   
        var s = document.createElement('script');
        s.src = url;
        document.body.appendChild(s);
    },
    create_url:function(dict, base) {
        dict['api_key'] = api_key;
        if (window.auth_token) {
            dict['auth_token'] = auth_token;
        }    
        dict['api_sig'] = Flickr.sign_params(dict);
        var url = (base || api_url) + '?' + getParameterString(dict);
        return url;
    },
    
    checkLogin:function(perms) {
        var auth_url =  Flickr.create_url({'perms':perms || 'read'}, "http://flickr.com/services/auth/");
        var params = getParameters();
        if (params.logout) { 
            Flickr.logout();
            return false;
        }    
        auth_token = params.token || readCookie('auth_token');
        if (auth_token) {
            Flickr.checkAuthToken();
            return;
        }
        if (!params.frob) {
            document.location = auth_url; 
            return;    
        }   
        var frob = params.frob;
        Flickr.call({'method':'flickr.auth.getToken', 'frob': frob}, function(data) {
            auth_token = data.auth.token._content;
            createCookie("auth_token", auth_token); 
            var loc = document.location;
            document.location = loc.protocol + "//" + loc.hostname + loc.pathname;  
        });    
    },
    
    checkAuthToken: function() { 
        Flickr.call({'method':'flickr.auth.checkToken'}, Flickr.onload, function() {
            eraseCookie('auth_token');
            var loc = document.location;
            document.location = loc.protocol + "//" + loc.hostname + loc.pathname;  
        });    
    },
    onload: function() { },
    logout: function() { eraseCookie("auth_token"); alert("You have been successfully logged out."); }
};

