var ajaxExtra = {};
ajaxExtra.ratingRound = {};
var submitCount = new Array();


// get elements
function $() {
	var a = new Array();
	var l = arguments.length;
	for (var i=0;i<arguments.length;i++) {
		var e = arguments[i];
		if (typeof e=='string') e = document.getElementById(e);
		if (l==1) return e;
		a.push(e);
	}
	return a;
}

function submitOnceByFormName(name) {
    try {
	if (submitCount[name]) {
		return false;
	} else {
		submitCount[name] = 1;
	}
    } catch(e) {}
    return true;
}

function submit_once(theform){
	for (i=0;i<theform.length;i++){
		var tempobj=theform.elements[i]
		if(tempobj.type.toLowerCase()=="submit"||tempobj.type.toLowerCase()=="reset") {tempobj.disabled=true}
	}
}

function ShowDiv(id) {
	ShowHideDiv(id, 1);
}

function HideDiv(id) {
	ShowHideDiv(id);
}

function ShowHideDiv (id, show) {
	var item = GetElementById(id);
	if (item && item.style)  item.style.display = show ? 'block' : 'none';
}

function GetElementById(id) {
	return document.all ? document.all[id] : document.getElementById(id);
}

function OffsetLeft(el) {
        var ol = el.offsetLeft;
        var op = el.offsetParent;
        while (op) {
                ol += op.offsetLeft;
                op = op.offsetParent;
        }
        return ol;
}


function OffsetTop(el) {
	var ot;
	var op;

	if (navigator.userAgent.indexOf ("Opera") != -1){
		ot =  window.event.y+document.body.scrollTop;
		ot=ot-50;
		return ot;
	}

        ot = el.offsetTop;
        op = el.offsetParent;
        while (op) {
                ot += op.offsetTop;
		op = op.offsetParent;
        }
        return ot;
}

function getDimensions(el) {
	if (el.style.display != 'none') {
		return [ el.offsetWidth, el.offsetHeight ];
	}
	return [ el.clientWidth, el.clientHeight ];
}

function moveTo(el, left, top) {
        if (!el) return false;
        el.style.left = left + "px";
        el.style.top = top + "px";
}

function ViewOtherLoginForm(movable) {
        HideDiv("logged_as_is"+movable);
        ShowDiv("logged_as_other"+movable);

        try {
                for (var i=0; i < document.comment_post.logged_as.length; i++) {
                        if (document.comment_post.logged_as[i].value==3) {
                                document.comment_post.logged_as[i].checked = true;
                        }
                }
        } catch (e) {}

	checkExpertSelect(2);
	return false;
}

// <!--	VOTE

function voteMakeActiveStar(textID,num) {
	try {
		for (var i=1;i<=5;i++) {
			var el = GetElementById('vote_'+textID+'_'+i);
			el.src = num < i ? '/i/design/icons/_star_wh.gif' : '/i/design/icons/_star.gif';
		}
	} catch(e) {}
	return false;
}

function voteMakeDeativeStar(textID,rating) {
	try {
		if (ajaxExtra.ratingRound[textID]) rating = ajaxExtra.ratingRound[textID];
		for (var i=1;i<=5;i++) {
			var el = GetElementById('vote_'+textID+'_'+i);
			el.src = rating < i ? '/i/design/icons/_star_wh.gif' : '/i/design/icons/_star.gif';
		}
	} catch(e) {}
	return false;
}


function voteMakeActionSubmit(textID, params) {
	var url = '/post_ajax_vote_text.html';
	ajaxExtra["textID"] = textID;

	var req = new RAjaxRequest( {'url': url, method: 'post', params: params, callback: function(r, options){
		if ( req.responseIsSuccess ) {
			try {

				// закроем сообщение, если оно уже показано
				voteCloseMessage();

				eval(r.responseText);

				var votes	= res.votes;
				var rating	= res.rating;
				var ratingRound	= res.ratingRound;
				var message	= res.message;

				var voteElement = $('vote_'+ajaxExtra['textID']+'_votes');
				var ratingElement = $('vote_'+ajaxExtra['textID']+'_rating');

				// позиция дива блока с голосованием
				var divWithVote = $('vote_'+ajaxExtra['textID']+'_maindiv');

				var divWithVotePosition = [ OffsetLeft(divWithVote), OffsetTop(divWithVote) ];
				var divWithVoteWH = getDimensions(divWithVote);

				var divWithMessage = $('vote_message');
				if (!divWithMessage) {
					divWithMessage = document.createElement('div');
					divWithMessage.setAttribute('id', 'vote_message');
					divWithVote.appendChild(divWithMessage);
				}

				// выпирание вправо
				var deltaRight = 30;
				divWithMessage.innerHTML = message;
				divWithMessage.style.display = 'block';
				divWithMessage.style.position = 'absolute';
				divWithMessage.style.width = (divWithVoteWH[0]+deltaRight)+'px';

				var divWithVoteWH = getDimensions(divWithMessage);

				moveTo(divWithMessage, divWithVotePosition[0]-deltaRight, divWithVotePosition[1]-divWithVoteWH[1]);

				if (votes && voteElement) voteElement.innerHTML = votes;
				if (rating && ratingElement) ratingElement.innerHTML = rating;

				ajaxExtra.ratingRound[ ajaxExtra['textID'] ] = ratingRound;
				if (ratingRound) voteMakeDeativeStar(ajaxExtra['textID'], ratingRound);

			} catch (e) {}

		} else {
			return true;
		}
	} } );
	return false;
}

function voteCloseMessage() {
	var divVoteMessage = $('vote_message');
	if (divVoteMessage) divVoteMessage.style.display = 'none';
	return false;
}

// <!--	VOTE /

function viewAccessHidden(access_view) {
        for (var i=0; i<=3; i++) {
                HideDiv('access_view_'+i);
        }
        ShowDiv('access_view_'+access_view);
}


function checkBoxUnderForm(el, formName) {
	if (!el) return true; 

	// form object
	var formElement = GetElementById(formName);
	if (!formElement) return false;

	// есть ли данный елемент в форме
	var found = false;
	for (var i=0; i < formElement.length; i++) {
		var e = formElement.elements[i];
		if (e.name==el.name && e.value==el.value) {
			found = e;
			continue;
		}
	}	

	if (found) {
		if (el.checked==false) found.parentNode.removeChild(found);
	} else {
		var nhe = document.createElement('input');
		nhe.setAttribute('type', 'hidden');
		nhe.setAttribute('name', el.name);
		nhe.setAttribute('value', el.value);
		
		if (el.checked==true) formElement.appendChild(nhe);
	}
	return true;


	// existing hidden element
	var hiddenElement = GetElementById('hidden_'+formName+'_'+id);

	if (checked==true && hiddenElement) {
		return false;
	} else if (checked==true && !hiddenElement) {
		// new hidden comment
		var newHiddenElement = document.createElement('input');
		newHiddenElement.setAttribute('type', 'hidden');
		newHiddenElement.setAttribute('name', 'comment_id');
		newHiddenElement.setAttribute('value', id);
		newHiddenElement.setAttribute('id', 'hidden_'+formName+'_'+id);

		formElement.appendChild(newHiddenElement);
	} else if (checked==false && !hiddenElement) {
		return false;
	} else if (checked==false && hiddenElement) {
		hiddenElement.parentNode.removeChild(hiddenElement);
	}
}

// проверка на нажатие хотя бы одного чекбокса
function checkBoxUnderFormBeforeSend(formName, elName) {

	// form object
	var formElement = GetElementById(formName);
	if (!formElement) return false;

	var is_checked = false;
	for (var i=0; i < formElement.length; i++) {
		var el = formElement.elements[i];
		if (el.name==elName) {
			is_checked = true;
			continue;
		}
	}
	if (is_checked==true) {
		return confirm('Вы уверены в совершении данного действия?');
	} else {
		alert('Для совершения действия необходимо выбрать чекбоксы.');
	}
	return false;
}


// массив типа хэш с полным содержимым манипулируемого слоя
var commentActionForm = new Array();

// список действий, формы для которых нужно создавать
var hiddenAction = new Array();
hiddenAction['reply'] = 1;

// список действий, формы для которых нужно перемещать
var positionAction = new Array();
positionAction['delete'] = 1;
positionAction['freeze'] = 1;
positionAction['screen'] = 1;

// массив типа хэш для всех типов действий с последними эл-ми
var lastActionElement = new Array();


function makeActionForm(commentID, action, element, dX, dY, extra) {
	// запоминание написанного комментария
	var textareaElement = GetElementById('comment_body');
	if (!extra) {
		extra = {};
	}
	if (textareaElement && ( !extra || !extra.body )) {
		extra.body = textareaElement.value;
	}

	// закрываем ранее открытые эл-ты
	closeAllActionForm();

	if (typeof(element) == 'string') {
		element = GetElementById(element);
	}
	if (!element) return true;

	if (hiddenAction[action]) {
		return makeHiddenForm(commentID, action, element, extra);
	} else if (positionAction[action]) {
		return changePositionForm(commentID, action, element, dX, dY, extra);
	}

	return true;
}

function closeAllActionForm() {
	for (var action in lastActionElement) {
		var el = lastActionElement[action];
		if (typeof(el) != 'object') continue;

		if (hiddenAction[action]) {
			el.parentNode.removeChild(el);
		} else if (positionAction[action]) {
			el.style.display = 'none';
		}
		lastActionElement[action] = '';
	}
}

// показ формы, позиционирование которой происходит созданием эл-та
function makeHiddenForm(commentID, action, element, extra) {
	// get comment form to variable
	if (!commentActionForm[action]) {
		var commentActionFormElement = GetElementById('comment_'+action);
		if (!commentActionFormElement) return true;
		commentActionForm[action] = commentActionFormElement.innerHTML;
		commentActionFormElement.parentNode.removeChild(commentActionFormElement);
	}

	// src элемента
	var newElement = document.createElement('div');
	newElement.innerHTML = commentActionForm[action];

	element.appendChild(newElement);

	lastActionElement[action] = newElement;

	if (action=='reply') {
		// подставляем value textarea при цитировании
		var bodyValue = '';
		var textareaElement = GetElementById('comment_body');
		if (textareaElement) {
			var text_value = false;
			if (extra && extra.quote) {
				var quoteTextElement = GetElementById('comment_body_'+commentID);
				if (quoteTextElement) { bodyValue = '<blockquote>' + quoteTextElement.innerHTML + '</blockquote><br />\n'; }
				
			} else if (extra && extra.body) {
				bodyValue = extra.body;
			}
			textareaElement.value = bodyValue;
		}

		// set parent_id
		var pidElement = GetElementById('parent_id');
		if (pidElement) pidElement.value = commentID;

		// set text_id
		if (extra && extra.text_id) {
			var textIdElement = GetElementById('text_id');
			if (textIdElement) textIdElement.value = extra.text_id;
		}

		// set focus
		//alert(textareaElement.type);
		textareaElement.focus();
	}

	return false;
}

// показ формы, позиционирование которой происходит путем абсолютного
// позиционирования относительно заданного эл-та
function changePositionForm(commentID, action, element, dX, dY, extra) {

	var actionElement = GetElementById('comment_'+action+'_div');
	if (!actionElement) return true;

	actionElement.style.display = 'block';

	var X = OffsetLeft(element);
	var Y  = OffsetTop(element);

	X += isNaN( parseInt(dX) ) ? 0 : parseInt(dX);
	Y += isNaN( parseInt(dY) ) ? 0 : parseInt(dY);

//	// если все плохо, то все неплохо
//	if (navigator.userAgent.indexOf ("Opera") != -1){
//		Y =  window.event.y+document.body.scrollTop;
//		Y=Y-50;
//	}

        moveTo(actionElement, X, Y);
	lastActionElement[action] = actionElement;

	var hElement;
	if (action=='delete') {
		hElement = GetElementById('delete_id');

        var canBan = GetElementById('comment_delete_can_ban');
        if (canBan) { 
            if (extra && extra.can_ban) {
                canBan.style.display = 'block';
            } else {
                canBan.style.display = 'none';
            }
        } 
	} else if (action=='freeze') {
		hElement = GetElementById('freeze_id');
	} else if (action=='screen') {
		hElement = GetElementById('screen_id');
	}
        if (hElement) hElement.value = commentID;
	return false;
}


// При написании комментария, для эксперта показываем  экспертные оласти
function checkExpertSelect(v) {
	if (v==1) {
		ShowDiv('commentExpertSelect1');
		ShowDiv('commentExpertSelect2');
	} else {
		HideDiv('commentExpertSelect1');
		HideDiv('commentExpertSelect2');
	}
}

// показ всех экспертных областей при написании текста в конкретное сообщество
function getExpertDomainsForText(v, sel) {
	$('textExpertSelect2').style.display = 'none';
	$('textExpertSelect1').style.display = 'none';

	var url = '/post_entry_expert_domains_ajax.html';
	var params = 'c=' + v + '&selected=' + sel;
	var req = new RAjaxRequest( {'url': url, params: params, callback: function(r, options){
		if ( req.responseIsSuccess ) {
			if (r.responseText) {
				$('textExpertSelect2').innerHTML = r.responseText;
				$('textExpertSelect2').style.display = 'block';
				$('textExpertSelect1').style.display = 'block';
			}
		}
	} } );
}


// достаем комментарий по id
function getCommentBody(id, text, start_level, maxlevel, isgc) {
	var url = '/get_comment_body_ajax.html';
	var params = 'id=' + id  + '&text=' + text + '&start_level=' + start_level + '&maxlevel=' + maxlevel + '&isgc=' + isgc;
	$('comment_sp_'+ id).innerHTML = "<font color='#a6a6a6'>Комментарий загружается...</font>";

	var req = new RAjaxRequest( {'url': url, params: params, callback: function(r, options){
		if ( req.responseIsSuccess ) {
			if (r.responseText) {
				$('comment_div_'+ id).innerHTML = r.responseText;
			}
		}
	} } );
	return false;
}

function changer(target,src) {
	document.images[target].src = "/i/" + src + ".gif";
}

function openWin(wUri, wName, wWidth, wHeight, Scroll, wMenu) {
//    alert('test2');

	if (wWidth > 700){
		wWidth = 700; Scroll = 1;
		if (wHeight < 500){
			wHeight = wHeight + 16;
		}
	}
        if (wHeight > 600){
		wHeight = 600; Scroll = 1;
		if (wWidth < 700){
			wWidth = wWidth + 16;
		}
 	}
	var scrollBars = (Scroll!=0) ? 1 : 0;
	var menuBars = (wMenu) ? 1 : 0;
	var positionLeft = (screen.width - wWidth)/2;
	var positionTop = (screen.height - wHeight)/2;
	var myW = window.open(wUri,wName,'width='+wWidth+',height='+wHeight+',top='+positionTop+',left='+positionLeft+',location=0,menubar='+menuBars+',resizable=1,scrollbars='+scrollBars+',status=0,titlebar=0,toolbar=0,directories=0,hotkeys=0')
	myW.focus();
}

function setTMCHref(a) {
	if (!a) return true;
	a.href = '/post_comment.html?text_id='+document.comment_post.text_id.value+'&parent_id='+document.comment_post.parent_id.value+'&tmc_enable=1&back='+document.comment_post.back.value+'#comment';
}
