﻿

(function (anzeryService, $, undefined) {
    var 
        anzeryFormProxy = null,
        anzeryAssistantProxy = null;

    anzeryService.anzerySettings = function () {
        return anzerySetting; //json values set inline on page
    };
    anzeryService.getCurrentQuestion = function () {
        return $jq('#anzery-assistant-question').length > 0 ? $jq('#anzery-assistant-question').val() : $jq(".anzery-question").val();
    };
    anzeryService.initializeProxy = function (isAssistant) {
        $.getScript('http://anzery.cloudapp.net/MatchServiceProxy.js', function () {
            if (isAssistant) {
                anzeryAssistantProxy = new anzery.matchServiceProxy(anzeryService.anzerySettings().assistentUri);
                anzeryService.fetchMostPopularArticles();
            }
            else {
                anzeryFormProxy = new anzery.matchServiceProxy(anzeryService.anzerySettings().formProxyUri);
            }
        });
    };
    //end Generic

    // Form
    anzeryService.notifyFormView = function (knowledgeArticleId) {
        anzeryFormProxy.notifyView(anzeryService.getCurrentQuestion(), knowledgeArticleId);
    };
    anzeryService.badMatchClicked = function (knowledgeArticleId) {
        anzeryFormProxy.notifyBadMatch(anzeryService.getCurrentQuestion(), knowledgeArticleId);
    };
    anzeryService.goodMatchClicked = function (knowledgeArticleId) {
        anzeryFormProxy.notifyGoodMatch(anzeryService.getCurrentQuestion(), knowledgeArticleId);
    };
    anzeryService.displaySearchView = function () {
        anzeryFormProxy.findMatches(anzeryService.getCurrentQuestion(), anzeryService.findMatchesCallback, 3);
    };
    anzeryService.createHeaderLink = function (num, title) {
        return '<a href="javascript:void(0);" id="anzery-link-{0}" title="{1}">{1}</a>'.format(num, title);
    };
    anzeryService.createBodyContent = function (item) {
        return '<h3>{0}</h3>{1}'.format(item.Title, item.Body);
    };
    anzeryService.createFeedBackContainer = function (id) {
        return '<h4>{0}</h4><a href="javascript:void(0);" id="yes-{1}" class="anzery-yes-button">{2}</a><a href="javascript:void(0);" id="no-{1}" class="anzery-no-button">{3}</a>'.format(anzeryService.anzerySettings().formWasThisAnswerToYourQuestion, id, anzeryService.anzerySettings().formYes, anzeryService.anzerySettings().formNo);
    };
    anzeryService.findMatchesCallback = function (result) {
        var resultLength = result.length,
        answerContainer = $jq('#anzery-answers');

        if (resultLength > 0) {

            $jq('#anzery-footer-bar strong').text(anzeryService.anzerySettings().formNotFoundAnswer).end()
            .find('#anzery-footer-bar a').attr('title', anzeryService.anzerySettings().formSendQuestion).html(anzeryService.anzerySettings().formSendQuestion + ' &raquo').unbind('click').click(function () {
                anzeryService.showMailForm(true);
            });

            $jq('#anzery-top h2').text(anzeryService.anzerySettings().formAnswerFirstHeading);
            answerContainer.removeClass('anzery-show-result-2').removeClass('anzery-show-result-3').removeClass('anzery-show-result-1').find('#anzery-middle-3').removeClass('anzery-middle');

            if (resultLength === 1) {
                answerContainer.removeClass('anzery-answer-count-2').removeClass('anzery-answer-count-3').addClass('anzery-answer-count-1')
                .find('#anzery-header-1').removeClass('anzery-collapsed-header').addClass('anzery-bottom-large');
                answerContainer.find('#anzery-bottom').hide();

            }
            else if (resultLength === 2) {
                answerContainer.removeClass('anzery-answer-count-1').removeClass('anzery-answer-count-3').addClass('anzery-answer-count-2')
                    .find('#anzery-middle-2').removeClass('anzery-middle')
                    .find('#anzery-header-2').removeClass('anzery-collapsed-header').addClass('anzery-bottom-large');
                answerContainer.find('#anzery-bottom').hide()
            }
            else if (resultLength == 3) {
                answerContainer.removeClass('anzery-answer-count-1').removeClass('anzery-answer-count-3').addClass('anzery-answer-count-3')
                    .find('#anzery-middle-2').addClass('anzery-middle')
                    .find('#anzery-header-2').removeClass('anzery-bottom-large').addClass('anzery-collapsed-header');
                answerContainer.find('#anzery-header-1').removeClass('anzery-bottom-large').addClass('anzery-collapsed-header');
                answerContainer.find('#anzery-bottom').hide()
            }

            for (var i = 0; i < resultLength; i++) {
                if (i === 0) {
                    answerContainer.find('#anzery-answer-1')
                        .find('#anzery-header-1').empty().html(anzeryService.createHeaderLink(1, result[i].Title)).end()
                        .find('#anzery-body-1').find('#anzery-body-1-inner').html(anzeryService.createBodyContent(result[i])).end()
                        .find('.anzery-feedback-container').html(anzeryService.createFeedBackContainer(result[i].Id)).end().end()
                        .find('#anzery-link-1').bind('click', function () {
                            anzeryService.notifyFormView(result[0].Id);
                            answerContainer.removeClass('anzery-show-result-2').removeClass('anzery-show-result-3').addClass('anzery-show-result-1')
                                .find('#anzery-middle-3').removeClass('anzery-middle');

                            if (resultLength === 1) {
                                answerContainer.find('#anzery-bottom').show();
                            }
                            else if (resultLength === 2) {
                                answerContainer.find('#anzery-middle-2').removeClass('anzery-middle').end()
                                    .find('#anzery-bottom').hide();
                            }
                        });
                }
                else if (i === 1) {
                    answerContainer.find('#anzery-answer-2')
                        .find('#anzery-header-2').empty().html(anzeryService.createHeaderLink(2, result[i].Title)).end()
                        .find('#anzery-body-2').find('#anzery-body-2-inner').html(anzeryService.createBodyContent(result[i])).end()
                        .find('.anzery-feedback-container').html(anzeryService.createFeedBackContainer(result[i].Id)).end().end()
                        .find('#anzery-link-2').bind('click', function () {
                            anzeryService.notifyFormView(result[1].Id);
                            answerContainer.removeClass('anzery-show-result-1').removeClass('anzery-show-result-3').addClass('anzery-show-result-2')
                                .find('#anzery-middle-3').removeClass('anzery-middle');

                            if (resultLength === 2) {
                                answerContainer.find('#anzery-middle-2').addClass('anzery-middle').end()
                                    .find('#anzery-bottom').show();
                            }
                        });                   
                }
                else if (i === 2) {
                    answerContainer.find('#anzery-answer-3')
                        .find('#anzery-header-3').empty().html(anzeryService.createHeaderLink(3, result[i].Title)).end()
                        .find('#anzery-body-3').find('#anzery-body-3-inner').html(anzeryService.createBodyContent(result[i])).end()
                        .find('.anzery-feedback-container').html(anzeryService.createFeedBackContainer(result[i].Id)).end().end()
                        .find('#anzery-link-3').bind('click', function () {
                            anzeryService.notifyFormView(result[2].Id);
                            answerContainer.removeClass('anzery-show-result-1').removeClass('anzery-show-result-2').addClass('anzery-show-result-3')
                                .find('#anzery-middle-3').addClass('anzery-middle');
                        });
                }
            }

            $jq('#anzery-container').find('#anzery-answers').show();
        }
        else {
            anzeryService.showMailForm(false);
        }
    };
    anzeryService.showSolvedQuestion = function (answerText) {
        var anzeryContainer = $jq('#anzery-container');

        anzeryContainer.find('#anzery-step1').hide()
            .next('#anzery-answers').hide()
            .next('#anzery-solved').show()
            .find('#anzery-solved-ingress').find('h1').text(anzeryService.anzerySettings().formThxForFeedbackHeading)
            .next('#anzery-solved-inner').html(anzeryService.anzerySettings().formThxForFeedbackIngress + anzeryService.anzerySettings().formThxForFeedbackBody).end().end().end()
            .find('#anzery-solved-header h2').text(anzeryService.anzerySettings().formOurProposedAnswer).end()
            .find('#anzery-solved-middle').html(answerText).end()
            .find('#anzery-left-link').html('<a href="javascript:void(0);" title="{0}">{0}</a>'.format(anzeryService.anzerySettings().formBackToAlternatives)).bind('click', function () {
                anzeryContainer.find('#anzery-solved').hide().end()
                    .find('#anzery-step1').show().end()
                    .find('#anzery-answers').show().end()
                    .find('#anzery-ingress h1').show();
            }).end()
            .find('#anzery-right-link').html('<a href="javascript:void(0);" title="{0}">{0}</a>'.format(anzeryService.anzerySettings().formAskANewQuestion)).bind('click', function () {
                anzeryContainer.find('#anzery-solved').hide().end()
                    .find('#anzery-step1').show()
                    .find('#anzery-ingress h1').show().end()
                    .find('.anzery-question').text('').end()
                    .find('#anzery-button').show();
            });
    };
    anzeryService.showMailForm = function (foundSuggestion) {
        var anzeryContainer = $jq('#anzery-container');
        anzeryContainer.find('#anzery-button').hide();
        anzeryContainer.find('#anzery-ingress-inner').html(anzeryService.anzerySettings().formSendMailIngress).end()
            .find('#anzery-answers').hide().end()
            .find('#anzery-form-elements').show();
        if (foundSuggestion) {
            anzeryContainer.find('#anzery-back-from-form').attr('title', anzeryService.anzerySettings().formBackFromForm).html('&laquo; ' + anzeryService.anzerySettings().formBackFromForm).show().bind('click', function () {
                anzeryContainer.find('#anzery-ingress-inner').html(anzeryService.anzerySettings().formIngress).end()
                        .find('#anzery-form-elements').hide().end()
                        .find('#anzery-answers').show();
            });
        }
        else {
            anzeryContainer.find('#anzery-back-from-form').hide().unbind('click');
        }
    };
    anzeryService.notifyResolveFailed = function () {
        anzeryFormProxy.notifyResolveFailed(anzeryService.getCurrentQuestion(), anzeryService.notifyResolveFailedCallback);
    };
    anzeryService.notifyResolveFailedCallback = function () {
        $jq("#aspnetForm").unbind('submit');
        $jq("#aspnetForm").submit();
    };
    // end Form

    // Assistant
    anzeryService.notifyAssistantView = function (knowledgeArticleId) {
        anzeryAssistantProxy.notifyView(anzeryService.getCurrentQuestion(), knowledgeArticleId);
    };
    anzeryService.badAssistantMatchClicked = function (knowledgeArticleId) {
        anzeryAssistantProxy.notifyBadMatch(anzeryService.getCurrentQuestion(), knowledgeArticleId);
    };
    anzeryService.goodAssistantMatchClicked = function (knowledgeArticleId) {
        anzeryAssistantProxy.notifyGoodMatch(anzeryService.getCurrentQuestion(), knowledgeArticleId);
    };
    anzeryService.setTranslations = function () {
        var assistantContainer = $jq('#anzery-assistant');
        assistantContainer.find('#assistant-heading').text(anzeryService.anzerySettings().assistantHeading).end()
            .find('#anzery-assistant-question').val(anzeryService.anzerySettings().assistantTextFieldStartValue).end()
            .find('#anzery-ask-button').attr('title', anzeryService.anzerySettings().assistantAskSmillaTitle).end()
            .find('#anzery-intro-middle h2').text(anzeryService.anzerySettings().assistantIntroHeading).end()
            .find('#anzery-intro-text').html(anzeryService.anzerySettings().assistantIntroText + anzeryService.anzerySettings().assistantIntroText2).end()
            .find('#anzery-most-popular-middle h3').text(anzeryService.anzerySettings().assistantPopularHeading).end()
            .find('#anzery-hit h2').text(anzeryService.anzerySettings().assistantAnswersHeading).end()
            .find('#anzery-no-hit h2').text(anzeryService.anzerySettings().assistantNoHitHeading).end()
            .find('#anzery-no-hit-text').html(anzeryService.anzerySettings().assistantNoHitText).end()
            .find('#anzery-back-to-step1').html('&laquo; ' + anzeryService.anzerySettings().assistantBackToStep1Text).attr('title', anzeryService.anzerySettings().assistantBackToStep1Text).end()
            .find('#anzery-ask h3').text(anzeryService.anzerySettings().assistantAskHeading).end()
            .find('#anzery-assistant-yes').text(anzeryService.anzerySettings().assistantYes).attr('title', anzeryService.anzerySettings().assistantYes).end()
            .find('#anzery-assistant-no').text(anzeryService.anzerySettings().assistantNo).attr('title', anzeryService.anzerySettings().assistantNo).end()
            .find('#anzery-feedback h3').text(anzeryService.anzerySettings().assistantThxHeading).end()
            .find('#anzery-thx-text').html(anzeryService.anzerySettings().assistantThxText).end()
            .find('#anzery-back-to-step2').html('&laquo; ' + anzeryService.anzerySettings().assistantBackToAswers).attr('title', anzeryService.anzerySettings().assistantBackToAswers).end();
    };
    anzeryService.renderList = function (result, listId) {
        var resultLength = result.length;
        $jq(listId).empty();
        for (var i = 0; i < resultLength; i++) {
            $jq(listId).append(anzeryService.createListItem(result[i], listId));
        }
    };
    anzeryService.fetchMostPopularArticles = function () {
        anzeryAssistantProxy.getMostPopularArticles(null, 5, 30, function (result) {
            if (result.length > 0) {
                anzeryService.renderList(result, '#anzery-most-popular-list');
            }
            else {
                // NO HIT
            }
        });
    };
    anzeryService.hideFeedBackButtons = function () {
        $jq('#anzery-ask').fadeOut(function () {
            $jq('#anzery-feedback').fadeIn();
        });
    };
    anzeryService.showAssistantStep1 = function () {
        $jq('#anzery-assistant').find('#anzery-assistant-step3').hide().end()
            .find('#anzery-assistant-step2').hide().end()
            .find('#anzery-assistant-step1').show();
    };
    anzeryService.showAssistantStep2 = function (isHit) {
        var hitContainer = $jq('#anzery-assistant').find('#anzery-assistant-step1').hide().end()
            .find('#anzery-assistant-step3').hide().end()
            .find('#anzery-assistant-step2').show();
        if (isHit) {
            hitContainer.find('#anzery-hit').show().end()
                    .find('#anzery-no-hit').hide();
        }
        else {
            hitContainer.find('#anzery-hit').hide().end()
                    .find('#anzery-no-hit').show();
        }
        $jq('.anzery-ajax-loader').hide();
    };
    anzeryService.showAssistantStep3 = function (item) {
        $jq('#anzery-assistant').find('#anzery-assistant-step1').hide().end()
            .find('#anzery-assistant-step2').hide().end()
            .find('#anzery-assistant-step3').show()
            .find('#anzery-question-heading').text(item.Title)
            .next('#anzery-answer-body').html(item.Body).end().end()
            .find('#anzery-ask').show().next('#anzery-feedback').hide().end()
            .find('a#anzery-assistant-yes').removeAttr('class').attr('class', 'anzery-yes-id-' + item.Id)
            .next('#anzery-assistant-no').removeAttr('class').attr('class', 'anzery-no-id-' + item.Id);
    };
    anzeryService.displayAssistantSearchView = function () {
        anzeryAssistantProxy.findMatches(anzeryService.getCurrentQuestion(), anzeryService.assistantMatchesCallback, 5);
    };
    anzeryService.createListItem = function (item, listId) {
        var 
            assistantContainer = $jq('#anzery-assistant'),
            link = $jq('<a href="javascript:void(0);" title="' + item.Title + '" id="anzery-id-' + item.Id + '">' + item.Title + '</a>').data('item', { Id: item.Id, Title: item.Title, Body: item.Body })
            .click(function () {
                if (listId === '#anzery-most-popular-list') {
                    assistantContainer.find('#anzery-back-to-step2').removeClass('anzery-suggest').addClass('anzery-popular');
                    assistantContainer.find('#anzery-assistant-feedback-container').hide();
                }
                else {
                    assistantContainer.find('#anzery-back-to-step2').removeClass('anzery-popular').addClass('anzery-suggest');
                    assistantContainer.find('#anzery-assistant-feedback-container').show();
                    anzeryService.notifyAssistantView(item.Id);
                }
                anzeryService.showAssistantStep3(item);
            });

        return $jq('<li />').append(link);
    };
    anzeryService.assistantMatchesCallback = function (result) {
        if (result.length === 1) {
            $jq('#anzery-back-to-step2').removeClass('anzery-suggest').addClass('anzery-popular');
            anzeryService.notifyAssistantView(result[0].Id);
            anzeryService.showAssistantStep3(result[0]);
        }
        else if (result.length > 0) {
            anzeryService.showAssistantStep2(true);
            anzeryService.renderList(result, '#anzery-suggested-list');
        }
        else {
            anzeryService.showAssistantStep2(false);
        }
    };

    anzeryService.validateEmail = function (email) {
        var pattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        return pattern.test(email);
    };
    // end Assistant

    // Fixa in i objectet
    String.prototype.format = function () {
        var s = this,
                i = arguments.length;

        while (i--) {
            s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
        }

        return s;
    };
} (window.anzeryService = window.anzeryService || {}, jQuery));


jQuery(document).ready(function () {

    $jq('#open-site-assistant').nyroModal({zIndexStart:300});
    if (!jQuery('#anzery-container').length || jQuery('#anzery-assistant').length) { return; }

    var anzeryContainer = jQuery('#anzery-container'),
        langCode = 'sv'; //should be set by inline js on page

    if ($jq('div.status').text().length > 0) {
        anzeryContainer.find('#anzery-ingress h1').text(anzeryService.anzerySettings().formHeading).end()
            .find('#anzery-ingress-inner').html(anzeryService.anzerySettings().formSendMailIngress).end()
            .find('#anzery-button').hide().end()
            .find('#anzery-form-elements').show();
    }
    else if ($jq('#anzery-container').length > 0 && $jq('div.status').text().length === 0) {
        var isAssistant = $jq('#anzery-assistant').length > 0;
        anzeryService.initializeProxy(isAssistant);

        anzeryContainer.find('#anzery-ingress h1').text(anzeryService.anzerySettings().formHeading).end()
            .find('#anzery-ingress-inner').html(anzeryService.anzerySettings().formIngress).end()
            .find('#anzery-button').val(anzeryService.anzerySettings().formContinueButton);


        anzeryContainer.find(".anzery-question").focus(function () {
            if (!$jq('#anzery-back-from-form').is(':visible') && !$jq('#anzery-form-elements').is(':visible')) {
                anzeryContainer.find('#anzery-button').show();
            }
        });
        $jq('#anzery-container').find('.anzery-no-button').unbind('click').live('click', function () {
            anzeryService.badMatchClicked(parseInt($jq(this).attr('id').replace('no-', ''), 10));
            anzeryService.showMailForm(true);
        });
        $jq('#anzery-container').find('.anzery-yes-button').unbind('click').live('click', function () {
            anzeryService.goodMatchClicked(parseInt($jq(this).attr('id').replace('yes-', ''), 10));
            anzeryService.showSolvedQuestion($jq(this).parents('.anzery-body').find('div').html());
        });

        anzeryContainer.find('#anzery-button').bind('click', function () {
            anzeryContainer.find('#anzery-answers').hide().end()
                .find('#anzery-button').hide().end()
                .find('#anzery-form-elements').hide();

            if (anzeryService.getCurrentQuestion() !== '') {
                anzeryService.displaySearchView();
            }
        });



        $jq("#aspnetForm").submit(function (event) {
            if ($jq('#anzery-assistant').length > 0) {
                return false;
            }
            var name = $jq('#anzery-container input.name');
            var email = $jq('#anzery-container input.e-mail');
            var question = $jq('#anzery-container textarea');
            var category = $jq('#anzery-container select.category');
            var isValid = true;
            $jq('#anzery-container span.error').remove();

            if (question.val() == null || question.val().length == 0) {
                $jq(question).before('<span class="error">' + anzeryService.anzerySettings().formMsgRequired + '</span>');
                isValid = false;
            }
            if (category.attr("selectedIndex") === 0) {
                $jq(category).before('<span class="error">' + anzeryService.anzerySettings().formCategoryRequired + '</span>');
                isValid = false;
            }
            if (name.val() == null || name.val().length == 0) {              
                $jq(name).before('<span class="error">' + anzeryService.anzerySettings().formNameRequired + '</span>');
                isValid = false;
            }
            if (name.val() == null || name.val().length == 0) {
                $jq(email).before('<span class="error">' + anzeryService.anzerySettings().formEmailRequired + '</span>');
                isValid = false;
            }
            else if (!anzeryService.validateEmail(email.val())) {
                $jq(email).before('<span class="error">' + anzeryService.anzerySettings().formEmailFormat + '</span>');
                isValid = false;
            }
            if (!isValid) {
                return false;
            }

            if ($jq('a#anzery-back-from-form:visible')) {
                anzeryService.notifyResolveFailed();
                return false; 
            }
        });
    }
});
