var _timeoutID; // time out delay
var _uid;
var _users;

$('document').ready(function() {
    Nom.showMessage("Loading...", "loading");
    Nom.renderDashboard();
    Nom.loadQuestions();
});

var Nom = {
    renderDashboard: function () {
        var uid = $('#hidden_uid').val();
        var filter = /\s+$/;
        _uid = parseInt(uid.replace(filter,''));

        $.each(_users, function (i, user) {
            var name = user.first_name + "&nbsp;" + user.last_name[0] + ".";
            var el = Nom.createPerson(user.user_id, name, user.facebook);
            $("#persons").append(el);
        });

        $('#privacy').bind('click', function () {
            if ($(this).hasClass('private')) { 
                $(this).removeClass('private').addClass('public').attr('title', 'Public');
            } else {
                $(this).removeClass('public').addClass('private').attr('title', 'Private');
            }
        });

        $('#question_submit').bind('click', function () {
            if (!$(this).hasClass('disabled')) {
                $(this).addClass('disabled').val("Sending...");

                var question = $("#question_input").val();
                
                var persons_count = $('#persons .person.selected').length;
                var persons_ids = "";
                if (persons_count != 0) {
                    $.each($('#persons .person.selected'), function (i, selection) {
                        var c = $(selection).find('.uid');
                        c = $(c).val();
                        var person_id = "";
                        $.each(_users, function (i, user) {
                            if (user.user_id == parseInt(c)) {
                                person_id = user.user_id;
                            }
                        });
                        persons_ids = persons_ids + person_id.toString();
                        if (i != persons_count - 1) {
                            persons_ids = persons_ids + ",";
                        }
                    });
                }
                
                if (question != "" && persons_count != 0) {
                    $.ajax({
                        type: "POST",
                        url: "api/create_question.php",
                        dataType: "json",
                        data: {
                            question: question,
                            persons: persons_ids,
                            user_id: _uid
                        },
                        success: function(response) {
                            $('#question_submit').removeClass('disabled').val("Ask");
                            $('#question_input').val("");

                            $('#persons .person').removeClass('selected');
                            
                            if (response.error) {
                                Nom.showMessage(response.error, "error");
                            } else {
                                Nom.showMessage('Question asked!', "success");
                            }
                        },
                        error: function() {
                            $('#question_submit').removeClass('disabled').val("Ask");
                            Nom.showMessage("There was an error.", "error");
                        }
                    });
                } else {
                    $('#question_submit').removeClass('disabled').val("Ask");
                    if (persons_count == 0) {
                        Nom.showMessage("Whoa, pick some people to ask!", "error");
                    } else {
                        Nom.showMessage("All fields are required.", "error");                                
                    }
                }
            }        
        });
    },

    loadQuestions: function (offset) {
        $.ajax({
            type: "POST",
            url: "api/load_questions.php",
            dataType: "json",
            data: {
                user_id: _uid,
                offset: offset
            },
            success: function(response) {
                if (response.error) {
                    Nom.showMessage(response.error, "error");
                } else {
                    // $('#questions').empty();
                    Nom.hideMessage();
                    Nom.renderQuestions(response);
                }

                window.setTimeout(Nom.loadMoreQuestions, 10000);
            },
            error: function(request, status, error) {
                Nom.showMessage("There was an error. Refresh to try again.", "error");
            }
        });
    },

    loadMoreQuestions: function () {
        var newest = $('.question')[0];
        var offset = $(newest).attr('id');
        if (!offset) { offset = 0; } else { offset = parseInt(offset); }
        Nom.loadQuestions(offset);
        
    },

    createPerson: function (id, name, facebook) {
        var person_el = $('<div class="person loading"><span class="pictos checked"></span></div>');
        var thumb_el = $('<img />');
        var uid_el = $('<input class="uid" type="hidden" value="' + id + '" />');

        person_el.tip(name);
        person_el.bind('click', function () {
            if (!$(this).hasClass('selected')) {
                $(this).addClass('selected');
            } else {
                $(this).removeClass('selected');
            }
        });

        thumb_el.load(function () {
            person_el.removeClass('loading');
            $(this).show();
        });

        thumb_el.hide();
        
        if (facebook != 0) {
            thumb_el.attr('src', 'https://graph.facebook.com/' + facebook + '/picture');
        } else {
            thumb_el.attr('src', 'css/images/default.jpg');
        }
        person_el.append(thumb_el).append(uid_el);  

        return person_el;      
    },

    renderQuestions: function (questions) {
        $.each(questions, function (i, question) {
            var el = $("<li class='question' id='" + question.question_id + "'></li>");
            var content_el = $("<div class='content'></div>");

            var question_el = $("<div class='q'>" + question.question + "</div>");

            var sender_el = Nom.createPerson(question.sender_id, question.name, question.facebook);
            sender_el.unbind();

            var time_el = $('<div class="date"></div>')
            time_el.text(secondsToDate(question.created));

            var response_el = $("<div class='response'></div>");

            // -----------------------------------------------------------------
            // Set up answers
            // -----------------------------------------------------------------

            var answers_el = $("<table class='answers'><thead><tr><th>Yes</th><th>Undecided</th><th>No</th></tr></thead><tbody><tr><td class='left'></td><td class='middle'></td><td class='right'></td></tr></tbody></table>");

            var finished = true;
            $.each(question.children, function (i, child) {
                // {"answer":"null","receiver_id":4,"facebook":"8304159","name":"Thomas M."}
                var person = Nom.createPerson(child.receiver_id, child.name, child.facebook);
                person.unbind();
                     
                if (child.answer == null) {
                    finished = false;
                    person.addClass("unanswered");
                    answers_el.find('.middle').append(person);
                }
                
                if (child.answer == 1) {
                    answers_el.find('.left').append(person);
                }

                if (child.answer == 0) {
                    answers_el.find('.right').append(person);
                }

                if (child.receiver_id == _uid && child.answer == null) {
                    var option_el = $('<div class="options"></div>');
                    var yes_el = $('<button class="option yes" href="#">Yes</button>');
                    var no_el = $('<button class="option no" href="#">No</button>');
                
                    $(yes_el).bind('click', function () {
                        $.ajax({
                            type: "POST",
                            url: "api/answer_question.php",
                            dataType: "json",
                            data: {
                                user_id: _uid,
                                question_id: question.question_id,
                                answer: 1
                            },
                            success: function(response) {
                                if (response.error) {
                                    // Nom.showMessage(response.error, "error");
                                } else {
                                    location.reload(true);
                                }
                
                                //window.setTimeout(loadActivities, 10000);
                            },
                            error: function(request, status, error) {
                                Nom.showMessage("There was an error. Refresh to try again.", "error");
                            }
                        });
                    });
                
                    $(no_el).bind('click', function () {
                        $.ajax({
                            type: "POST",
                            url: "api/answer_question.php",
                            dataType: "json",
                            data: {
                                user_id: _uid,
                                question_id: question.question_id,
                                answer: 0
                            },
                            success: function(response) {
                                if (response.error) {
                                    // Nom.showMessage(response.error, "error");
                                } else {
                                    location.reload(true);
                                }
                
                                //window.setTimeout(loadActivities, 10000);
                            },
                            error: function(request, status, error) {
                                Nom.showMessage("There was an error. Refresh to try again.", "error");
                            }
                        });
                    });
                        
                    option_el.append(yes_el).append(no_el);
                    response_el.append(option_el);
                }
            });
            
            if (finished) {
                $(el).addClass('finished');
            }
            
            content_el.append(sender_el).append(question_el).append(time_el).append(response_el).append(answers_el);
            el.append(content_el);

            el.append('<div class="cb"></div>');
            $('#questions').prepend(el);
        });
    },

    // renderDays: function () {
    //     $('#questions .day').remove();
    // 
    //     var today = getToday();
    //     var yesterday = getYesterday();
    // 
    //     var top = $('.link')[0];
    //     var date = $(top).find('.date').text();
    //     
    //     if (date == today) { date = "Today"; }
    //     if (date == yesterday) { date = "Yesterday"; }                
    //     $(top).before('<span class="day">' + date + '</span>')
    // 
    //     $.each($('.question'), function (i, link) {
    //         if (i != $('.link').length - 1) {
    //             var next = $(link).next();
    //             var next_day = $(next).find('.date').text();
    //             var current_day = $(link).find('.date').text();
    //         
    //             if (next_day != current_day) {
    //                 if (next_day == today) { next_day = "Today"; }
    //                 if (next_day == yesterday) { next_day = "Yesterday"; }
    // 
    //                 $(link).after('<span class="day">' + next_day + '</span>')
    //             }
    //         }
    //     });
    // },

    showMessage: function (msg, type, fn) {
        Nom.clearDelay();

        if (type == "error") { $("#message").attr("class", "error"); }
        if (type == "loading") {
            $("#header .loader").addClass("loading");
        } else {
            $("#header .loader").removeClass("loading");
        }

        if (fn) { $("#message").bind("click", function () { fn(); }); }

        $("#message").unbind().html(msg);
    },

    hideMessage: function () {
        Nom.clearDelay();
        $('#message').attr("class", "");
        $("#header .loader").removeClass("loading");
    },

    clearDelay: function () {
        window.clearTimeout(_timeoutID);
        delete(_timeoutID);
    }
};
