var IE5  = (navigator.userAgent.indexOf('MSIE')!=-1) && (navigator.userAgent.indexOf('Opera')==-1);
var Opera7 = (navigator.userAgent.indexOf('Opera')!=-1) && (get_browser_ver('Opera')>=7);
var Gecko = (navigator.userAgent.indexOf('Gecko')!=-1);

var imageTag = false;
var theSelection = false;
var pressSubmitButton = 0;

var clientPC = navigator.userAgent.toLowerCase();
var clientVer = parseInt(navigator.appVersion); 

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);

var cid = 0;
var uid = 0;

// Define the bbCode tags
bbcode = new Array();
bbtags = new Array('[b]','[/b]','[i]','[/i]','[url]','[/url]', '[quote]', '[/quote]', '[sp]', '[/sp]', '[off]', '[/off]');
imageTag = false;

document.onmouseup = qoute_copier_handler;

function ctrlEnter(event, formElem){
	if((event.ctrlKey) && ((event.keyCode == 0xA)||(event.keyCode == 0xD))){
		$(formElem).submit();
	}
}

function get_browser_ver(browser_id){
var ua = navigator.userAgent;
var offset = ua.indexOf(browser_id);
ua = ua.substring(offset+browser_id.length+1, ua.length);
var end = ua.search(/;| |,|$/);

return parseFloat(ua.substring(0, end));
}// get_browser_ver()


// Replacement for arrayname.length property
function getarraysize(thearray) {
	for (i = 0; i < thearray.length; i++){
		
		if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
			return i;
		}
		
	return thearray.length;
}

// Replacement for arrayname.push(value) not implemented in IE until version 5.5
// Appends element to the array
function arraypush(thearray, value){
	
	thearray[ getarraysize(thearray) ] = value;
}

// Replacement for arrayname.pop() not implemented in IE until version 5.5
// Removes and returns the last element of an array
function arraypop(thearray) {
	thearraysize = getarraysize(thearray);
	retval = thearray[thearraysize - 1];
	delete thearray[thearraysize - 1];
	return retval;
}


function check_form(name) {

var txtarea = get_editfield(name);

if(txtarea == null || !txtarea){
	return false;
}
	
if(txtarea.value.length < 2){
	alert("Необходимо, чтобы поле комментария было заполнено!");
	return false;
}else{
// 	if(!pressSubmitButton){
// 		pressSubmitButton = 1;
		// ЗАКРЫТИЕ ВСЕХ ТЕГОВ!!!
		//bbstyle(-1);
		close_all_tags(txtarea);
		return true;
// 	}
}

return false;
}// check_form()------------------------------------------------------------------------------------------------------------------------



// Поиск нужного поля
function get_editfield(name){
	
var txtarea = document.getElementById(name);

if(txtarea == null){
	
	alert('Не найдена область текста ' + name);
	return null;
}

// Если существуют тэги с одинаковыми именами или id на странице, то можно получить не тот объект
if(txtarea.tagName != 'TEXTAREA'){

	var t = document.getElementsByTagName('TEXTAREA');
	var found = 0;
	
	for(var i=0; i<t.length; i++){

		if(t[i].tagName == 'TEXTAREA' && t[i].id == name){
			
			txtarea = t[i];
			found = 1;
		}
	}

	// Указанная форма так и не была найдена
	if(!found){
		
		alert('Не найдена область текста ' + name);
		return null;
	}
}

return txtarea;	
}// get_editfield()------------------------------------------------------------------------------------------------------------------------



// Закрыть все открытые теги
function close_all_tags(txtarea){

if(txtarea == null || !txtarea){
	
	return;
}

while(bbcode[0]){

	butnumber = arraypop(bbcode) - 1;
	txtarea.value += bbtags[butnumber + 1];
}

// All tags are closed including image tags :D
imageTag = false; 
txtarea.focus();

return;
}// close_all_tags()--------------------------------------------------------------------------------------------------------------------




function ixbtstyle(bbnumber, name){

	var txtarea = get_editfield(name);

	if(txtarea == null || !txtarea){
		return;
	}


	if(bbnumber == 4){
		var ctr_form = document.getElementById('url_c');

		// Если фрагмент текста был выделен, то добавляем его в виде названия ссылки
		var theSelection = '';

		if((clientVer >= 4) && is_ie && is_win){
			theSelection = document.selection.createRange().text;
		}

		else if(txtarea.selectionEnd){
			theSelection = mozExtractSelection(txtarea);
		}

		if(theSelection.indexOf('http://') == -1){
			document.getElementById('url_title').value= theSelection;
			document.getElementById('url_href').value = '';
		}else{
			document.getElementById('url_title').value= theSelection;
			document.getElementById('url_href').value = theSelection;
		}

		if(!ctr_form){
			return;	
		}

		if(ctr_form.style.display == 'none'){
			
			var x  = GetLeftPos(txtarea);
			var y =  GetTopPos(txtarea);	
			
			ctr_form.style.left = x + 'px';
			ctr_form.style.top = y + 'px';
			ctr_form.style.display = 'block';
		}
		
	}

}// ixbtstyle()----------------------------------------------------------------------------------------------------------------------------



function ixbtstyle2(bbnumber, name, popup_block_id, url_title_field_id, url_href_field_id){

	var txtarea = get_editfield(name);

	if(txtarea == null || !txtarea){
		return;
	}


	if(bbnumber == 4){
		var ctr_form = document.getElementById(popup_block_id);

		// Если фрагмент текста был выделен, то добавляем его в виде названия ссылки
		var theSelection = '';

		if((clientVer >= 4) && is_ie && is_win){
			theSelection = document.selection.createRange().text;
		}

		else if(txtarea.selectionEnd){
			theSelection = mozExtractSelection(txtarea);
		}

		if(theSelection.indexOf('http://') == -1){
			document.getElementById(url_title_field_id).value= theSelection;
			document.getElementById(url_href_field_id).value = '';
		}else{
			document.getElementById(url_title_field_id).value= theSelection;
			document.getElementById(url_href_field_id).value = theSelection;
		}

		if(!ctr_form){
			return;
		}

		if(ctr_form.style.display == 'none'){
			var x  = GetLeftPos(txtarea);
			var y =  GetTopPos(txtarea);	

			ctr_form.style.left = x + 'px';
			ctr_form.style.top = y + 'px';
			ctr_form.style.display = 'block';
		}

	}

}// ixbtstyle()----------------------------------------------------------------------------------------------------------------------------



function close_url_tag(name){
	var ctr_form = document.getElementById('url_c');
	document.getElementById('url_href').value = '';
	document.getElementById('url_title').value= '';

	if(!ctr_form){
		return;
	}

	ctr_form.style.display = 'none';
	var txtarea = get_editfield(name);

	if(txtarea){
		txtarea.focus();
	}
}// close_url_tag()---------------------------------------------------------------------------------------------------------------------

function close_url_tag2(name, popupper_id, url_title_field_id, url_href_field_id){
	var ctr_form = document.getElementById(popupper_id);
	document.getElementById(url_href_field_id).value = '';
	document.getElementById(url_title_field_id).value= '';

	if(!ctr_form){
		return;
	}

	ctr_form.style.display = 'none';
	var txtarea = get_editfield(name);

	if(txtarea){
		txtarea.focus();
	}
}// close_url_tag2()---------------------------------------------------------------------------------------------------------------------




function check_url_tag(name){
	var href = document.getElementById('url_href');
	var title = document.getElementById('url_title');
	var result = '';

	if((!title.value && !href.value) || (title.value && !href.value)){
		result = '';
	}else{
		if(!title.value && href.value){
			title.value = href.value;
		}
		if(!href.value.match('http://')){
			href.value = 'http://' + href.value;
		}
		result = '[url href=' + href.value + ']' + title.value+ '[/url]';
	}

	var txtarea = get_editfield(name);
	if(txtarea == null || !txtarea){
		return;
	}


	if(result){
		var theSelection = '';
		var b_type = 0;
		// Определяем было ли сделано выделение и определяем тип браузера
		if((clientVer >= 4) && is_ie && is_win){
			theSelection = document.selection.createRange().text;
		}else if(txtarea.selectionEnd){
			theSelection = mozExtractSelection(txtarea);
			b_type = 1;
		}
		
		// Если выделения не было то добавляем в конец строки, иначе заменяем выделенный текст
		if(! theSelection){
			txtarea.value += result;
		}else{
			if(! b_type){
				document.selection.createRange().text = result;
			}else{
				mozWrapReplace(txtarea, result);
			}
		}
	}

	txtarea.focus();
	ctr_form = document.getElementById('url_c');

	if(!ctr_form){
		return;
	}

	ctr_form.style.display = 'none';
}// check_url_tag()---------------------------------------------------------------------------------------------------------------------


function check_url_tag2(name, popupper_id, url_title_field_id, url_href_field_id){
	var href = document.getElementById(url_href_field_id);
	var title = document.getElementById(url_title_field_id);
	var result = '';

	if((!title.value && !href.value) || (title.value && !href.value)){
		result = '';
	}else{
		if(!title.value && href.value){
			title.value = href.value;
		}
		if(!href.value.match('http://')){
			href.value = 'http://' + href.value;
		}
		result = '[url href=' + href.value + ']' + title.value+ '[/url]';
	}

	var txtarea = get_editfield(name);
	if(txtarea == null || !txtarea){
		return;
	}


	if(result){
		var theSelection = '';
		var b_type = 0;
		// Определяем было ли сделано выделение и определяем тип браузера
		if((clientVer >= 4) && is_ie && is_win){
			theSelection = document.selection.createRange().text;
		}else if(txtarea.selectionEnd){
			theSelection = mozExtractSelection(txtarea);
			b_type = 1;
		}
		
		// Если выделения не было то добавляем в конец строки, иначе заменяем выделенный текст
		if(! theSelection){
			txtarea.value += result;
		}else{
			if(! b_type){
				document.selection.createRange().text = result;
			}else{
				mozWrapReplace(txtarea, result);
			}
		}
	}

	txtarea.focus();
	ctr_form = document.getElementById(popupper_id);

	if(!ctr_form){
		return;
	}

	ctr_form.style.display = 'none';
}// check_url_tag2()---------------------------------------------------------------------------------------------------------------------


function bbstyle(bbnumber, name){

	var txtarea = get_editfield(name);

	if(txtarea == null || !txtarea){
		return;
	}

	txtarea.focus();
	donotinsert = false;
	theSelection = false;
	bblast = 0;


	if((clientVer >= 4) && is_ie && is_win){

		// Get text selection
		theSelection = document.selection.createRange().text;

		// Add tags around selection
		if(theSelection){

			document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
			txtarea.focus();
			theSelection = '';
			return;
		}
	}

	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0)){
		mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
		return;
	}


	// Find last occurance of an open tag the same as the one just clicked
	for (i = 0; i < bbcode.length; i++) {
		if (bbcode[i] == bbnumber+1){
			bblast = i;
			donotinsert = true;
		}
	}


	// Close all open tags up to the one just clicked & default button names
	if (donotinsert){
		while (bbcode[bblast]){
			butnumber = arraypop(bbcode) - 1;
			txtarea.value += bbtags[butnumber + 1];
			imageTag = false;
		}
		txtarea.focus();
		return;
	}
	
	// Open tags
	else{ 
	
		// Close image tag before adding another
		if(imageTag && (bbnumber != 6)){
			
			txtarea.value += bbtags[7];
			lastValue = arraypop(bbcode) - 1;	// Remove the close image tag from the list
			imageTag = false;
		}
		
		// Open tag
		txtarea.value += bbtags[bbnumber] + bbtags[bbnumber+1];
		
		// Check to stop additional tags after an unclosed image tag
		if((bbnumber == 6) && (imageTag == false)){
			imageTag = 1; 
		}
		
// 		arraypush(bbcode, bbnumber+1);
		txtarea.focus();
		return;
	}// else

}


function mozWrap(txtarea, open, close){
	
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;

if(selEnd == 1 || selEnd == 2){

	selEnd = selLength;
}

var s1 = (txtarea.value).substring(0,selStart);
var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + open + s2 + close + s3;

return;
}


function mozWrapReplace(txtarea, str){
	
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;

if(selEnd == 1 || selEnd == 2){

	selEnd = selLength;
}

var s1 = (txtarea.value).substring(0,selStart);
//var s2 = (txtarea.value).substring(selStart, selEnd)
var s3 = (txtarea.value).substring(selEnd, selLength);
txtarea.value = s1 + str + s3;

return;
}


function mozExtractSelection(txtarea){
	
var selLength = txtarea.textLength;
var selStart = txtarea.selectionStart;
var selEnd = txtarea.selectionEnd;

if(selEnd == 1 || selEnd == 2){

	selEnd = selLength;
}

var selection = (txtarea.value).substring(selStart, selEnd);

return	selection;
}


function GetLeftPos(obj)
{

var left = obj.offsetLeft;

while((obj = obj.offsetParent) != null){

	left += obj.offsetLeft;
}
   
return left;
}


function GetTopPos(obj)
{

var top = obj.offsetTop;

while((obj = obj.offsetParent) != null)
{
   top += obj.offsetTop;
}

return top;
}


function has_parent(obj, attr, pattern){
	while(obj){
		obj = obj.parentNode;
		if(obj.tagName == 'BODY'){
			return null;
		}
		if(obj.getAttribute(attr) && obj.getAttribute(attr).search(pattern) != -1){
			return obj;
		}
	}
	return null;
}// has_parent()


function get_selection(){

var selection = '';
	
if(document.getSelection){
	
	selection = document.getSelection();
} 

else if(window.getSelection){
	
	selection = window.getSelection().toString();
} 

else{
	
      selection = document.selection.createRange().text;
}
	
return selection;
}// get_selection()



function qoute_copier_handler(event){

var e = window.event || event;
theSelection = get_selection();

if(theSelection){
	
	var float_block = document.getElementById('float_paste');
	var div = e.target || e.srcElement;
	var id = div.getAttribute('id');
	var pattern = /comment:(\d+);user:(\d+)/;
		
	if(id == null || id.search(pattern) == -1){
		div = has_parent(div, 'id', pattern);
		if(div == null){
			return null;
		}
		id = div.getAttribute('id');
	}
	
	var tmp = id.match(pattern);
	cid = tmp[1];
	uid = tmp[2];
	
	if(float_block != null && IE5 || Opera7 || Gecko){

		var x  = e.clientX + self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
		var y  = e.clientY + self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
		
		float_block.style.left = x + 'px';
		float_block.style.top = y + 'px';
		float_block.style.display = 'block';
		
		var interval = setInterval(function(){hide_paste_window(interval)}, 3000);
	}		
}
}


function hide_paste_window(interval){ 
	document.getElementById('float_paste').style.display='none';
	if(interval){
		clearInterval(interval);
	}
}


function paste(name){

var txtarea = get_editfield(name);
	
if(txtarea == null || !txtarea){
	
	return;
}

if(theSelection && cid && uid){

	var user_name = '';

	if(window.user_list[uid]){
		user_name = window.user_list[uid];
	}
	var tval = txtarea.value;
	if(tval.length > 1){
		txtarea.value += "\n" + '[quote cid=' + cid + '; uid="' + user_name + '"]' + theSelection + '[/quote]';
	}else{
		txtarea.value += '[quote cid=' + cid + '; uid="' + user_name + '"]' + theSelection + '[/quote]';
	}
	$("html:not(:animated)"+( ! $.browser.opera ? ",body:not(:animated)" : "")).animate({scrollTop: $('.comment_form').position().top}, 300);
	txtarea.focus();	
}
}// paste()


function reply_user(c_id, u_id, name){

//var id = 'comment:' + c_id + ';user:' + u_id;
var txtarea = get_editfield(name);
//var div = document.getElementById(id);
//var pattern = /<[^>]+>/gi;
 
if(txtarea == null || !txtarea){
	
	return;
}

//var str = div.innerHTML.replace(pattern, '');
//var str = div.innerHTML;

var user_name = '';

if(window.user_list[u_id]){
	user_name = window.user_list[u_id];
}

// Чтобы подставить вместо id пользователя его имя необходимо сгенерировать список js в виде id => username

var tval = txtarea.value;
if(tval.length > 1){
	txtarea.value += "\n" + '[reply cid=' + c_id + ']' + ((user_name) ? user_name : u_id) + '[/reply]' + "\n";
}else{
	txtarea.value += '[reply cid=' + c_id + ']' + ((user_name) ? user_name : u_id) + '[/reply]' + "\n";
}
$("html:not(:animated)"+( ! $.browser.opera ? ",body:not(:animated)" : "")).animate({scrollTop: $('.comment_form').position().top}, 300);
txtarea.focus();
}// reply_user


function to_user(user_name, name){

//var id = 'comment:' + c_id + ';user:' + u_id;
var txtarea = get_editfield(name);
//var div = document.getElementById(id);
//var pattern = /<[^>]+>/gi;
 
if(txtarea == null || !txtarea){
	return;
}

//var str = div.innerHTML.replace(pattern, '');
//var str = div.innerHTML;

// Чтобы подставить вместо id пользователя его имя необходимо сгенерировать список js в виде id => username
var tval = txtarea.value;
if(tval.length > 1){
	txtarea.value = txtarea.value + "\n" + '[b]' + user_name + ':[/b]' + "\n";
}else{
	txtarea.value = txtarea.value + '[b]' + user_name + ':[/b]' + "\n";
}
$("html:not(:animated)"+( ! $.browser.opera ? ",body:not(:animated)" : "")).animate({scrollTop: $('.comment_form').position().top}, 300);
txtarea.focus();
}// reply_user



function img(name, url){
	
	var txtarea = get_editfield(name);
	
	if(txtarea == null || !txtarea){
	
		return;
	}

	txtarea.value += '[img]' + url + '[/img]' ;
	window.focus();
	txtarea.focus();
}// img

//-->

