
/*
 * Facebook Connect Library v1.1.0
 * Versión reducida
 * Juan Luis Suarez | Fecha: 06-08-2009 16:34:21
 * Revisión: 0908
 */


var callback_url = 'http://viajaconclase.thin.es/komunidad_dev.php/';

/*
 * Prompts the user to grant a permission to the application.
 */
function facebook_prompt_permission(permission, callbackFunc) {
  FB.ensureInit(function() {
    //check is user already granted for this permission or not
    FB.Facebook.apiClient.users_hasAppPermission(permission,
     function(result) {
        // prompt offline permission
        if (result == 0) {
            // render the permission dialog
            FB.Connect.showPermissionDialog(permission, callbackFunc);
        } else {
            // permission already granted.
            callbackFunc(true);
        }
    });
  });
}

function accesoFB(url)
{
  facebook_prompt_permission('publish_stream', function(accepted) {
    if(accepted) {
      //do something
      window.location.href = url;
    }
  });
}

/*
 * Actualiza cuadro user con datos de usuario
 *
 */
function update_user_box(uid) {

    var user_box = $("user");

    user_box.innerHTML =
        "<span>"
        + "<fb:profile-pic uid='loggedinuser' facebook-logo='true'></fb:profile-pic>"
        + "Bienvenido, <fb:name uid='loggedinuser' useyou='false'></fb:name>. Has iniciado sesión con su cuenta de Facebook."
        + "<a href='#' onclick='FB.Connect.logout(function() { refresh_page(); }); return false;' >Cerrar sesión</a>"
        + "</span>";

    // Procesar página
    FB.XFBML.Host.parseDomTree();
    load_friends(uid);
}

/*
 * Cargar cuadro de amigos.
 *
 */
function load_friends(uid)
{
    FB.XFBML.Host.autoParseDomTree = false;

    FB_RequireFeatures(["CanvasUtil"], function(){
        FB.CanvasClient.startTimerToSizeToContent();
    });
    var api = FB.Facebook.apiClient;
    api.fql_query("SELECT uid, first_name, last_name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = " + uid + ") order by first_name limit 12", function(result, ex) {

        data = "<table>";
        data += "<tr><td>AMIGOS</td></tr>";
        data += "<tr><td><hr width='90%'/></td></tr>";
        
        z = 0;

        for (i=0;i<3;i++) {
            data += "<tr>";

            for (j=0;j<4;j++) {
                
                data += "<td><div id='fb_connect_profile_pic'><fb:profile-pic uid='" + result[z].uid + "' facebook-logo='true' size='square' ></fb:profile-pic></div></td>";

                if (z == result.length){
                    break;
                }

                z++;
            }

            data += "</tr>";
        }
        data +="</table>";

//        $('#friends').css({
//            "background-color":"rgb(233, 231, 231)",
//            "color":"rgb(102, 102, 102)",
//            "height":"240px",
//            "width":"340px",
//            "border":"1px solid #ccc"
//        });
        //$('#friends').html(data);
//        document.setStyle('friends', styles) = "background-color:rgb(233, 231, 231);"+
//            "color:rgb(102, 102, 102);"+
//            "height:240px;"+
//            "width:240px;"+
//            "border:1px solid #ccc";
        $("friends").innerHTML = data;

        FB.XFBML.Host.parseDomTree();
    });
}

/*
 * Comment_Box
 * 
 */
function render_add_comment_box() {

    document.write("<span><fb:comments></fb:comments></span>");
}

/*
 * Enlace a un evento por su eid.
 * 
 */
function render_event_link(event_id) {   

    document.write("<fb:eventlink eid='" + event_id + "'></fb:eventlink>");
}

/*
 * Enlace a un grupo por su gid
 * 
 */
function render_group_link(group_id) {    

    document.write("<fb:grouplink gid='" + group_id + "'></fb:grouplink>");
}

/*
 * Control de permisos
 * <fb:prompt-permission perms="email, read_stream, publish_stream,
 * offline_access, status_update, photo_upload, create_event, rsvp_event, sms,
 * video_upload, create_note, share_item">Would you like to receive email from
 * our application?</fb:prompt-permission>
 */
function prompt_permission(permission) {
    FB.ensureInit(function() {
        FB.Connect.showPermissionDialog(permission);
    });
}

/*
 * Idem anterior, pero controla una retrollamada callback.
 * <fb:prompt-permission perms="email, read_stream, publish_stream,
 * offline_access, status_update, photo_upload, create_event, rsvp_event, sms,
 * video_upload, create_note, share_item">Would you like to receive email from
 * our application?</fb:prompt-permission>
 */
function grant_access(permission, callback)
{
    FB.ensureInit(function() {
        FB.Integration.showPermissionDialog(permission, callback);
    });
}

/*
 * Enlace a compartir.
 *
 */
function share_link (url) {

    document.write("<fb:share-button href='" + url + "'></fb:share-button>");
}

/*
 * Formulario personalizado para enviar un comentario.
 *
 */
function render_comment_form () {

    FB.XFBML.Host.autoParseDomTree = false;

    FB_RequireFeatures(["CanvasUtil"], function(){
        FB.CanvasClient.startTimerToSizeToContent();
    });

    var data = "<h3>añadir nuevo comentario:</h3>" +
        "<form method='POST'>" +
        "<div id='user'>" +
        "Name: <input name='name' size='27'><br />" +
        "<fb:login-button onlogin='update_user_box();'></fb:login-button>" +
        "</div>" +
        "<textarea name='comment' rows='5' cols='30'></textarea> <br />" +
        "<input type='submit' value='Publicar comentario'>" +
        "</form>";

    
    $('#comments_post').css({"overflow-y":"scroll", "height":"200px","width":"300px","border":"1px solid #ccc"});
    $('#comments_post').html(data);

    FB.XFBML.Host.parseDomTree();
}

/*
 * Prepara formulario de publicación en el muro.
 * No es necesario del todo.
 */
function render_publish_to_wall () {

    document.write("<div id='comments_post'><form method='POST'><div id='xuser'></div><input type='button' onclick='grant_access(/'publish_stream/', /'submit_comment/');' value='Publicar comentario'></form></div>");
}

/*
 * Publica comentario en el muro.
 * var attachment = {'media':[{'type':'image','src':'http://bit.ly/AJTnf','href':'http://bit.ly/hifZk'}]};
 * FB.Connect.streamPublish('', attachment);
 * FB.Connect.streamPublish('', attachment, null, 4)
 *
 * function callback (post_id, exception) {
 *  if(post_id) {
 *   post_to_my_server(post_id);
 *  }
 * }
 * FB.Connect.streamPublish('', attachment, null, null, 'What do you think?', callback);
 *
 */
function submit_comment()
{
    // EJEMPLOS de plantillas, se puede generalizar aún más esta función...
    //var template_var = {"flash":{"swfsrc":"some.swf","imgsrc":"some.jpg","width":"100","height":"80","expanded_width":"320","expanded_height":"260"}};
    var template_var = {
        'media':[{
                'type':'image',
                'src':'http://bit.ly/AJTnf',
                'href':'http://bit.ly/hifZk'
            }]
    };

    FB.ensureInit(function() {       
        FB.Connect.streamPublish('', template_var, null, 4)
    });
}

/*
 * Plantilla de feed desde FeedDialog.
 * El parámetro images debe recibir una ruta.
 */
function create_feed(post_title, post_url, comment, images ) {

    if(document.getElementById("publish_feed").checked){
        var template_data = {
            "post-title": post_title,
            "post-url": post_url,
            "comment": comment,
            "images": [{
                    "src":images,
                    "href":images
                }]
        }

        FB.ensureInit(function() {
            FB.Connect.showFeedDialog(74889112271, template_data);
        });
    }
}

/*
 * Enviar una notificación normal al usuario (tipo messenger).
 * uIds array de Facebook Ids, notification mensaje a enviar
 */
function send_notification(uIds, notification)
{
    var api = FB.Facebook.apiClient;
    var sequencer = new FB.BatchSequencer();
    var pendingNotificationsResult = api.notifications_send(uIds, notification, sequencer);
    sequencer.execute(function() {
        FB.FBDebug.dump(pendingNotificationsResult.result, '');
    });
}

/*
 * Enviar un correo directamente al usuario.
 * array de Facebook Ids
 */
function send_email(recipients, subject, body_plain_text, body_HTML )
{
    var api = FB.Facebook.apiClient;
    var sequencer = new FB.BatchSequencer();   

    var pendingNotificationsResult = api.notifications_sendEmail(recipients, subject, body_plain_text, body_HTML, function(result, exception){
        alert('Mensaje enviado correctamente.');
    });

    sequencer.execute(function() {
        FB.FBDebug.dump(pendingNotificationsResult.result, '');
    });
}

/*
 * Cuadro para invitar a amigos.
 * Esta función está en depuración.
 */
function server_invite_friends () {

    document.write("<fb:serverfbml style='width: 755px;'>" +
        "<script type='text/fbml'>" +
        "<fb:fbml>" +
        "<fb:request-form action='" + callback_url + "' " +
        "method='POST' invite='true' type='XFBML' content='This is a test invitation from XFBML test app<fb:req-choice url=\'see wiki page for fb:req-choice for details\' label=\'Ignore the Connect test app!\' />' > " +
        "<fb:multi-friend-selector " +
        "showborder='false' " +
        "actiontext='Invite your friends to use Connect.'>" +
        "</fb:request-form>" +
        "</fb:fbml>" +
        "</script>" +
        "</fb:serverfbml>");
}

/*
 * Cuadro de fans para una página.
 *
 */
function fan_box (fid, stream, conns, width) {
    
    //document.write("<fb:fan name='platform' stream='1' connections='8' width='250'></fb:fan>");
    document.write("<fb:fan name='" + fid + "' stream='" + stream + "' connections='" + conns + "' width='" + width +"'></fb:fan>");
}

/*
 * Cuadro live stream box de nuestra aplicación.
 *
 */
function live_stream_box (width, height) {    
    
    document.write("<fb:live-stream width='" + width + "' height='" + height + "'></fb:live-stream>");
}

/*
 * Realizar una consulta a Facebook.
 * Esta función está en depuración.
 */
function js_query(sql) {

    var api = FB.Facebook.apiClient;
    api.fql_query(sql, function(result, ex) {

        return result;
    });

    return null;
}

/*
 * Refrescar página.
 *
 */
function refresh_page() {
  window.location = callback_url;
}

/*
 * Cerrar sesión Facebook y Symfony
 *
 */
function logout_fbsf(url)
{
  FB.Connect.logout(function(){
    window.location = url;
  });
}

/*
 * Cerrar sesión.
 *
 */
function logout () {   

    document.write("<a href='#' onclick='FB.Connect.logout(function() { refresh_page(); }); return false;' ><img id='fb_logout_image' src='http://static.ak.fbcdn.net/images/fbconnect/logout-buttons/logout_small.gif' alt='Connect'/></a>");
}