var fbTools = fbTools || {};
fbTools.cursor_wait = function(){	
	$('body').css('cursor', 'wait');
};

fbTools.cursor_clear =function(){	
	$('body').css('cursor', 'default');
};

fbTools.user = {};


fbTools.loginConnect = function(perms_required, callback) {
	fbTools.cursor_wait();
	FB.login(function(response) {
		// debugger;
		if (response.session) 
		{
			// fbTools.getUserInfos(callback);
			fbTools.isLogged = true;
			
			fbTools.cursor_clear();
			fbTools.access_token = response.session.access_token;
			callback();
		}
		else{
			fbTools.cursor_clear();
		}
	});
};

fbTools.logoutConnect = function()
{
	FB.logout(function(response) {
		fbTools.isLogged = false;
	});
}

fbTools.getUserInfos = function(callback)
{
	FB.api('/me', function(userInfo) {
		fbTools.userInfo = userInfo;
		if (typeof(callback) == 'function')
		{
			fbTools.cursor_clear();
			callback();
		}
	});
};

fbTools.getAlbumList = function(callback)
{	
	var query = FB.Data.query("SELECT aid , name FROM album WHERE owner='{0}' order by created desc", fbTools.userInfo.id);
		
	query.wait( function(rows) {
		if (typeof(callback) == 'function')
		{
			callback(rows);
		}
	});
}

fbTools.getAlbumPhotos = function(aid, callback)
{
	var query = FB.Data.query("SELECT pid ,src_small,object_id,src_big,src_big_height,src_big_width FROM photo WHERE aid='{0}'", aid);
		
	query.wait( function(rows) {
		if (typeof(callback) == 'function')
		{
			callback(rows);
		}	
	});
};

fbTools.getUserPhotos = function(callback)
{
	 var query = FB.Data.query("SELECT object_id,src_small,src_big_width,src_big_height FROM photo WHERE pid in (SELECT cover_pid FROM album WHERE owner='{0}' order by created asc limit 1)", fbTools.userInfo.id);

	 // var query = FB.Data.query("SELECT pid ,src_small,object_id,src_big,src_big_height,src_big_width FROM photo WHERE owner = '{0}' order by created asc limit 15", fbTools.userInfo.id);
	 
	 query.wait(function(rows) {
		if (typeof(callback) == 'function')
		{
			callback(rows);
		}
		fbTools.user_photo = rows;
	 });
};
	

fbTools.fb_init = function (fb_app_id,xfbml)
{
	
	FB.init({
		appId: fb_app_id,
		cookie : true, // enable cookies to allow the server to access the session
		status: true,
		xfbml: xfbml
	});
}

fbTools.dialog = function (method,name,display,share_link,picture,share_msg,callbackOk,callbackKo)
{

	FB.ui({
			method: method, //'send','feed'
			name: name, 
			display: display, //'dialog','popup'
			link: share_link,
			picture: picture,
			description: share_msg
		},
		function(response) {
			if (response && response.post_id) {
			  if(callbackOk)
				  callbackOk();
			} else {
			  if(callbackKo)
				  callbackKo()
			}
		});
}



function base64_encode (data) {    // Encodes string using MIME base64 algorithm      //     // version: 1107.2516    // discuss at: http://phpjs.org/functions/base64_encode    // +   original by: Tyler Akins (http://rumkin.com)    // +   improved by: Bayron Guevara    // +   improved by: Thunder.m    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // +   bugfixed by: Pellentesque Malesuada    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // -    depends on: utf8_encode    // *     example 1: base64_encode('Kevin van Zonneveld');    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='    // mozilla has this native    // - but breaks in 2.0.0.12!    //if (typeof this.window['atob'] == 'function') {    //    return atob(data);    //}    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0,        ac = 0,        enc = "",        tmp_arr = [];     if (!data) {        return data;    }     data = this.utf8_encode(data + '');     do { // pack three octets into four hexets        o1 = data.charCodeAt(i++);        o2 = data.charCodeAt(i++);        o3 = data.charCodeAt(i++);         bits = o1 << 16 | o2 << 8 | o3;         h1 = bits >> 18 & 0x3f;        h2 = bits >> 12 & 0x3f;        h3 = bits >> 6 & 0x3f;        h4 = bits & 0x3f;         // use hexets to index into b64, and append result to encoded string        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);    } while (i < data.length);     enc = tmp_arr.join('');     switch (data.length % 3) {    case 1:        enc = enc.slice(0, -2) + '==';        break;    case 2:        enc = enc.slice(0, -1) + '=';        break;    }     return enc;}

function utf8_encode (argString) {
    // Encodes an ISO-8859-1 string to UTF-8  
    // 
    // version: 1107.2516
    // discuss at: http://phpjs.org/functions/utf8_encode    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // +   bugfixed by: Ulrich
    // +   bugfixed by: Rafal Kukawski
    // *     example 1: utf8_encode('Kevin van Zonneveld');    // *     returns 1: 'Kevin van Zonneveld'
    if (argString === null || typeof argString === "undefined") {
        return "";
    }
     var string = (argString + ''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
    var utftext = "",
        start, end, stringl = 0;
 
    start = end = 0;    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
         if (c1 < 128) {
            end++;
        } else if (c1 > 127 && c1 < 2048) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.slice(start, end);            }
            utftext += enc;
            start = end = n + 1;
        }
    } 
    if (end > start) {
        utftext += string.slice(start, stringl);
    }
     return utftext;
}
