﻿String.format = function(text) {
    if (arguments.length <= 1)
        return text;
    var tokenCount = arguments.length - 2;
    for (var token = 0; token <= tokenCount; token++)
        text = text.replace(new RegExp('\\{' + token + '\\}', 'gi'), arguments[token + 1]);
    return text;
};

$(document).ready(function() {
    function SenderForm(this_button) {
        var $this = $(this_button)
        , $form = $this.parents('.message-form')
        , $textarea = $form.find('textarea')
        , $userfield = $form.find('input.message-username')
        , idprod = $this.attr('idprod')
        , idparent = $this.attr('commentidparent')
        , username = $userfield.val()
        , message_text = $textarea.val()
        , f_callbak = infoView($this, " Сообщение сохраняется!");
        if (username.length == 0) { errorView($userfield, "Пожалуйста введите Ваше имя!", f_callbak); return; }
        if (message_text.length == 0) { errorView($textarea, "Пожалуйста введите текст!", f_callbak); return; }
        $this.fadeOut(0);
        Send(idprod, idparent, username, message_text
                , function(response) {
                    var obj = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

                    if (obj.error.isError == 'false') innerLiMessage(idparent, obj.message);
                    else alert(obj.error.text);
                    $textarea.val('');
                    $this.fadeIn(0, f_callbak);
                    RemoveInnerForm($this);
                    return false;
                }, function(response) {
                    if (response.status==500)
                    alert('Ошибка возвращения текста, возможно Вы использовали запрещенные символы.');
                    $this.fadeIn(0, f_callbak);
                    RemoveInnerForm($this);
                    return false;
                });
    } //SenderForm

    function RemoveInnerForm(actionButton) {
        var $this = $(actionButton), $form = $this.parents('.message-form');
        if ($form.hasClass('massage-inner')) $form.remove();
    }

    function InnerForm(action_sender) {
        var $repository = $('#html-repository');
        var commentId = $(action_sender).attr('idcomment');
        var $parent_li = $('li[idcomment="' + commentId + '"]');
        $('ul.CommentList').find('.massage-inner').remove();
        var html = $repository.html();
        html = String.format(html, commentId);
        $parent_li.find('.commentHoIs:first').after(html);
        Bind_button($parent_li.find('button[commentidparent]'));
        return false;
    }

    function Bind_button(button) {
        var $button = $(button); $button.unbind();
        $button.each(function(i) {
            if ($(this).attr('name') == 'message-add-button-create') {
                $(this).click(function() { SenderForm(this); return false; });
            }
            if ($(this).attr('name') == 'message-add-button-cancel') {
                $(this).click(function() { RemoveInnerForm(this); return false; });
            }
        });
    }

    function Bind_action(root_container) {
        var action_sender = $(root_container).find('a[idcomment]');
        $(action_sender).unbind();
        $(action_sender).click(function() { InnerForm($(this)); return false; });
    }

    function MessageActionBind() {
        var $root_formSender = $('#root_senderMessage');
        var root_buttonSender = $root_formSender.find('button[commentidparent]');
        Bind_button(root_buttonSender); //root form initialization
        Bind_action($('.CommentList')); //root bint action initialization
    }

    function Send(idProd, idPar, userName, Massage, Succeeded, Failed) {
        var d = '{idProduct: ' + idProd + ', idParent: ' + idPar + ', username: "' + userName + '", massage: "' + Massage + '"}';
        $.ajax({
            type: "POST",
            url: "/CommentAction.asmx/CommentAdd",
            contentType: "application/json; charset=utf-8",
            data: d,
            dataType: "json",
            success: Succeeded,
            error: Failed
        });
    }

    function innerLiMessage(idcomment, liMess) {
        if (idcomment == 0) {
            $('ul.CommentList').append(liMess);
            Bind_action($('ul.CommentList li:last'));
            return;
        }
        var $inneredLi = $('li[idcomment="' + idcomment + '"]');
        $inneredLi.append('<ul>' + liMess + '</ul>');
        Bind_action($inneredLi.find('ul'));
        return;
    }

    function errorView(obj, message, f_back) {
        var bord = $(obj).css('border');
        $(obj).after('<span>' + message + '</span>');
        $(obj).css('border', 'Solid #f00 1px')
              .focus(function() { $(obj).css('border', bord).next('span').remove(); })
              .next('span').css('color', '#f00');
        f_back();
    }

    function infoView(obj, message) {
        $(obj).after('<span>' + message + '</span>');
        return function() { $(obj).next('span').remove(); };
    }
    //###############gallery####################################
    var conf = {
        history: false,
        clickNext: true,
        insert: '#main_image',
        onImage: function(image, caption, thumb) {
            image.css('display', 'none').fadeIn(1000);
            caption.css('display', 'none').fadeIn(1000);
            var _li = thumb.parents('li');
            _li.siblings().children('img.selected').fadeTo(500, 0.3);
            thumb.fadeTo('fast', 1).addClass('selected');
            image.attr('title', 'Следующее изображение →');
        },
        onThumb: function(thumb) {
            var _li = thumb.parents('li');
            var _fadeTo = _li.is('.active') ? '1' : '0.3';
            thumb.css({ display: 'none', opacity: _fadeTo }).fadeIn(1500);
            thumb.hover(
					function() { thumb.fadeTo('fast', 1); },
					function() { _li.not('.active').children('img').fadeTo('fast', 0.3); } // don't fade out if the parent is active
				)
        }
    }
    $('ul.gallery li').each(function(i) {
        //активировать первую картинку
        if (i > 0) return;
        $(this).addClass('active');
    });
    $('ul.gallery').galleria(conf);
    //###############gallery####################################

    MessageActionBind();

});


function AjaxSucceeded(response) {
        var obj = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
        alert(obj.text);  
      }
function AjaxFailed(response) {
  alert(response.status + ' ' + response.statusText);  
}    