﻿var dialog;

var form = {
    validate_required: function() {
        var result = true;
        try {
            $.each($('.required'), function() {
                var el = $(this).find(":input");
                if (el.val() == '') {
                    el.focus();
                    $(this).effect("highlight", { color: "red" }, 3000);
                    result = false;
                    return false;
                }
            });
        }
        catch (e) { }
        return result;
    }
};

var tickerHandler = {
    deleteTicker: function (sender) {
        try {
            var tickerId = $(sender).attr("meta:tickerid");
            var containerClass = "ticker_container_class";

            if (tickerId) {

                $.post(
                "/Blogs/AjaxDeleteTicker/",
                { id: tickerId },
                function (innerHTML) {
                    $("." + containerClass).html(innerHTML);
                },
                "html");

                return false;
            }
        }
        catch (e) { }
        return true;

    },

    deleteTickers: function (sender) {
        try {
            var containerClass = "ticker_container_class";

            $.post(
            "/Blogs/AjaxDeleteTickers/",
            { },
            function (innerHTML) {
                $("." + containerClass).html(innerHTML);
            },
            "html");

            return false;
        }
        catch (e) { }
        return true;

    },

    toggleTickers: function (sender) {
        try {
            var containerClass = "ticker_container_class";

            $.post(
            "/Blogs/AjaxToggleTickers/",
            { },
            function (innerHTML) {
                $("." + containerClass).html(innerHTML);
            },
            "html");

            return false;
        }
        catch (e) { }
        return true;

    }

};


var controller = {
    vote: function() {
        var answer = $("input:checked[ id ^= 'chkAnswer_voter_answer_' ]").attr("id").replace(/chkAnswer_voter_answer_/, '');
        $.post("/Experts/Vote/", { answer: answer },
            function(data) {
                if (data == "True") {
                    $("#voter").fadeOut("slow", function() { $("#voter_results").fadeIn("slow"); });
                } else {
                    $("#voter_error").fadeIn("slow");
                }
            }
        );
    },
    post: function() {
        if (form.validate_required()) {
            $.post("/Experts/Ask/", {
                threadTitle: $("#threadTitle").val(),
                threadDescription: $("#threadDescription").val(),
                threadCategory: $("#threadCategory").val(),
                anon: $("#chkAnswer_question_anon").attr("checked")
            },
                function(data) {
                    if (data != '') {
                        dialog.getOverlay().fadeOut("slow", function() { dialog.close(); location.href = data; });
                    } else {
                        $("#question_error").fadeIn("slow");
                    }
                }
             );
        }
    }
};

var helper = {
    toggleCheckbox: function(e, field, callback) {
        if ($(e).hasClass("mutuallyexclusive")) { $(".checkbox").removeClass("checked"); }
        $(e).toggleClass("checked");
        field = "#" + field + "_" + e.id;
        if ($(field).attr("checked") === true) {
            $(field).attr('checked', false);
        } else {
            $(field).attr('checked', true);
        }
        if (typeof (callback) == 'function') {
            callback();
        }
    },
    highlight: function(el) {
        $(el).stop().css("background-color", "#e775ba").animate({ backgroundColor: '#ffffff' }, 1500);
    }

};

var chat = {
    RenderReplyForm: function(sender) {
    
        try {
            var postId = $(sender).attr("meta:postid");
            var threadId = $(sender).attr("meta:threadid");
            var containerId = $(sender).attr("meta:containerid");
            var containerClass = $(sender).attr("meta:containerclass");

            try {
                $.each($("." + containerClass), function() {
                    $(this).html('');
                })
            }
            catch (e) { }


            if (postId && threadId && containerId) {

                $.post(
                "/Experts/RenderReplyForm/",
                { postId: postId, threadId: threadId },
                function(innerHTML) {
                    $("#" + containerId).html(innerHTML);
                },
                "html");
                
                return false;
            }
        }
        catch (e) { }
        return true;
    }

};

var expertAnswers = {
    RenderExpertAnswers: function(sender) {
        try {
            var answers = $(sender).attr("meta:answers");
            var containerId = $(sender).attr("meta:containerid");
            var pageIndex = $(sender).attr("meta:pageIndex");
            var pageSize = $(sender).attr("meta:pageSize");
            var expertId = $(sender).attr("meta:expertId");
            try {

                $.each($(".render_experts_answers"), function() {
                    $(this).removeClass('current');

                    var tab = $(this).attr("meta:answers");
                    if (answers && tab && tab == answers) {
                        $(this).addClass('current');
                    }
                })
            }
            catch (e) { }

            if (containerId) {

                $.post(
                    "/Experts/AjaxRenderExpertAnswers/",
                    { answers: answers, pageIndex: pageIndex, pageSize: pageSize, expertId: expertId },
                    function(innerHTML) {
                        $("#" + containerId).html(innerHTML);
                    },
                    "html");

                return false;
            }
        }
        catch (e) { }
        return true;
    },

    UnansweredVoteUp: function(sender) {
        try {
            var threadId = $(sender).attr("meta:threadId");
            var containerId = $(sender).attr("meta:containerid");
            var pageIndex = $(sender).attr("meta:pageIndex");
            var pageSize = $(sender).attr("meta:pageSize");

            try {
                //$("#" + containerId).html('');
            }
            catch (e) { }

            if (containerId && threadId) {
                $.post(
                    "/Experts/AjaxUnansweredVoteUp/",
                    { id: threadId, pageIndex: pageIndex, pageSize: pageSize },
                    function(innerHTML) {
                        $("#" + containerId).html(innerHTML);
                    },
                    "html");

                return false;
            }
        }
        catch (e) { }
        return true;
    },

    UnflagExpertChat: function(sender) {
        try {
            var threadId = $(sender).attr("meta:threadId");
            var containerId = $(sender).attr("meta:containerid");
            var pageIndex = $(sender).attr("meta:pageIndex");
            var pageSize = $(sender).attr("meta:pageSize");

            try {
                //$("#" + containerId).html('');
            }
            catch (e) { }

            if (containerId && threadId) {

                $.post(
                    "/Experts/AjaxUnflagExpertChat/",
                    { id: threadId, pageIndex: pageIndex, pageSize: pageSize },
                    function(innerHTML) {
                        $("#" + containerId).html(innerHTML);

                    },
                    "html");

                return false;
            }
        }
        catch (e) { }
        return true;
    }

};

var service = {
    timeout: null,
    getExpertQuestionSuggestions: function() {
        var val = $("#threadTitle").val();
        if (val) {
            if (val.length == 0)
                $("#relatedquestions").hide();
            else {
                $("#relatedquestions_results").html(String.empty);
                $("#spinner_wrapper").show();
                $("#relatedquestions").show();
            }
            if (service.timeout != undefined) clearTimeout(service.timeout);
            service.timeout = setTimeout(function() {
                if (val.length >= 3) {
                    $.getJSON("/Experts/GetRelatedQuestions/", { searchString: val },
                    function(data) {
                        if (data && data.length > 0) {
                            $("#relatedquestions_results").removeClass("spinner");
                            $("#relatedquestions_results").hide();
                            $("#relatedquestions_results").repeater({
                                dataSource: data,
                                itemTemplate: templates.items["relatedquestions_results"],
                                altClass: new Array('widget_mid_right', 'widget_mid_alt_right')
                            });
                            $("#spinner_wrapper").hide();
                            $("#relatedquestions_results").fadeIn();
                        }
                        else {
                            $("#spinner_wrapper").hide();
                            $("#relatedquestions_results").html('<div class="widget_mid_right"><center>We could not find any related questions.<br/> Try adding keywords to your question.</center></div>');
                        }
                    }
                );
                }
            }, 750);
        }
        else {
            $("#relatedquestions").hide();
        }
    }
};

var templates = {
    items: {},
    load: function() {
        $.each($(".template"), function(k, v) {
            var el = $(v);
            el.removeClass('template');
            templates.items[el.attr('id')] = el.html();
        });
    }
};

$.fn.repeater = function() {

    if (arguments.length == 0) return [];

    var args = arguments[0] || {};
    var dataSource = args.dataSource;
    var headerTemplate = args.headerTemplate;
    var itemTemplate;
    var altClass = args.altClass;
    var separatorTemplate = args.separatorTemplate;
    var footerTemplate = args.footerTemplate;
    var el = $(this);
    var reg = new RegExp("##9999##","gi");
    
    if (isArray(dataSource)) {
        var items = dataSource.length;

        if (!isNull(headerTemplate))
            $(el).append($(headerTemplate));

        for (var i = 0; i < items; i++) {
            itemTemplate = args.itemTemplate;

            if (i % 2 && !altClass.length == 0)
                itemTemplate = itemTemplate.replace(reg, altClass[1]);
            else if (!altClass.length == 0)
                itemTemplate = itemTemplate.replace(reg, altClass[0]);

            if (!isNull(itemTemplate))
                $(el).append($(String.format(itemTemplate, dataSource[i])));

            if (!isNull(separatorTemplate) && i != (dataSource.length - 1))
                $(el).append($(separatorTemplate));
        }
    }
};

String.empty = function() { return ''; }
String.format = function() {
    var s = arguments[0] || {};
    var i = 0;
    for (var item in arguments[1]) {
        if (item != undefined) {
            var reg = new RegExp("##" + i + "##", "gi");
            s = s.replace(reg, arguments[1][item]);
            i++;
        }
    }
    return s;
}

function isArray(v) { return typeof (v) == 'object' && v != null && typeof (v.length) == 'number'; }
function isNull(o) { return (o == null && o == undefined) ? true : false; }

var arrows;
var items;
var numItems;
var currentItem;
var pe;

var specials = {
    setObservers: function() {
        $('#uparrow').bind('mouseover mouseout', function() { $(this).toggleClass('up'); $(this).toggleClass('upover'); });
        $('#downarrow').bind('mouseover mouseout', function() { $(this).toggleClass('down'); $(this).toggleClass('downover'); });
        $('#uparrow').bind('click', function() { 
            clearInterval(pe);
            specials.hideItem(currentItem);
            currentItem = currentItem === 0 ? numItems - 1 : currentItem - 1;
            specials.showItem(currentItem);
            pe = setInterval(specials.rotate, 5000);
        });
        $('#downarrow').bind('click', function() {
            clearInterval(pe);
            specials.hideItem(currentItem);
            currentItem = currentItem == numItems - 1 ? 0 : currentItem + 1;
            currentItem++;
            specials.showItem(currentItem);
            pe = setInterval(specials.rotate, 5000);
        });
    },
    init: function() {
        this.setObservers();
        arrows = $("#arrows > div.pip");
        items = $(".special");
        numItems = items.size();
        currentItem = Math.floor(Math.random() * (numItems));
        this.showItem(currentItem);
        pe = setInterval(this.rotate, 5000);
    },
    rotate: function() {
        var nextItem = currentItem == numItems - 1 ? 0 : currentItem + 1;
        specials.hideItem(currentItem);
        specials.showItem(nextItem);
        currentItem = nextItem;
    },
    showItem: function(item) {
        $(arrows[item]).addClass('pipover');
        $(items[item]).fadeIn("slow");
    },
    hideItem: function(item) {
        $(arrows[item]).removeClass('pipover');
        $(items[item]).fadeOut("slow");
    }
};

var toolTip = {
    init: function(el, x, y) { return $(el).tooltip({ offset: [x, y], effect: "fade", opacity: 0.9, tip: '#tooltip' }); },
    show: function(el) {
        var overlayPosition = dialog.getOverlay().position();
        var tooltip = $(el).tooltip({ offset: [overlayPosition.top + el.offsetTop, overlayPosition.left + el.offsetLeft], effect: "fade", opacity: 0.9, tip: '#tooltip' });
        tooltip.show();
        return false;
    }
};

function showSearchResults() {
    var drpSearchType = document.getElementById('drpSearchType');
    var txtSearchTextBox = document.getElementById('txtSearchTextBox');
    if (txtSearchTextBox && drpSearchType) { window.location.href = '/tools_search.aspx?searchterm=' + txtSearchTextBox.value + '&searchcat=' + drpSearchType.value; }
    return false;
}

function setObservers() {
    try {
        $(".stagestimeline a[title]").tooltip();
    }
    catch (e) { }


    $(".render_reply_form").live("click", function() {
        return chat.RenderReplyForm(this);
    });

    $(".delete_tickers_class").live("click", function() {
        return tickerHandler.deleteTickers(this);
    });

    $(".delete_ticker_class").live("click", function () {
        return tickerHandler.deleteTicker(this);
    });

    $(".toggle_tickers_class").live("click", function () {
        return tickerHandler.toggleTickers(this);
    });

    $(".render_experts_answers").live("click", function() {
        //return expertAnswers.RenderExpertAnswers(this);
    });

    $(".ajax_pager_link").live("click", function() {
        //return expertAnswers.RenderExpertAnswers(this);
    });

    $(".voteup_expert_chat").live("click", function() {
        return expertAnswers.UnansweredVoteUp(this);
    });

    $(".unflag_expert_chat").live("click", function() {
        return expertAnswers.UnflagExpertChat(this);
    });
    
    
    $("#txtSearchTextBox").bind("keydown", function(event) { if (event.which || event.keyCode) { if ((event.which == 13) || (event.keyCode == 13)) { return showSearchResults(); } } else { return true; } });
    if ("#askExpertQuestion") {
        if ($("#threadTitle").val() != '')
            service.getExpertQuestionSuggestions();
        $("#threadTitle").bind("keyup", service.getExpertQuestionSuggestions);
    }
    $("#lnkSearchButton").bind("click", showSearchResults);
    $(".input_search_string").bind("focus", function() { $(this).val(''); });
    $("#voter .checkbox").bind("click", function() { helper.toggleCheckbox(this, "chkAnswer", function() { $("#btnVoter").show(); }); });
    $("#btnVoter").bind("click", controller.vote);
    $(".question_post").bind("click", controller.post);
    if ($("#specials")) { specials.init(); }
    //$("#tabs > ul").tabs("div.forumpost");
    $('#hideMessage').bind("click", function (event) {
        $.ajax({ url: '/hidemessage' });
        $('#footerFloatMessage').fadeOut('slow');
        return false;
    });
 
}

function init() {
    setObservers();
    templates.load();
}
$(init);