$(document).ready(function() {
    
    var preloader_small = new Image();
    var preloader_medium = new Image();
    var anonymous_photo = new Image();
    preloader_small.src = SocialSite.base_url + "/static/images/loader.gif";
    preloader_medium.src = SocialSite.base_url + "/static/images/loader-medium.gif";
    anonymous_photo.src = SocialSite.base_url + "/static/images/anonymous.png";
    
    // django's way to get around csrf requests on ajax
    $('html').ajaxSend(function(event, xhr, settings) {
        function getCookie(name) {
            var cookieValue = null;
            if (document.cookie && document.cookie != '') {
                var cookies = document.cookie.split(';');
                for (var i = 0; i < cookies.length; i++) {
                    var cookie = jQuery.trim(cookies[i]);
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) == (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }
        if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
            // Only send the token to relative URLs i.e. locally.
            xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
        }
    });
    
    // toggle content of status update textarea
    $("#status-update").focus(function() {
        if ($(this).val() == "What's on your mind?") {
            $(this).val('');
        }
        $(this).css("color", "#000000");
    }).blur(function() {
        if ($(this).val() == '') {
            $(this).val("What's on your mind?");
            $(this).css("color", "#cccccc");
        }
    });
    // limit status update to 200
    $("#status-update").keydown(function() {
        if ($(this).val().length >= 200) {
            $(this).val($(this).val().substring(0, 199));
        }
    });
    
    // toggle content of status update textarea for photo
    $("#status-photo-update").focus(function() {
        if ($(this).val() == "Add a message with the photo") {
            $(this).val('');
        }
        $(this).css("color", "#000000");
    }).blur(function() {
        if ($(this).val() == '') {
            $(this).val("Add a message with the photo");
            $(this).css("color", "#cccccc");
        }
    });
    
    // toggle fakefile input
    $("#status-photo").change(function() {
        var fileinput = $(this);
        if ($(fileinput).val() != '') {
            $(fileinput).next().find("input").val($("#status-photo").val()).css("color", "#000000");
        } else {
            $(fileinput).val("Click here to select a photo...").css("color", "#cccccc");
        }
    });
    
    // toggle video url field
    $("#status-video").focus(function() {
        if ($(this).val() == "Enter the video URL here...") {
            $(this).val('');
        }
        $(this).css("color", "#000000");
    }).blur(function() {
        if ($(this).val() == '') {
            $(this).val("Enter the video URL here...");
            $(this).css("color", "#cccccc");
        }
    });
    
    // toggle content of status update textarea for video
    $("#status-video-update").focus(function() {
        if ($(this).val() == "Add a message with the video") {
            $(this).val('');
        }
        $(this).css("color", "#000000");
    }).blur(function() {
        if ($(this).val() == '') {
            $(this).val("Add a message with the video");
            $(this).css("color", "#cccccc");
        }
    });
    
    // submit action for status
    $("#profile-actions-input #actions-submit input").click(function() {
        var action_submit = $(this);
        switch ($("#profile-actions li.active a").attr("id")) {
            case 'tab-update-status':
                if ($("#status-update").val() == "" || $("#status-update").val() == "What's on your mind?") {
                    $("#status-update").focus();
                } else {
                    $('#status-form-text').ajaxSubmit({
                        type: 'POST',
                        dataType: 'json',
                        url: '/siteapp/status/update/',
                        beforeSubmit: function() {
                            $("#status-update").css("color", "#cccccc").attr("readonly", "readonly");
                            $("#profile-actions-input #actions-submit input").hide().after('<img id="status-preloader" src="'+ preloader_medium.src +'" />');
                        },
                        success: function(response, responseStatus) {
                            $("#action-result-wrapper").stop().css("opacity", "1");
                            if (response.status == 'SUCCESS') {
                                // display the latest status
                                $("#latest-status-inner").hide().html(response.latest_status).show("slow");
                                
                                // append latest photo in the feed
                                if ($("#profile-feed ul li").length == 5) {
                                    var last_li = $("#profile-feed ul li.last");
                                    var prev_li = $(last_li).prev("li")[0];
                                    $(prev_li).addClass("last");
                                    $(last_li).remove();
                                }
                                var feed_item = '<li id="status-'+ response.status_id +'" class="appended-feed" style="display: none;">';
                                feed_item += '<a href="#" class="close-feed-item">x</a>';
                                feed_item += '<div class="photo"><img src="'+ response.prime_photo +'" /></div>';
                                feed_item += '<div class="feed-info"><div class="user-info"><a href="#">'+ response.user +'</a></div>';
                                feed_item += '<div class="feed-details"><div class="feed-item-content">'+ response.latest_status +'</div></div>';
                                feed_item += '<div class="feed-time">'+ response.time_offset +'</div></div></li>';
                                $("#profile-feed ul").prepend(feed_item);
                                $(".appended-feed").slideDown("fast").removeClass("appended-feed");
                                
                                $("#action-result-wrapper").html('<div class="success">' + response.message + '</div>').show("fast");
                            } else if (response.status == 'FAILED') {
                                $("#action-result-wrapper").html(response.message).show("fast");
                            }
                            // fade out the result
                            $("#action-result-wrapper").animate({
                                opacity: 0.1
                            }, 10000, "", function() {
                                $(this).html("").css("opacity", "1");
                            });
                            $("#status-update").val('').removeAttr("readonly").css("color", "#000000").blur();
                            $("#status-preloader").remove();
                            $("#profile-actions-input #actions-submit input").show();
                        }
                    });
                }
                break;
            case 'tab-add-photo':
                var fakeinput = $("#status-form-photo .fakefile input");
                if ($(fakeinput).val() == '' || $(fakeinput).val() == 'Click here to select a photo...') {
                    $(fakeinput).val('Click here to select a photo...').fadeOut("fast").fadeIn("fast");
                } else {
                    $('#status-form-photo').ajaxSubmit({
                        type: 'POST',
                        dataType: 'json',
                        url: '/siteapp/status/update/',
                        beforeSubmit: function() {
                            $("#status-photo-update").css("color", "#cccccc").attr("readonly", "readonly");
                            $(fakeinput).css("color", "#cccccc").attr("disabled", "disabled");
                            $("#profile-actions-input #actions-submit input").hide().after('<img id="status-preloader" src="'+ preloader_medium.src +'" />');
                        },
                        success: function(response, responseStatus) {
                            $("#action-result-wrapper").stop().css("opacity", "1");
                            if (response.status == 'SUCCESS') {
                                if ($("#profie-pictures ul li").length == 5) {
                                    var last_li = $("#profie-pictures ul li.last");
                                    var prev_li = $(last_li).prev("li")[0];
                                    $(prev_li).addClass("last");
                                    $(last_li).remove();
                                }
                                // append latest photo
                                if ($("#profie-pictures ul").length > 0) {
                                    if ($("#profie-pictures ul li").length == 7) {
                                        $("#profie-pictures ul li.last").remove();
                                        $("#profie-pictures ul").prepend('<li id="status-'+ response.status_id +'" class="appended-photo" style="display: none;"><a href="'+ response.detail_url +'"><img src="'+ response.photo +'" /></a></li>');
                                    } else {
                                        $("#profie-pictures ul").prepend('<li id="status-'+ response.status_id +'" class="appended-photo" style="display: none;"><a href="'+ response.detail_url +'"><img src="'+ response.photo +'" /></a></li>');
                                    }
                                } else {
                                    $("#profie-pictures p").remove();
                                    $("#profie-pictures").append('<ul><li class="appended-photo" style="display: none;"><a href="'+ response.detail_url +'"><img src="'+ response.photo +'" /></a></li></ul>');
                                }
                                $(".appended-photo").show("fast").removeClass("appended-photo");
                                
                                // append latest photo in the feed
                                if ($("#profile-feed ul li").length == 5) {
                                    var last_li = $("#profile-feed ul li.last");
                                    var prev_li = $(last_li).prev("li")[0];
                                    $(prev_li).addClass("last");
                                    $(last_li).remove();
                                }
                                var feed_item = '<li id="status-'+ response.status_id +'" class="appended-feed" style="display: none;">';
                                feed_item += '<a href="#" class="close-feed-item">x</a>';
                                feed_item += '<div class="photo"><img src="'+ response.prime_photo +'" /></div>';
                                feed_item += '<div class="feed-info"><div class="user-info"><a href="#">'+ response.user +'</a> posted a '+ response.status_type +'</div>';
                                feed_item += '<div class="feed-details"><div class="feed-item-content"><div class="feed-item-media"><a href="'+ response.detail_url +'"><img src="'+ response.photo +'" /></a></div>'+ response.status_content +'</div></div>';
                                feed_item += '<div class="feed-time">'+ response.time_offset +'</div></div></li>';
                                $("#profile-feed ul").prepend(feed_item);
                                $(".appended-feed").slideDown("fast").removeClass("appended-feed");
                                
                                $("#action-result-wrapper").html('<div class="success">' + response.message + '</div>').show("fast");
                            } else if (response.status == 'FAILED') {
                                $("#action-result-wrapper").html(response.message).show("fast");
                            }
                            // fade out the result
                            $("#action-result-wrapper").animate({
                                opacity: 0.1
                            }, 10000, "", function() {
                                $(this).html("").css("opacity", "1");
                            });
                            
                            $("#status-photo-update").removeAttr("readonly").css("color", "#cccccc").val("Add a message with the photo");
                            $("#status-photo").val("");
                            $(fakeinput).val('Click here to select a photo...').removeAttr("disabled").css("color", "#cccccc").blur();
                            $("#status-preloader").remove();
                            $("#profile-actions-input #actions-submit input").show();
                        }
                    });
                }
                break;
            case 'tab-add-video':
                if ($("#status-video").val() == "" || $("#status-video").val() == "Enter the video URL here...") {
                    $("#status-video").focus();
                } else {
                    $('#status-form-video').ajaxSubmit({
                        type: 'POST',
                        dataType: 'json',
                        url: '/siteapp/status/update/',
                        beforeSubmit: function() {
                            $("#status-video").css("color", "#cccccc").attr("readonly", "readonly");
                            $("#status-video-update").css("color", "#cccccc").attr("readonly", "readonly");
                            $("#profile-actions-input #actions-submit input").hide().after('<img id="status-preloader" src="'+ preloader_medium.src +'" />');
                        },
                        success: function(response, responseStatus) {
                            $("#action-result-wrapper").stop().css("opacity", "1");
                            if (response.status == 'SUCCESS') {
                                // append latest video in the feed
                                if ($("#profile-feed ul li").length == 5) {
                                    var last_li = $("#profile-feed ul li.last");
                                    var prev_li = $(last_li).prev("li")[0];
                                    $(prev_li).addClass("last");
                                    $(last_li).remove();
                                }
                                var feed_item = '<li class="appended-feed" style="display: none;">';
                                feed_item += '<a href="#" class="close-feed-item">x</a>';
                                feed_item += '<div class="photo"><img src="'+ response.prime_photo +'" /></div>';
                                feed_item += '<div class="feed-info"><div class="user-info"><a href="#">'+ response.user +'</a> posted a '+ response.status_type +'</div>';
                                feed_item += '<div class="feed-details"><div class="feed-item-content"><div class="feed-item-media">'+ response.video +'</div>'+ response.status_content +'</div></div>';
                                feed_item += '<div class="feed-time">'+ response.time_offset +'</div></div></li>';
                                $("#profile-feed ul").prepend(feed_item);
                                $(".appended-feed").slideDown("fast").removeClass("appended-feed");
                                
                                if ($("#latest-video ul li").length == 5) {
                                    var last_li = $("#latest-video ul li.last");
                                    var prev_li = $(last_li).prev("li")[0];
                                    $(prev_li).addClass("last");
                                    $(last_li).remove();
                                }
                                $("#latest-video ul").prepend('<li class="appended-feed">'+ response.latest_video +'</li>');
                                $(".appended-feed").slideDown("fast").removeClass("appended-feed");
                                
                                $("#action-result-wrapper").html('<div class="success">' + response.message + '</div>').show("fast");
                            } else if (response.status == 'FAILED') {
                                $("#action-result-wrapper").html(response.message).show("fast");
                            }
                            // fade out the result
                            $("#action-result-wrapper").animate({
                                opacity: 0.1
                            }, 10000, "", function() {
                                $(this).html("").css("opacity", "1");
                            });
                            $("#status-video").val('').removeAttr("readonly").css("color", "#000000").blur();
                            $("#status-video-update").val('').removeAttr("readonly").css("color", "#000000").blur();
                            $("#status-preloader").remove();
                            $("#profile-actions-input #actions-submit input").show();
                        }
                    });
                }
                break;
        }
        return false;
    });
    
    $("#feed-view-more input").click(function() {
        var feed_btn = $(this);
        $(feed_btn).before('<img id="feeds-preloader" src="'+ preloader_small.src +'" /> ').hide();
        var feeds_ul = $(".contestants-feed");
        var last_li = $(feeds_ul).find("li.last")[0];
        var status_id = $(last_li).attr("id").split("-")[1];
        $.ajax({
            type: "POST",
            url: "/siteapp/feeds/more/",
            dataType: 'json',
            data: {
                status_id: status_id,
                active_user: ((SocialSite.active_user != undefined) ? SocialSite.active_user : false)
            },
            success: function(response, responseStatus) {
                if (response.status == 'SUCCESS') {
                    $(last_li).removeClass("last");
                    $.each(response.feeds, function() {
                        var feed = $(this)[0];
                        var feed_item = '';
                        if (feed.status_type == 'photo') {
                            feed_item = '<li id="status-'+ feed.status_id +'" class="appended-feed" style="display: none;">';
                            if (feed.is_staff) {
                                feed_item += '<a href="#" class="close-feed-item">x</a>';
                            }
                            feed_item += '<div class="photo"><img src="'+ feed.prime_photo +'" /></div>';
                            feed_item += '<div class="feed-info"><div class="user-info"><a href="#">'+ feed.user +'</a> posted a '+ feed.status_type +'</div>';
                            feed_item += '<div class="feed-details"><div class="feed-item-content"><div class="feed-item-media"><a href="'+ feed.detail_url +'"><img src="'+ feed.photo +'" /></a></div>'+ feed.status_content +'</div></div>';
                            feed_item += '<div class="feed-time">'+ feed.time_offset +'</div></div></li>';
                        } else if (feed.status_type == 'video') {
                            feed_item = '<li id="status-'+ feed.status_id +'" class="appended-feed" style="display: none;">';
                            if (feed.is_staff) {
                                feed_item += '<a href="#" class="close-feed-item">x</a>';
                            }
                            feed_item += '<div class="photo"><img src="'+ feed.prime_photo +'" /></div>';
                            feed_item += '<div class="feed-info"><div class="user-info"><a href="#">'+ feed.user +'</a> posted a '+ feed.status_type +'</div>';
                            feed_item += '<div class="feed-details"><div class="feed-item-content"><div class="feed-item-media">'+ feed.video +'</div>'+ feed.status_content +'</div></div>';
                            feed_item += '<div class="feed-time">'+ feed.time_offset +'</div></div></li>';
                        } else if (feed.status_type == 'text') {
                            feed_item = '<li id="status-'+ feed.status_id +'" class="appended-feed" style="display: none;">';
                            if (feed.is_staff) {
                                feed_item += '<a href="#" class="close-feed-item">x</a>';
                            }
                            feed_item += '<div class="photo"><img src="'+ feed.prime_photo +'" /></div>';
                            feed_item += '<div class="feed-info"><div class="user-info"><a href="#">'+ feed.user +'</a></div>';
                            feed_item += '<div class="feed-details"><div class="feed-item-content">'+ feed.status_content +'</div></div>';
                            feed_item += '<div class="feed-time">'+ feed.time_offset +'</div></div></li>';
                        }
                        $(feeds_ul).append(feed_item);
                        $(".appended-feed").slideDown("fast").removeClass("appended-feed");
                    });
                    
                    // add handler for newly added elements
                    $(".close-feed-item").click(function() {
                        var close_link = $(this);
                        var parent_li = $(close_link).parent("li")[0];
                        $(parent_li).slideUp("fast");
                        return false;
                    });
                    
                    var feed_lis = $(feeds_ul).find("li");
                    var li_size = feed_lis.length;
                    $(feed_lis[li_size-1]).addClass("last");
                    $(feed_btn).removeAttr("disabled");
                } else if (response.status == 'FAILED') {
                    $(feed_btn).remove();
                }
                $("#feeds-preloader").remove();
                $(feed_btn).show();
            }
        });
        return false;
    });
    
    // switching of status tabs
    $(".status-tab").click(function() {
        var active_tab = $(this);
        $("#profile-actions li").removeClass("active");
        $(active_tab).parent("li").addClass("active");
        switch ($(active_tab).attr("id")) {
            case 'tab-update-status':
                $(".status-wrapper").hide();
                $("#status-update").val("What's on your mind?").css("color", "#cccccc");
                $("#status-update-wrapper").show();
                break;
            case 'tab-add-photo':
                $(".status-wrapper").hide();
                $("#status-photo").val("");
                $("#status-photo-wrapper .fakefile input").val("Click here to select a photo...").css("color", "#cccccc");
                $("#status-photo-wrapper").show();
                break;
            case 'tab-add-video':
                $(".status-wrapper").hide();
                $("#status-video").val("Enter the video URL here...");
                $("#status-video-wrapper").show();
                break;
        }
        return false;
    });
    
    // closing of feed item
    $(".close-feed-item").click(function() {
        var close_link = $(this);
        var parent_li = $(close_link).parent("li")[0];
        var status_id = $(parent_li).attr("id").split("-")[1];
        $.ajax({
            type: "POST",
            url: "/siteapp/feeds/delete/",
            dataType: 'json',
            data: {
                status_id: status_id,
            },
            success: function(response, responseStatus) {
                if (response.status == 'SUCCESS') {
                    $("#profie-pictures #status-"+ status_id).hide("fast", function() {
                       $(this).remove();
                    });
                    $(parent_li).slideUp("fast", function() {
                        $(this).remove();
                    });
                    $("#photo-"+ response.photo_id).remove();
                    $("#photo-photo-"+ response.photo_id).remove();
                    $("#loggedin-info .photo").html('<img src="'+ anonymous_photo.src +'" />');
                    $(".photo-feed-"+ response.photo_id + " a").remove();
                }
            }
        });
        return false;
    });
    
    // edit bio link
    $("#edit-bio-link").click(function() {
        $(".bio-question").hide();
        $(".no-bio").hide();
        $(".bio-teaser").hide();
        $(".bio").hide();
        $("#bio-update-form").show();
        
        if ($(".no-bio").length > 0) {
            $("#id_answer").val("");
        }
        
        return false;
    });
    $("#bio-submit .cancel").click(function() {
        $("#bio-update-form").hide();
        $(".no-bio").show();
        $(".bio").show();
        $(".bio-question").show();
        return false;
    });
    $("#bio-submit .submit").click(function() {
        var submit = $(this);
        if ($("#id_bio").val() == '') {
            $("#id_bio").focus();
        } else {
            $('#bio-update-form').ajaxSubmit({
                type: 'POST',
                dataType: 'json',
                url: '/siteapp/profile/update/',
                beforeSubmit: function() {
                    $("#id_bio").attr("disabled", "disabled");
                    $("#bio-submit .cancel").attr("disabled", "disabled");
                    $(submit).before(' <img id="bio-preloader" src="'+ preloader_small.src +'" />').attr("disabled", "disabled");
                },
                success: function(response, responseStatus) {
                    $("#bio-preloader").remove();
                    $("#id_bio").removeAttr("disabled");
                    $("#bio-submit .cancel").removeAttr("disabled");
                    $(submit).removeAttr("disabled");
                    if (response.status == 'SUCCESS') {
                        $("#bio-update-form").hide();
                        if ($(".no-bio").length > 0) {
                            $(".no-bio").after('<div class="bio-question"><p>'+ response.question +'</p></div><div class="bio">'+ response.bio +'</div>');
                            $(".no-bio").remove();
                        } else {
                            $("#id_bio").val(response.bio);
                            $(".bio").html(response.bio);
                        }
                        $(".bio").show();
                    } else if (response.status == 'FAILED') {
                        $("#id_bio").val('').focus();
                    }
                    $(".bio-question").show();
                }
            });
        }
        return false;
    });
    
    $("#registration-form #id_about").siblings(".errorlist").css("left", "620px");
    
    $("#latest-video a").css("width", $("#latest-video object").attr("width"));
    $("#latest-video a").css("height", $("#latest-video object").attr("height"));

});


