(function($) {
    // ajax default options
    $.ajaxSetup({
       dataType: "text/json",
       error: function(){
           alert("Network Error! Please try again.");
       }
     });

    $(document).ready(function() {
        $(".mini-search-form .location").change();
        $.ui.dialog.defaults.bgiframe = true;
        //$("#dialog").dialog({ bgiframe: true });
        
//        $('#facebox').livequery(function() {
//           $(this).bgiframe();
//        });
        
//        $('a[rel*=facebox]').livequery(function() {
//           $(this).facebox();
//           return false;
//        });
    });

    // autoresize text box.
    (function(a){a.fn.autoResize=function(j){var b=a.extend({onResize:function(){},animate:true,animateDuration:150,animateCallback:function(){},extraSpace:20,limit:1000},j);this.filter('textarea').each(function(){var c=a(this).css({resize:'none','overflow-y':'hidden'}),k=c.height(),f=(function(){var l=['height','width','lineHeight','textDecoration','letterSpacing'],h={};a.each(l,function(d,e){h[e]=c.css(e)});return c.clone().removeAttr('id').removeAttr('name').css({position:'absolute',top:0,left:-9999}).css(h).attr('tabIndex','-1').insertBefore(c)})(),i=null,g=function(){f.height(0).val(a(this).val()).scrollTop(10000);var d=Math.max(f.scrollTop(),k)+b.extraSpace,e=a(this).add(f);if(i===d){return}i=d;if(d>=b.limit){a(this).css('overflow-y','');return}b.onResize.call(this);b.animate&&c.css('display')==='block'?e.stop().animate({height:d},b.animateDuration,b.animateCallback):e.height(d)};c.unbind('.dynSiz').bind('keyup.dynSiz',g).bind('keydown.dynSiz',g).bind('change.dynSiz',g)});return this}})(jQuery);

    /**
     * Apply placeholder effect in all input and textarea element.
     * 
     */
    function adjustPlaceholder(element) {        
        $(element).find("label.placeholder").each(function(){
            inputElement = $(this).next();
            var labelText = $(this).hide().text();
            inputElement.addClass('placeholder').val(labelText).focus(function() {
              if (this.value == labelText) {
                 $(this).removeClass('placeholder').val('');
              };
            }).blur(function() {
              if (this.value == '') {
                 $(this).addClass('placeholder').val(labelText);
              };
            });
        });
    }

    /**
     * Load wall element.
     * 
     */
    function loadWall(element) {
        // Load wall content.
        $(element).find("div.wall").each(function(){

            var wallElement = $(this);
            var wallId = wallElement.attr("rel");
            if (!wallId) {
                var params = "{type:\"" + wallElement.attr("type") + "\",name:\"" + wallElement.attr("name") + "\",userId:" + wallElement.attr("user") + "}";

                $.ajax({
                    type: "GET",
                    url: "/g/wall_posts/index/0/" + wallElement.attr("type") + "/" + wallElement.attr("name") + "/" + wallElement.attr("user"),
                    data: params,
                    dataType: "text/html",
                    success: function(responseJson){

                            var response = eval("(" + responseJson + ");");

                            if (response.result == true) {
                                wallElement.append(response.data.html);
                                wallElement.find(":submit").removeAttr("disabled");
                                adjustPlaceholder(wallElement);
                                wallSubmitCallback(wallElement);
                            } else {
                                alert(response.errorMessage);
                            }
                        }

                });
                
            } else {
                wallElement.find(":submit").removeAttr("disabled");
                adjustPlaceholder(wallElement);
                wallSubmitCallback(wallElement);
            }

            return;
        });
        
        return;
    }


    function wallSubmitCallback(element) {
        // wall ajax anchor
        $(element).find("a.ajax").click(function(){
            var anchorElement = $(this);

            if (anchorElement.hasClass("wall-post-delete")) {
                $.ajax({
                    type: "GET",
                    url: anchorElement.attr("href"),
                    dataType: "text/json",
                    success: function(html){
                            var response = eval("(" + html + ");");

                            if (response.result == true) {
                                if (response.data.post) {
                                    anchorElement.parents("div.post").remove()
                                } else {
                                    anchorElement.parents("div.comment").remove();
                                }
                                
                            } else {
                                alert(response.errorMessage);
                            }
                        }

                });
                
            }


            // wall paginator
            if(anchorElement.hasClass("wall-paginate")) {
                anchorElement.next("span.loading").show();
                // do ajax call
                $.ajax({
                    type: "GET",
                    url: anchorElement.attr("href"),
                    dataType: "text/json",
                    success: function(html){
                            
                            var response = eval("(" + html + ");");

                            anchorElement.next("span.loading").hide();

                            if (response.result == true) {
                                wallPostElement = anchorElement.parent().prev(".wall-posts");
                                var lastItemIndex = wallPostElement.children("div.post").length;
                                
                                wallPostElement.append(response.data.html)

                                // update anchor
                                anchorElement.parent().append(response.data.next);
                                var newAnchor = anchorElement.next().next("a");
                                if (newAnchor.hasClass("wall-paginate")) {
                                    anchorElement.attr("href", newAnchor.attr("href"));
                                    newAnchor.remove();
                                } else {
                                    anchorElement.remove();
                                }                                

                                adjustPlaceholder(wallPostElement);
                                wallSubmitCallback(wallPostElement.children("div.post:gt(" + (lastItemIndex - 1) + ")"));

                            } else {
                                alert(response.errorMessage);
                            }
                        }

                });
            }


            return false;
        });

        

        // Wall post form submit.
        $(element).find("div.wall-form form").submit(function() {
            
            var formElement = $(this);
            var wallElement = formElement.parent().parent();

            // doesn't submit if place holder exists
            if ($(this).children("textarea").hasClass("placeholder")) {
                return false;
            }

            formElement.children(":submit").attr("disabled", "disabled");

            formElement.children("span.loading").show();

            $.ajax({
                    type: "POST",
                    url: formElement.attr("action"),
                    data: formElement.serialize(),
                    dataType: "text/json",
                    success: function(html){
                            var response = eval("(" + html + ");");
                            formElement.children("span.loading").hide();

                            if (response.result == true) {
                                
                                if (response.data.WallPost.isBlog) {
                                    // add blog post
                                    wallElement.children("div.wall-posts").prepend("<div class=\"post\"> " +
                                                                "<div class=\"row\">" +
                                                                    "<div class=\"column\" style=\"width: 48px; margin-right: 0px\">" +
                                                                        "<img src=\"" + response.data.Profile.photo + "\">" +
                                                                    "</div>" +
                                                                    '<div class="column-right" style="width: 100px;">' +
                                                                        '<ul class="control-right">' +
                                                                            '<li>' +
                                                                                response.data.WallPost.deleteAction +
                                                                           ' </li>' +
                                                                        '</ul>' +
                                                                    '</div>' +
                                                                    "<div class=\"column fluid last\">" +
                                                                        "<div class=\"inner\" style=\"margin-left: 54px; margin-right: 115px\">" +
                                                                            '<div class="post-title">' +
                                                                                '<h2>' + response.data.WallPost.title + '</h2>' +
                                                                            '</div>' +
                                                                            '<div class="post-meta hints">' +

                                                                                    'by ' + response.data.User.link +
                                                                                    response.data.WallPost.timeInAgoWords +
                                                                                    '- 0 comment' +
                                                                            '</div>' +
                                                                            '<div class="post-content">' +
                                                                                response.data.WallPost.content +
                                                                            '</div>' +
                                                                        "</div>" +
                                                                    "</div>" +
                                                                "</div>" +
                                                            "</div>").children("div:first").hide().fadeIn("slow").parent().children("div:gt(9)").fadeOut();
                                                        
                                } else {
                                    // show normal wall post
                                    wallElement.children("div.wall-posts").prepend("<div class=\"post\"> " +
                                                                "<div class=\"row\">" +
                                                                    "<div class=\"column\" style=\"width: 48px; margin-right: 0px\">" +
                                                                        "<img src=\"" + response.data.Profile.photo + "\">" +
                                                                    "</div>" +
                                                                    '<div class="column-right" style="width: 100px;">' +
                                                                        '<ul class="control-right">' +
                                                                            '<li>' +
                                                                                response.data.WallPost.deleteAction +
                                                                           ' </li>' +
                                                                        '</ul>' +
                                                                    '</div>' +
                                                                    "<div class=\"column fluid last\">" +
                                                                        "<div class=\"inner\" style=\"margin-left: 54px; margin-right: 115px\">" +
                                                                            "<div class=\"post-content\">" +
                                                                                response.data.User.link + " " +
                                                                                response.data.WallPost.content +
                                                                            "</div>" +
                                                                            "<div class=\"post-meta hints\">" + response.data.WallPost.timeInAgoWords +
                                                                                ' - <a href="#" onclick="$(\'#wall-comment-form-' + response.data.WallPost.id + '\').toggle(); return false;">Write Comment</a>' +
                                                                            "</div>" +
                                                                        "</div>" +
                                                                    "</div>" +
                                                                "</div>" +
                                                                "<div class=\"wall-comments\">" +
                                                                "</div>" +
                                                                '<div class="wall-comment-form" id="wall-comment-form-' + response.data.WallPost.id + '" style="display:none">' +
                                                                    '<form method="post" action="' + response.data.WallComment.action + '">' +
                                                                        '<label for="data[WallPost][content]" class = "placeholder">Write your comments here ...</label>' +
                                                                        '<textarea class="form-wall-message" name="data[WallPost][content]" >' +
                                                                        '</textarea>' +
                                                                        '<input type="hidden" name="data[WallPost][token]" value="' + response.data.WallComment.token + '">' +
                                                                        '<input type="submit" class="button" name="submit" value="Comment">' +
                                                                        '<span class="loading" style="display: none">' +
                                                                            '<span>Loading...</span>' +
                                                                        '</span>' +
                                                                    '</form>' +
                                                                '</div>' +
                                                            "</div>").children("div:first").hide().fadeIn("slow").parent().children("div:gt(9)").fadeOut();

                                }
                                
                                formElement[0].reset();
                                adjustPlaceholder(wallElement);
                                
                                wallSubmitCallback(wallElement.children("div.wall-posts").children("div.post:first"));
                            } else {
                                alert(response.errorMessage);
                            }
                            formElement.children(":submit").removeAttr("disabled");
                        },
                        
                        error: function() {
                            alert("Network Error! Please try again.");
                            formElement.children(":submit").removeAttr("disabled");
                        }


                });

            return false;
        });


        // Wall post form submit.
        $(element).find("div.wall-comment-form form").submit(function() {

            var formElement = $(this);
            var commentElement = formElement.parent().prev();

            // doesn't submit if place holder exists
            if ($(this).children("textarea").hasClass("placeholder")) {
                return false;
            }

            formElement.children(":submit").attr("disabled", "disabled");
            formElement.children("span.loading").show();

            $.ajax({
                    type: "POST",
                    url: formElement.attr("action"),
                    data: formElement.serialize(),
                    dataType: "text/json",
                    success: function(html){
                            var response = eval("(" + html + ");");
                            formElement.children("span.loading").hide();

                            if (response.result == true) {
                                
                                commentElement.append("<div class=\"comment\"> " +
                                                        "<div class=\"row\"> " +
                                                            "<div class=\"column\" style=\"margin-right: 0; width: 24px\"> " +
                                                                "<img src=\"" + response.data.Profile.photo + "\"> " +
                                                            "</div> " +
                                                            '<div class="column-right" style="width: 100px;">' +
                                                                '<ul class="control-right">' +
                                                                    '<li>' +
                                                                        response.data.WallPost.deleteAction +
                                                                   ' </li>' +
                                                                '</ul>' +
                                                            '</div>' +
                                                            "<div class=\"column fluid last\"> " +
                                                                "<div class=\"inner\" style=\"margin-left: 30px;  margin-right: 115px\">" +
                                                                    response.data.User.link + " " +
                                                                    response.data.WallPost.content +

                                                                    "<div class=\"comment-meta hints\"> " +
                                                                        response.data.WallPost.timeInAgoWords +
                                                                    "</div> " +
                                                                "</div> " +
                                                            "</div> " +
                                                        "</div> " +
                                                    "</div>").children("div:last").hide().fadeIn("slow");
                                 
                                formElement[0].reset();
                                adjustPlaceholder(formElement);
                                wallSubmitCallback(commentElement.children("div.comment:last"));
                            } else {
                                alert(response.errorMessage);

                            }
                            
                            formElement.children(":submit").removeAttr("disabled");
                        },

                        error: function() {
                            alert("Network Error! Please try again.");
                            formElement.children(":submit").removeAttr("disabled");
                        }

                });

            return false;
        });
    }

    function facebookEsistingUserFormSubmitCallback(element) {
        // Wall form submit.
        $(element).find("div#existing-user-form form").submit(function() {

            var formElement = $(this);

            // doesn't submit if place holder exists
            if ($("#userEmailInput").val() == "") {
                return false;
            }

            $.ajax({
                    type: "POST",
                    url: $(this).attr("action"),
                    data: $(this).serialize(),
                    dataType: "text/json",
                    success: function(html){
                            //alert(html);
                            var response = eval("(" + html + ");");

                            if (response.result == true) {
                                if (response.result.verified == true) {
                                    window.location.reload();
                                } else {
                                    formElement.html(response.data.html);
                                }
                            } else {
                                alert(response.errorMessage);
                            }
                        }

                });

            return false;
        });
    }

    $(document).ready(function(){
        
        /**
         * Apply placeholder effect to form elements
         */
        adjustPlaceholder(document);

        /**
         * Load walls
         */
        loadWall(document);

        // proover version 1: fixed height popover
        var $popover = $('<div></div>').appendTo('body');

        $popover.dialog({
                    autoOpen: false,
                    modal: true,
                    width: 'auto',
                    height: 'auto',
                    dialogClass: 'dialog-popover'
                });

        $.popoverClose = function (){
            $popover.dialog('close');
        }

        $.popover = function(url) {
            $popover.load(url, function(){
              $popover.dialog('open');

              $('.popover-close').click(function(){
                    $popover.dialog('close');
                    return false;
                });
            });

            return false;
        };

        // hook ajax links to popover
        $.hookPopovers = function() {
            $('.ajax-popover').click(function() {
                $.popover(this.href);
                return false;
            });
        };

        $.hookPopovers();

        $.ajaxForm = function(element, successCallback) {
            element.submit(function(){
                var formElement = $(this);

                $.ajax({
                            type: "POST",
                            url: formElement.attr("action"),
                            data: formElement.serialize(),
                            dataType: "text/json",
                            success: function(response) {
                                successCallback(response);
                            },
                            error: function() {
                                alert("Network Error! Please try again.");
                            }

                        });

                return false;
            });
        }

        /**
         * Facebook Load
         */
        facebookEsistingUserFormSubmitCallback(document);


    });

})(jQuery);


redirTime = "5000";
redirURL = "http://test.i-blood.com/g/users/logout";

function redirTimer() {
    self.setTimeout("self.location.href = redirURL;", redirTime);
}

function mycallback() {
    FB.Connect.logout(function(){FBCLogout();});
    redirTimer();
}
