var icCms = {
    //shoutbox management
    ShoutBox : {
        listTarget: null,
        listUrl: null,
        listParams: {
            type: null,
            time: null
        },

        createShoutboxMessage: function (shoutbox_message) {
            var self = this;
            var messageElt = $("<p />");
            messageElt.attr({"class" : "message_body"});
            messageElt.html(shoutbox_message.message);

            var dateElt = $("<p />");
            dateElt.attr({"class" : "date"});
            dateElt.html(shoutbox_message.formatted_created_at);

            var userElt = $("<p />");
            userElt.attr({"class" : "signature"});
            userElt.html('<span class="prenom">'+shoutbox_message.firstname + "</span> , " + shoutbox_message.zipcode);

            var node = $("<div />")
                .attr({
                    "class" : "message"
                })
                .append(messageElt)
                .append(dateElt)
                .append(userElt);

            return node;
        },

        setListConfig : function(target, url, params){
            var self = this;
            self.listTarget = target;
            self.listUrl = url;
            self.listParams = params;
        },

        refreshList: function(){
            var self = this;
            if (self.listTarget != '' && self.listTarget != 'Undefined' && self.listUrl != '' && self.listUrl != 'Undefined'){
                $.ajax({
                    type : "GET",
                    cache : false,
                    url : self.listUrl,
                    data : self.listParams,
                    success: function(data) {
                        var target = $('div.' + self.listTarget);
                        for (var i in data) {
                            var msgObj = data[i];
                            var message = self.createShoutboxMessage(msgObj);
                            target.prepend($('<div class="separateur clear"></div>'));
                            target.prepend(message );
                        }
                    }
                })
            }
        },

        initNew: function(sourceLink, formId, refreshList){
            var self = this;
            $("textarea.shoutbox_message").bind("keyup", function(event)
            {
                var field = $(this),
                    value = field.val();

                if (value.length >= 500) {
                    value = value.slice(0, 500);
                    field
                        .addClass("toolong")
                        .val(value);
                } else if (field.hasClass("toolong")) {
                    field.removeClass("toolong");
                }
            });

            // clear or set Help value
            $("textarea.shoutbox_message").focusin(function(){
                if ($(this).val() == 'Écrire votre message de soutien')
                {
                    $(this).val('');
                }
            });

            $("textarea.shoutbox_message").focusout(function(){
                if ($(this).val() == '')
                {
                    $(this).val('Écrire votre message de soutien');
                }
            });

            $(sourceLink).fancybox({
                showCloseButton  : true,
                scrolling : false ,
                padding: 25,
                width: 500,
                autoDimensions: false,
                onStart : function(links, index){
                    var parent = $(links[index]).parent();
                    var messageElt= parent.find('textarea.shoutbox_message');
                    var message = messageElt.val();
                    var errorDiv = parent.find('div.shoutbox_message_error_container');

                    //raise error in first form
                    if (message.length <= 0)
                    {
                        errorDiv.html('<span class="shoutbox_message_error">Vous devez saisir un message.</span>');
                        $.fancybox.cancel();
                        return false;
                    }

                    //delete errors
                    errorDiv.html('');
                    $("div.shoutbox_form_error").html('');

                    // insert message field into 2nd form
                    $(formId+' input[name="shoutbox_message[message]"]').val(message);
                },
                onCleanup: function(links, index){
                    //reset some form fields
                    var parent = $(links[index]).parent();
                    var messageElt= parent.find('textarea.shoutbox_message');
                    messageElt.val(null);

                    //reset fields
                    var fields = [
                        'message',
                        'firstname',
                        'lastname',
                        'zipcode',
                        'email',
                    ];

                    for (var i in fields) {
                        $(formId+' input[name="shoutbox_message['+fields[i]+']"]').val(null);
                    }
                }
            });

            $(formId+" form").bind("submit", function() {
                //delete errors
                $("div.shoutbox_form_error").html('');
                $.fancybox.showActivity();

                $.ajax({
                    type : "POST",
                    cache : false,
                    url : $(this).attr('action'),
                    data : $(this).serializeArray(),
                    success: function(data) {
                        // confirm fancy box
                        $.fancybox('<div class="popup"><div>Merci, nous avons bien enregistré votre message</div></div>', {
                            showCloseButton  : true,
                            scrolling : false
                        });

                        if (refreshList) {
                            //refresh shoutbox list
                            self.refreshList();
                        }
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        $.fancybox.hideActivity();
                        var responseJson = JSON.parse(jqXHR.responseText);
                        var errors = responseJson['errors'];
                        //display errors in fancybox
                        for (var index in errors)
                        {
                            var error = errors[index];
                            $('div#'+error['id']+'_error.shoutbox_form_error').html(error['error']);
                        }
                    }
                });

                return false;
            });
        }
    },

    // Cms Comment
    Comment: {
        initNew: function(sourceLink, formId, facebook_app_id, refreshList, listUrl){
            if (!$("#facebook-jssdk").size()) {
                $("<script />", {"id": "facebook-jssdk", "src": "//connect.facebook.net/fr_FR/all.js", "async": true})
                .appendTo("head");
            }

            var FacebookConnect = {
                init: function init_facebook_connect() {
                    FB.init({
                        "appId"      : facebook_app_id,
                        "status"     : true,
                        "cookie"     : true,
                        "oauth"      : true,
                        "xfbml"      : true
                    });
                },

                connect: function()
                {
                    FB.login(function(response) {
                        if(response.authResponse)
                        {
                            var user_id = response.authResponse.userID;

                            FB.api("/" + user_id, function(whois) {

                                $("#post_comment_form")
                                    .find("#cms_comment_facebook_id").val(user_id).end()
                                    .find("#cms_comment_lastname").val(whois.last_name).end()
                                    .find("#cms_comment_firstname").val(whois.first_name).end()
                                    .find("#cms_comment_email").val(whois.email).end()
                                $("#facebook-connect-btn").remove();
                            });
                        }
                    }, {"scope": "email,user_birthday"});
                }
            };

            window.fbAsyncInit = FacebookConnect.init;

            $("#facebook-connect-btn").bind("click", function(event) {
                FacebookConnect.connect();

                event.stopPropagation();
                event.preventDefault();
            });

            // comment form fancy box
            $(sourceLink).fancybox({
                showCloseButton  : true,
                scrolling : false ,
                padding: 25,
                onStart : function(links, index){
                    var parent = $(links[index]).parent();
                    var messageElt= parent.find('textarea#comment_content');
                    var message = messageElt.val();
                    var errorDiv = parent.find('div.comment_content_error_container');

                    //raise error in first form
                    if (message.length <= 0)
                    {
                        errorDiv.html('<span class="comment_content_error">Vous devez saisir un commentaire.</span>');
                        $.fancybox.cancel();
                        return false;
                    }

                    //delete errors
                    errorDiv.html('');
                    $("div.post_comment_error").html('');

                    // insert message field into 2nd form
                    $(formId+' input[name="cms_comment[message]"]').val(message);
                },
                onCleanup: function(links, index){
                    //reset first form comment content field
                    var parent = $(links[index]).parent();
                    var messageElt= parent.find('textarea#comment_content');
                    messageElt.val(null);

                    //reset 2nd form fields
                    var fields = [
                        'message',
//                        'firstname',
//                        'lastname',
//                        'zipcode',
//                        'email',
//                        'facebook_id',
                        'id'
                    ];

                    for (var i in fields) {
                        $(formId+' input[name="cms_comment['+fields[i]+']"]').val(null);
                    }
                }
            });

            // comment form  submission
            $(formId+" form").bind("submit", function() {
                //delete errors
                $("div.post_comment_error").html('');
                $.fancybox.showActivity();

                $.ajax({
                    type : "POST",
                    cache : false,
                    url : $(this).attr('action'),
                    data : $(this).serializeArray(),
                    success: function(data) {
                        // confirm fancy box
                        $.fancybox('<div class="popup"><div>Merci, nous avons bien enregistré votre commentaire</div></div>', {
                            showCloseButton  : true,
                            scrolling : false
                        });

                        // disply new comment immediately
                        if (refreshList) {
                            icCms.Comment.displayNewComments(listUrl);
                        }
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        $.fancybox.hideActivity();
                        var responseJson = JSON.parse(jqXHR.responseText);
                        var errors = responseJson['errors'];
                        //display errors in fancybox
                        for (var index in errors)
                        {
                            var error = errors[index];
                            $('div#'+error['id']+'_error.post_comment_error').html(error['error']);
                        }
                    }
                });

                return false;
            });
        },

        displayOlder: function(baseUrl) {
            $("#more-comments").bind("click", function(event) {
                event.stopPropagation();
                event.preventDefault();
                var that = $(this);
                var url = that.attr('href');

                if (that.data("loading")) {
                    return;
                }

                that.data("loading", true);
                $.getJSON(url, { }, function(results) {
                    that.data("loading", false);
                    $(results.comments).appendTo("#comments-block");

                    if (!results.has_more_pages) {
                        that.parents(".fd-more_link").remove();
                    }
                    else
                    {
                        that.attr('href', baseUrl+'?page='+results.next_page)
                    }
                });
            });
        },

        displayNewComments: function (url) {
            $.getJSON(url, { }, function(results) {
                if (results.nb_results > 0) {
                    $('p.no-comments').hide();
                    $(results.comments).prependTo("#comments-block");
                }
            });
        }
    },


    // team
    Staff: {
        detailledId : null,

        getGallery: function () {
            $('.team_pager a').click(function(e){
                e.preventDefault();
                var linkUrl = $(this).attr('href');

                $.getJSON(
                    linkUrl,
                    {
                        remove_id : icCms.Staff.detailledId
                    },
                    function(data){
                        if ($.isPlainObject(data)) {
                            icCms.Staff.updateGallery(data);
                        }
                    }
                );

            });
        },

        updateGallery: function(data) {
            var gallery = $('div#equipe-gallery-list');
            //update pager links
            gallery.find('.prev.team_pager a').attr('href', data.previousUrl);;
            gallery.find('.next.team_pager a').attr('href', data.nextUrl);

            //update member tags
            gallery.find('li.membre').each(function(index, element){
                var elt = $(element);
                if (index in data.equipe) {
                    icCms.Staff.updateGalleryElement(elt, data.equipe[index])
                    elt.show();
                }
                else {
                    elt.hide();
                }
            });
        },

        updateGalleryElement: function(elt, person) {
            elt.find('a.team_details_link').attr('href', person.detailUrl);
            var img = elt.find('img.gallery-membre-photo');
            img.attr('src', person.imageSmall);
            img.attr('title', person.name);
            img.attr('alt', person.name);
        },

        getDetails: function () {
            $('a.team_details_link').click(function(e){
                e.preventDefault();
                var linkUrl = $(this).attr('href');

                $.getJSON(
                    linkUrl,
                    {},
                    function(data) {
                        if ($.isPlainObject(data.person)) {
                            icCms.Staff.updateDetails(data.person);
                        }
                    }
                );
            });
        },

        updateDetails: function(person){
            var detailElt = $('#equipe-membre');

            var detailPhoto  = detailElt.find('img.membre-photo');
            detailPhoto.attr('src', person.imageDetail);
            detailPhoto.attr('title', person.name);
            detailPhoto.attr('alt', person.name);

            var detailName  = detailElt.find('.membre-name');
            detailName.html(person.name);

            var detailPoste  = detailElt.find('.membre-poste');
            detailPoste.html(person.poste);

            var detailDesc  = detailElt.find('.membre-description');
            detailDesc.html(person.description);

            var detailFb  = detailElt.find('.membre-facebook');
            var detailFbLink  = detailFb.find('a.fb');
            if (person.facebook.length > 0) {
                detailFbLink.attr('href', person.facebook);
                detailFb.show();
            }
            else {
                detailFbLink.attr('href', '');
                detailFb.hide();
            }

            var detailTw  = detailElt.find('.membre-twitter');
            var detailTwLink  = detailTw.find('a.tw');
            if (person.twitter.length > 0) {
                detailTwLink.attr('href', 'http://twitter.com/#!/'+person.twitter);
                detailTw.show();
            }
            else {
                detailTwLink.attr('href', '#');
                detailTw.hide();
            }

            var detailGp  = detailElt.find('.membre-googleplus');
            var detailGpLink  = detailGp.find('a.gplus');
            if (person.googleplus.length > 0) {
                detailGpLink.attr('href', 'https://plus.google.com/'+person.googleplus);
                detailGp.show();
            }
            else {
                detailGpLink.attr('href', '');
                detailGp.hide();
            }
        }
    },

    //contact V1 registration
    Contact : {
        initNew: function(){
            $("form#contact-registration").bind("submit", function() {
                $("div.contact_registration_form_error").html('');

                $.ajax({
                    type : "POST",
                    cache : false,
                    url : $(this).attr('action'),
                    data : $(this).serializeArray(),
                    success: function(data) {
                        // confirm fancy box
                        $('#home-registration-form').remove();
                        $('#launch-party').css('width','590px'); 
                        $('#launch-party').css('text-align', 'center'); 
                        
                        $.fancybox('<div class="popup"><div>Merci, nous avons bien enregistré vos coordonnées.</div></div>', {
                            showCloseButton  : true,
                            scrolling : false
                        });
                    },
                    error: function(jqXHR, textStatus, errorThrown) {
                        var responseJson = JSON.parse(jqXHR.responseText);
                        var errors = responseJson['errors'];
                        //display errors in fancybox
                        for (var index in errors)
                        {
                            var error = errors[index];
                            $('div#'+error['id']+'_error.contact_registration_form_error').html(error['error']);
                        }
                    }
                });
                return false;
            });
        }
    },

    Search: {
      init: function(searchSelector, formSelector){
        var width_input = $(searchSelector).css('width');
        var width_container = $(formSelector).css('width');

        $(searchSelector).live('focus', function(){
                $(formSelector).css('width','auto');
                $(this).stop(true, false).animate({
                    width: 125
                }, 600);
        });

        $(searchSelector).live('focusout', function(){
            $(this).animate({
                    width: width_input
                },
                600,
                function(){
                    $(formSelector).css('width', width_container);
                }
            );
        });
      }
    },

    Form: {
        placeholder: function(elt){

            $(elt).each(function(){
                var initValue = $(this).val();
                $(this).bind('focus',function(){
                    if ($(this).val() == initValue) {
                        $(this).val('');
                    }
                });

                $(this).bind('focusout',function(){
                    if ($(this).val() == '') {
                        $(this).val(initValue);
                    }
                });

            });
        }
    },

    Fancy: {
        iframe: function (selector, options) {
            var defaults = {
                autoDimensions: true,
                width: 640
            };
            options = $.extend({}, defaults, options);
            $(selector).fancybox(options);
        }
    },

    Assignment: {
        initFold: function (){
            $('.deplier-action').toggle(function(){
                var element = $(this).attr('href');
                $(element+' .descriptif').slideDown();
                $(element+' .descriptif .supprimer-action').fadeIn(1000);
            },function(){
                var element = $(this).attr('href');
                $(element+' .descriptif').slideUp();
                $(element+' .descriptif .supprimer-action').hide();
            });
        },

        initFancy: function (){

        },

        initRefuse: function (){
            var current_assignment;
            $("a.assignment_refuse_link").fancybox({
                "type": "iframe",
                "title": "Refuser une tâche",
                "onComplete": function() {
                    current_assignment = this.orig;
                }
            });

            $(window)
            .bind("assignment.refused", function(event) {
                // Refresh as soon as "assignment.refused" is triggered
                // a lot of things to update
                window.location.reload(true);
            })
            .bind("avatar.updated", function(event, path) {
                $(".my_avatar").attr("src", path);
            });

            $(".participation-link").fancybox({
                "titleShow": false,
                "type": "inline",
                "onStart": function() {
                    $("#assignment-thanking-box").show();
                },
                "onCleanup": function() {
                    $("#assignment-thanking-box").hide();
                },
                "onComplete": function() {
                    var link = $(this.orig);

                    var
                        title = link.data("title"),
                        lien = link.data("lien"),
                        image = link.data("image"),
                        /*nom = link.data("nom"),
                        legende = link.data("legende"),
                        description = link.data("description"),*/
                        nom = 'ceci est le nom',
                        legende = 'Partager cette action sur Facebook !',
                        description = 'ceci est la description',
                        message = 'ceci est le message',
                        redirection = link.data("redirection");

                    // Recreating facebook sharing link

                    /*
<a href="http://www.facebook.com/dialog/feed?app_id=<?php echo sfConfig::get('app_facebook_app_id') ?>&link=<?php echo $lien ?>&picture=<?php echo $image ?>&name=<?php echo $nom ?>&caption=<?php echo $legende ?>&description=<?php echo $description ?>&message=<?php echo $message ?>&redirect_uri=<?php echo $redirection ?>" target="_blank">
                    <img src="/volontaires_v2/images/facebookshare.png" alt="Partager sur Facebook"/>
                </a>
                    */
                    var facebook_share = $("#facebook-share-assignment"); //.clone(true).removeAttr("id");
                    var href = facebook_share.attr("href")
                            + encodeURIComponent("&link=" + lien
                                + "&picture=" + image
                                + "&name=" + nom
                                + "&caption=" + legende
                                + "&description=" + description
                                + "&message="  + message);

                    facebook_share
                        .attr("href", href)
                        .addClass("facebook_share_current_link")
                        .show()
                        .prependTo($("#assignment-thanking-box").find("li.facebook"));

                    $("#assignment-thanking-box").find("span.points").text(""+link.data("points")).end()

                    $.get(link.data("participate-url"), function(event) {
                        link.parents("div.action").remove();
                    }).error(function(jqXHR, textStatus, errorThrown) {
                        if (401 == jqXHR.status) {
                            alert("Votre session a expiré, veuillez vous reconnecter avant de valider de nouveau votre participation.");
                            window.location.reload(true);
                        } else if (409 == jqXHR.status) {
                            // volunteer are not supposed to participate twice
                            $.fancybox.close();
                            window.location.reload(true);
                        }
                    });

                },
                "onClosed": function() {
                    // Refresh once the window is closed as there are
                    // a lot of things to update
                    $(".facebook_share_current_link").remove();
                    window.location.reload(true);
                }
            });
        }
    }
};

