// $Id: complaint_script.js,v 1.15 2011/10/06 13:30:16 brednikov Exp $

function absPosition(obj) { // Опрелеляем top - left координаты блока obj
    var ox = 0;
    var oy = 0;
    while( obj ) {
        ox += obj.offsetLeft;
        oy += obj.offsetTop;
        //  В некоторых случаях почему-то для элемента на странице отсутствует офсет
        if ( obj.offsetParent == null ) {
           obj = obj.nodeName == 'BODY' ?  null : obj.parentNode;
        }

        if ( obj!=null ) obj = obj.offsetParent;
    }
    return {x:ox,y:oy};
}

function showComplaintReason(_link) {
  shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\"></a></div>\
  <div class=\"mtm10\">Причина:</div>\
    <form action=\"" + _link.href.replace('action=abuse', 'action=abuselist') + "\" onsubmit='if(/[a-zA-Za-яА-Я]{3,}/.test(document.getElementById(\"spamtextArea\").value)) {return sendComplaint(\"" + _link.id + "\");} else {alert(\"Укажите причину жалобы!\");return false;}'>\
    <textarea name=report rows=4 style='width:210px; height:80px; margin: 7px 0; font-size: 12px; font-family: Arial;' id='spamtextArea'></textarea>\
    <input type=submit id=butForSpam value='Сообщить модератору' style='font-size: 95%; font-family: tahoma;';>\
  </form>\
    ", _link);
    gebi("spamtextArea").focus();
    return false;
}

function sendComplaint(id) { 
    _link = document.getElementById(id);
    var url = "/doit";
    var params = cutParams(_link.href) + '&report=' + document.getElementById("spamtextArea").value +  '&ajax=1';
    var method = "POST";
    var onload = reportResult;
    var contentType = "application/x-www-form-urlencoded; charset=windows-1251";
    shawDivDialog("Идет обработка запроса", _link);
    return setAjaxRequest(method, url, params, onload, false, contentType, false, _link);
}

function reportResult() {
    var obj, doc, docRes, errorCode, error;
    obj = eval( "(" + this.req.responseText + ")");
    switch ( obj.error ){
	case 'errabusealready':
	    error = 'Вы уже жаловались по этому поводу';
	    error_code = 2;
	    break;
	case 'errabusenotfound':
	    error = 'Жалоба не принята. Попробуйте еще раз';
	    error_code = 1;
	    break;
	case 'errabuselimit':
	    error = 'Вы временно не можете отправить жалобу. Попробуйте сделать это через минуту.';
	    error_code = 2;
	    break;
	case 'erruserbanned':
	    error = 'Вам закрыт доступ на проект';
	    error_code = 2;
	    break;
	case 'okabuse':
	    error = 'Ваша жалоба будет рассмотрена в ближайшее время';
	    error_code = 0;
	    break;
	case 'errusrnotfound':
	    error = 'Пользователь не найден';
	    error_code = 2;
	    break;
	case 'errusrwasbanned':
	    error = 'Пользователь забанен и уже находится под наблюдением Администрации';
	    error_code = 2;
	    break;
	case 'errmoddenied':
	    error = '<b>Доступ запрещен</b>. <br>У вас нет прав на выполнение этого действия';
	    error_code = 2;
	    break;
	case 'errmodlimit':
	    error = 'Вы временно не можете принимать участие в модерировании проекта';
	    error_code = 2;
	    break;
	default:
	    error = 'При обработке запроса произошла ошибка<br>Попробуйте повторить еще раз';
//      document.write( '<textarea>' + this.req.responseText + '</textarea>' );
	    error_code = 1;
	    break;
    }

    if ( error_code > 0 ) {
		shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div><div class=\"text_body\"><span class=\"red\">" + error + "</span></div>");
    }else {
		shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div><div class=\"text_body\"><span class=\"green\">" + error + "</span></div>");
    }
    //  Если ошибки фатальные или жалоба принята, прячем ссылку
    if ( error_code==0 || error_code> 1 ) {
    	requestsHash[this.hashKey + 1].style.display = "none";
    }    
}



// ========== BEGIN: reiting ===========================
function sendQReiting(_link) {
    var url = "/doit";
    var params = cutParams(_link.href) + '&ajax=1';
    var method = "POST";
    var onload = reportReitResult;
    var onerror = errorReit;
    _link = _link.parentNode; 
    shawDivDialog('Идет обработка запроса', _link);
    return setAjaxRequest(method, url, params, onload, onerror, false, false, _link);
}

function errorReit() {
    var error = "Произошла ошибка. Попробуйте еще раз или <a target=\"blank\" href=\"http://otvet.mail.ru/askauth/\">обратитесь к разработчикам</a>";
    shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div><div class=\"text_body\"><span class=\"red\">" + error + "</span></div>");
}

function reportReitResult() {
    var error, error_code, reit, minus, plus, qual, error, html;
    var xml  = this.req.responseXML ? this.req.responseXML : 0;
    
    if ( xml ){
        //  получаем данные из XML
  minus = xml.getElementsByTagName('minus').item(0).firstChild.nodeValue;
        plus  = xml.getElementsByTagName('plus').item(0).firstChild.nodeValue;
        qual  = xml.getElementsByTagName('qual').item(0).firstChild.nodeValue;
  error   = xml.getElementsByTagName('error').item(0).firstChild.nodeValue;
        reit  = plus - minus;
    
  html = '<a href="?intr=1#interes" onclick="return showIntrVote(this, <tmpl_var qid>);" class="serv95 low">'+ reit + '&nbsp;' + getplural(reit, 'балл', 'балла', 'баллов') + ':&nbsp;'+ qual + '</a>';
        document.getElementById('qstintdiv').innerHTML = html;
    document.getElementById('interes_span').style.display = 'inline';
    }

	switch (error) {
		case 'okintqst' :
			error = '<b>Ваш голос принят</b>.<br>Вы заработали 1 балл';
			error_code = 0;
		break;
		case 'okintqstx2' :
			error = '<b>Ваш голос принят</b>.<br>Вы заработали 2 балла';
			error_code = 0;
		break;
		case 'erruserbanned' :
			error = 'Вам закрыт доступ на проект';
			error_code = 2;
		break;
		case 'errintnotfound':
			error = 'Вы не можете голосовать за этот вопрос';
			error_code = 2;
		break;
		case 'errintalready':
			error = 'Вы уже голосовали за этот вопрос';
			error_code = 2;
		break;
		default :
			error = 'При обработке запроса произошла ошибка<br>Попробуйте повторить позднее';
			error_code = 2;
		break;
	}

	if (error_code > 0) {
		shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div><div class=\"text_body\"><span class=\"red\">" + error + "</span></div>");
	}else {
		shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div><div class=\"text_body\"><span class=\"green\">" + error + "</span></div>");
	}
	//  Если ошибки фатальные или голос принят, прячем ссылки
	if ( error_code > 1) {
		document.getElementById("qstintdiv").style.display = "none";
	}
}
                                                                            // ========== BEGIN: reiting ===========================



function cutParams(allUrl) {
  var params = allUrl.substring(allUrl.indexOf("?") + 1, allUrl.length);
  params = params.replace('action=abuse', 'action=authabuse');
  return params;
}
function shawDivDialog(html, basis, _x, _y) {
  var div = gebi("spam_dial");
  div.innerHTML = html;
  if (basis) {
    var _top = absPosition(basis).y + (_y ? _y : 0);
    var _left = absPosition(basis).x + (_x ? _x : 0);
  }
  if (typeof _top != 'undefined') div.style.top = _top + "px";
  if (typeof _left != 'undefined') div.style.left = _left + "px";
  div.style.display = "";
}
function hideDivDialog() {
  gebi("spam_dial").style.display = "none";
}


function showThanksDialog(_link, aid, nick) {
    shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div>\
    Если Вы хотите поблагодарить пользователя <b>" + nick + "</b> за полезный ответ, отправьте SMS с кодом 22+" + aid + 
    " на короткий номер 7099.\
    Пользователь получит Ваше &laquo;спасибо&raquo; и 50 баллов на счет.\
    <br>Стоимость услуги:<br>\
    для России &mdash; $0.99 без НДС;<br>\
    для Украины &mdash; 6 грн. с НДС.\
    <br><br>\
    <a href='/thanks/" + aid + "/'>Узнать больше</a>\
    ", _link);
    return false;
}

function showIntrVote(_link, qid) {
    var url = "/doit";
    var params = 'action=xml_getintrvote&qid=' + qid;
    var method = "POST";
    var onload = reportIntrVoteResult;
    var onerror = errorReit;
    shawDivDialog('Идет обработка запроса', _link);
    _link.style.display = "none";
    return setAjaxRequest(method, url, params, onload, onerror, false, false, _link);
}


function reportIntrVoteResult() {
    var html = "";
    var email = "";
    var xml  = this.req.responseXML ? this.req.responseXML : 0;
    if ( xml ){
        var length = xml.getElementsByTagName('usr').length;
        if ( length ){
            for ( i=0; i<length; i++){
                email   =  xml.getElementsByTagName('email').item(i).firstChild.nodeValue; 
                html    += "<div class=\"mb5\"><img src=\"/img/"
                        + ( xml.getElementsByTagName('vote').item(i).firstChild.nodeValue==1 ? 'ico_pos' : 'ico_neg' )
                        + ".gif\" class=\"mr3\"  /> <a href='http://www.mail.ru/agent?message&to="
                        + email + "'><img width=13 height=13 src='http://status.mail.ru/?"
                        + email + "'></a> <a href='/"+ xml.getElementsByTagName('domain').item(i).firstChild.nodeValue   
                        + "/" +  xml.getElementsByTagName('name').item(i).firstChild.nodeValue  + "/'>"
                        + xml.getElementsByTagName('nick').item(i).firstChild.nodeValue + "</a></div>";
            }
            document.getElementById('interes_who').innerHTML = html;
            document.getElementById('interes_div').style.display = 'block';
        }
    }
    hideDivDialog();
}

function getplural(num, one, two, five){
    num = Math.abs(num);
    num %= 100;
    if ( num>19 ) { num %= 10; }
    if ( num==0 || num>4 ) { return five; }
    else if ( num==1 ) { return one; }
    else { return two; }
}

function sendQstAnsMark(_link){
    var href, params, url, method, onload, onerror;
    href = _link.href;
    params = href.substring(href.indexOf("?") + 1, href.length) + '&ajax=1';
    url = '/doit';
    method = 'POST';
    onload = reportMark;
    onerror = errorMark;
    _link = _link.parentNode.parentNode;
    _link.style.display = 'none';
    do _link = _link.nextSibling;
    while ( _link.nodeName != 'DIV' );

    _link.innerHTML = '<span class="orange bold">Запрос обрабатывается...</span>';
    return setAjaxRequest(method, url, params, onload, onerror, false, false, _link);
}

function setClassName(elem, classes){
    if ( elem.getAttribute("className") ){
        elem.setAttribute("className", classes);
    }
    else{
        elem.setAttribute("class", classes);
    }
}

function errorMark(){
    var error = "Произошла ошибка. Попробуйте еще раз или <a target=\"blank\" href=\"http://otvet.mail.ru/askauth/\">обратитесь к разработчикам</a>";
    shawDivDialog("<div class=\"right mt5\"><a onclick=\"hideDivDialog(); return false;\" href=\"#\"><img src=\"/img/close_help.gif\" width=\"7\" height=\"7\" alt=\"Закрыть\" /></a></div><div class=\"text_body\"><span class=\"red\">" + error + "</span></div>");
}

function reportMark(){
    var obj, doc, docRes, errorCode, error;
    obj = eval( "(" + this.req.responseText + ")");
    if ( obj.aid ){
        doc = document.getElementById('ansMark:' + obj.aid);
        docRes = document.getElementById('ansMarkRes:' + obj.aid);
    }
    else{
        doc = document.getElementById('qstMark:' + obj.qid);
        docRes = document.getElementById('qstMarkRes:' + obj.qid);
    }

    switch ( obj.error ){
        case 'okmarkadd' :
                error = '<b>Ваша оценка принята</b>';
                errorCode = 0;
                break;
        case 'errcantmark' :
                error = 'Вы временно не можете оценивать вопросы и ответы. <br /> Возможно, за последнюю неделю Вы не задали ни одного вопроса и не дали ни одного ответа. <br />Или возможность оценивать заблокирована Администрацией проекта.';
                errorCode = 2;
                break;
        case 'errnobestansselected' :
                error = 'Чтобы оценивать ответы на этот вопрос, необходимо выбрать лучший ответ или проголосовать «против всех»';
                errorCode = 2;
                break;
        case 'errmarkalready' :
                error = 'Вы уже оценивали этот ответ';
                errorCode = 0;
                break;
        case 'errmarknotfound' :
                error = '';
                errorCode = 2;
                break;
	case 'errflood' :
		error = 'Данное действие нельзя выполнять слишком часто';
		errorCode = 2;
		break;
        default :
                error = 'При обработке запроса произошла ошибка<br>Попробуйте повторить позднее';
                errorCode = 2;
                break;
    }

    if ( errorCode > 0 ){
        docRes.innerHTML = '<span class="red bold">' + error + '</span>';
    }
    else{
        docRes.style.display = 'none';
        setClassName(doc, "QualityR RInA");
	if ( obj.aid ){
	    setClassName(doc, "QualityR RInA");
	    doc.innerHTML = '<span>Оценка: <b>' + obj.avg + '</b></span><span>Рейтинг: <b>' + obj.totalSum + '</b></span>' + ( obj.totalMarks > 0 ? '(<a class="votes" href="/ansmarks/' + obj.aid + '/">' + obj.totalMarks + '&nbsp;' + getplural(obj.totalMarks, 'голос', 'голоса' ,'голосов') +'</a>)' : '');
	}
	else{
	    setClassName(doc, "QualityR");
	    doc.innerHTML = '<span>Оценка: <b>' + obj.avg + '</b></span><span><a href="/questtop/">Рейтинг</a>: <b>' + obj.totalSum + '</b></span>' + ( obj.totalMarks > 0 ? '(<a class="votes" href="/qstmarks/' + obj.qid + '/">' + obj.totalMarks + '&nbsp;' + getplural(obj.totalMarks, 'голос', 'голоса' ,'голосов') +'</a>)' : '');
	}
    }
    doc.style.display = 'block';
}


var rivalsLoaded = false;
var currUsr 	= '';                  
var cabUsr	= '';

function getRivals(cabEMail, userEMail){
    if ( !rivalsLoaded) {  
	currUsr	= userEMail;
	cabUsr	= cabEMail;
        var href, params, url, method, onload, onerror;
        href 	= 'http://otvet.mail.ru/';
	params 	= 'action=rivals&email=' + cabEMail + '&ajax=1';
        url	= '/doit';
	method	= 'POST';
        onload	= reportRivals;
	onerror	= errorRivals;
	document.getElementById('actStat').style.display = 'block';
        return setAjaxRequest(method, url, params, onload, onerror, false, false, document.getElementById("rivals"));
    }
    document.getElementById('actStat').style.display = 'block';
}

function reportRivals(){
    var objm, length, i, html, user, bold;
    obj = eval( "(" + this.req.responseText + ")");
    if ( !obj.undefined ){
        length = obj.rivals.length;
	html = '';
	for (i=0; i<length; i++){
		bold = cabUsr == obj.rivals[i].EMAIL ? 1 : 0;
	    if ( currUsr == obj.rivals[i].EMAIL ) {
		user = '<span class="mr5">' + obj.rivals[i].PLACE + ' место у Вас</span> ';
	    } else {
		user = obj.rivals[i].PLACE + ' <a href="http://www.mail.ru/agent?message&amp;to=' + obj.rivals[i].EMAIL + '"><img alt="Щелкни, чтобы пообщаться с этим человеком в Mail.Ru Агенте" src="http://status.mail.ru/?' + obj.rivals[i].EMAIL + '&amp;9x9"/></a> <a class="mr5" href="/' + obj.rivals[i].EMAILDOMAIN + '/' + obj.rivals[i].EMAILBOX + '/">' + obj.rivals[i].NICK + '</a>';
	    }
	    html += ( bold ? '<b>' : '' ) + '<div class="mb3">' + user + ' (' + obj.rivals[i].POINTS + ' ' +
		    getplural(obj.rivals[i].POINTS, 'балл', 'балла', 'баллов') + ')</div>' + ( bold ? '</b>' : '' );
        }
	document.getElementById("rivals").innerHTML = html;
	rivalsLoaded = true;
    }
}

function errorRivals(){
	document.getElementById("rivals").innerHTML = 'Произошла ошибка!<br />Попробуйте повторить позднее.';
}

