
// Возвращает выделенный на странице текст
function copySelection() {
	selected = '';
	 
	if      (window.getSelection)   selected = window.getSelection().toString();      
	else if (document.getSelection) selected = document.getSelection();                
	else if (document.selection)    selected = document.selection.createRange().text;
	
	return selected;  
}

function stripSlashn(str) {
    return ("" + str).replace(/[\r\n]+/g," ").replace(/^\s+|\s+$/g,"");
}

// Выводит окошко с предложением отправить выделенный
// фрагмент текста модераторам или сообщение об ошибке,
// если выделен слишком большой кусок текста
function doMagic() {
	text = copySelection();
	
	if (text == '') {
		return;
	} else if (text.length > 130) {
		$('#message_block').show(100);
	} else {
        var textRange = selectedText = null;
		var contlen = 60;
		
        if (window.getSelection) {
            selectedText = window.getSelection();
        } else {
            selectedText = (window.document.getSelection)
                ? window.document.getSelection()
                : window.document.selection;
        }
		
        if (selectedText != null) {
            var pre = suf = "";
            if (selectedText.getRangeAt) {
                var range = selectedText.getRangeAt(0);
				var newRange = window.document.createRange();
				
                textRange = range.toString();
                newRange.setStartBefore(range.startContainer.ownerDocument.body);
                newRange.setEnd(range.startContainer, range.startOffset);
                pre = newRange.toString();
				
                newRange = range.cloneRange();
                newRange.setStart(range.endContainer, range.endOffset);
                newRange.setEndAfter(range.endContainer.ownerDocument.body);
                suf = newRange.toString();
            } else {
                if (selectedText.createRange) {
                    var range = selectedText.createRange();
					var newRange = selectedText.createRange();
					
                    textRange = range.text;
                    newRange.moveStart("character", -contlen);
                    newRange.moveEnd("character", -textRange.length);
                    pre = newRange.text;
					
                    newRange = selectedText.createRange();
                    newRange.moveEnd("character", contlen);
                    newRange.moveStart("character", textRange.length);
                    suf = newRange.text;
                } else { textRange = "" + selectedText; }
            }
            var p;
            var s = (p=textRange.match(/^(\s*)/)) && p[0].length;
            var e = (p=textRange.match(/(\s*)$/)) && p[0].length;
            pre = pre + textRange.substring(0, s);
            suf = textRange.substring(textRange.length - e, textRange.length) + suf;
            textRange = textRange.substring(s, textRange.length - e);
        } else {
            return;
        }
        
		if (textRange == "") {
			return;
		}
		
        var err_arr = [pre.substring(pre.length-contlen, pre.length).replace(/^\S{1,10}\s+/, ""), textRange, suf.substring(0, contlen).replace(/\s+\S{1,10}$/,"")];
        var err_msg = stripSlashn(err_arr[0] + '<strong>' + err_arr[1] + '</strong>' + err_arr[2]);
		var err_msg_html = stripSlashn(err_arr[0] + '<span>' + err_arr[1] + '</span>' + err_arr[2]);
		
		$('#message_block').hide(100);
		$('#orpho_block').show(100);
		$('#orpho_block p.mistake_text').html(err_msg_html);
		$('#orpho_block input.mistake_input').val(err_msg);
		$('#mistake_form .mistake_status').text('');
	}
}


$(document).ready(function() {
	var isCtrl = false;
	
	// Перехват нажатий Ctrl+Enter
	document.onkeyup = function(e){
		var event = e || window.event;
		keyCode = event.keyCode || event.which;
		
		if (keyCode == 17) isCtrl = false;
	};
	
	document.onkeydown = function(e) {
		var event = e || window.event;
		keyCode = event.keyCode || event.which;
		
		if (keyCode == 17) isCtrl = true;
		if (isCtrl && keyCode == 13) {
			doMagic();
			return false; 
		}
	};
	
	// Перехват сабмита формы
	$('#mistake_form .submit_button').click(function(e) {
		e.preventDefault();
        var form_url = $('#mistake_form').attr('action');
		
		$('#mistake_form .mistake_status').text('Отправка...');
		$('#mistake_form .buttons_block').hide();
		
		$.ajax({
			url: form_url,
			type: 'POST',
			data: $('#mistake_form').serialize(),
			timeout: 20000,
			success: function(data, textStatus){
				$('#mistake_form .mistake_status').text('Информация об ошибке отправлена');
				
				// Закрываем окно через 2 секунды
				setTimeout(function(){
					$('#orpho_block').hide(100);
					$('#mistake_form .buttons_block').show();
				}, 2000);
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				$('#mistake_form .mistake_status').text('Сервер не отвечает. Пожалуйста, повторите еще раз.');
				
				// Даем посетителю еще раз отправить жалобу
				$('#mistake_form .buttons_block').show();
			},
		});
    });
});
