// bbCode control by
// subBlue design
// www.subBlue.com

// Startup variables
var imageTag = false;
var theSelection = false;

var l_empty_message = "Вы должны ввести текст сообщения";
var l_empty_subject = "Вы должны указать заголовок сообщения";
var l_empty_select = "Вы должны выбрать раздел";

// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

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);

// Define the bbCode tags
bbcode = new Array();
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]');
imageTag = false;

// 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 preview_first(sw)
{
	if (checkForm(sw))
	{
		Closeid('button_single');
		Openid('button_double');
		preview(sw);
	}
}

function previewResult(ajaxObj, params){
	document.getElementById('prev_text').innerHTML = ajaxObj.responseText;

	if(params.s != 0)
	{
		scroll(0,0);
	}
}
function preview(sw) {
	if( checkForm(sw) ) {
		Openid('preview1');
		Openid('preview2');
		document.getElementById('prev_text').innerHTML = '<center><img src="/img/loading.gif" border="0"></center>';

		var url = "/write.php";
		if (sw != 0)
		{
			var subj = (document.post.subject.value == 'Заголовок') ? '' : document.post.subject.value;
			var data = "mode=newtopic&preview=1&subject="+encodeURIComponent(subj)+"&message="+encodeURIComponent(document.post.message.value);
		}
		else
		{
			var data = "mode=newtopic&preview=1&message="+encodeURIComponent(document.post.message.value);
		}
		var params = {s:sw, d:data};
		ajaxLoadPost(url, data, previewResult, window, params);
	}
}
function zapost(sw) {
	if( checkForm(sw) ) {
		if (sw != 0 && document.post.subject.value == 'Заголовок')
		{
			document.post.subject.value == '';
		}
		document.post.submit();
	}
}
function checkForm(sw) {

	formErrors = false;    

	if (document.post.message.value.length < 2) {
		formErrors = l_empty_message;
	}
	if (sw != 0 && (document.post.subject.value == 'Заголовок' || document.post.subject.value.length < 1))
	{
		formErrors = l_empty_subject;
	}
	if (sw == 1 && (document.post.f.value == '-1'))
	{
		formErrors = l_empty_select;
	}

	if (formErrors) {
		alert(formErrors);
		return false;
	} else {
		bbstyle(-1);
		//formObj.preview.disabled = true;
		//formObj.submit.disabled = true;
		return true;
	}
}

function preview_edit() {
	if( checkForm_edit() ) {
		Openid('preview_edit');
		var prev_text = document.edit.message.value;
		prev_text = prev_text.replace(/"/g, '&quot;');
		prev_text = prev_text.replace(/</g, '&lt;');
		prev_text = prev_text.replace(/>/g, '&gt;');
		prev_text = prev_text.replace(/\n/ig, "<br>");
		prev_text = prev_text.replace(/\[b\](.*?)\[\/b\]/ig, '<span style="font-weight: bold">$1</span>');
		prev_text = prev_text.replace(/\[u\](.*?)\[\/u\]/ig, '<span style="text-decoration: underline">$1</span>');
		prev_text = prev_text.replace(/\[i\](.*?)\[\/i\]/ig, '<span style="font-style: italic">$1</span>');
		prev_text = prev_text.replace(/\[img\](.*?)\[\/img\]/ig, '<img src="$1" border=0>');
		prev_text = prev_text.replace(/\[url=(.*?)\](.*?)\[\/url\]/ig, '<a class=postlink href="$1" target=_blank>$2</a>');

		prev_text = prev_text.replace(/(script|about|applet|activex|chrome):/ig, '$1&#058;');
		ret = ' '+prev_text;
		ret = ret.replace(/(^|[\n ])([\w]+?:\/\/[\w\#$%&~\/.\-;:=,?@\[\]+]*)/ig, '$1<a href="$2" target="_blank">$2</a>');
		ret = ret.replace(/(^|[\n ])((www|ftp)\.[\w\#$%&~\/.\-;:=,?@\[\]+]*)/ig, '$1<a href="http://$2" target="_blank">$2</a>');
		ret = ret.replace(/(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)/ig, '$1<a href="mailto:$2@$3">$2@$3</a>');
		prev_text = ret.substr(1);

		document.getElementById('prev_edit_text').innerHTML= prev_text;
	}
}
function zapost_edit() {
	if( checkForm_edit() ) {
		document.edit.action=document.edit.action+'&post=post';
		document.edit.submit();
	}
}
function checkForm_edit() {

	formErrors = false;    

	if (document.edit.message.value.length < 2) {
		formErrors = l_empty_message;
	}

	if (formErrors) {
		alert(formErrors);
		return false;
	} else {
		bbstyle(-1);
		//formObj.preview.disabled = true;
		//formObj.submit.disabled = true;
		return true;
	}
}

function emoticon(text) {
	var txtarea = (document.post.edit_text.value == '') ? document.post.message : document.edit.message;
	text = ' ' + text + ' ';
	if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += text;
		txtarea.focus();
	}
}

function emoticon_wospaces(text) {
	var txtarea = (document.post.edit_text.value == '') ? document.post.message : document.edit.message;
	if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += text;
		txtarea.focus();
	}
}

function bbstyle(bbnumber) {
	var txtarea = (document.post.edit_text.value == '') ? document.post.message : document.edit.message;

	txtarea.focus();
	donotinsert = false;
	theSelection = false;
	bblast = 0;

	if (bbnumber == -1) { // Close all open tags & default button names
		while (bbcode[0]) {
			butnumber = arraypop(bbcode) - 1;
			txtarea.value += bbtags[butnumber + 1];
			buttext = eval('document.post.addbbcode' + butnumber + '.value');
			eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
		}
		imageTag = false; // All tags are closed including image tags :D
		txtarea.focus();
		return;
	}

	if ((clientVer >= 4) && is_ie && is_win)
	{
		theSelection = document.selection.createRange().text; // Get text selection
		if (theSelection) {
			// Add tags around selection
			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;
		}
	}

	if (donotinsert) {		// Close all open tags up to the one just clicked & default button names
		while (bbcode[bblast]) {
				butnumber = arraypop(bbcode) - 1;
				txtarea.value += bbtags[butnumber + 1];
				buttext = eval('document.post.addbbcode' + butnumber + '.value');
				eval('document.post.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
				imageTag = false;
			}
			txtarea.focus();
			return;
	} else { // Open tags
	
		if (imageTag && (bbnumber != 14)) {		// Close image tag before adding another
			txtarea.value += bbtags[15];
			lastValue = arraypop(bbcode) - 1;	// Remove the close image tag from the list
			document.post.addbbcode14.value = "Img";	// Return button back to normal state
			imageTag = false;
		}
		
		// Open tag
		txtarea.value += bbtags[bbnumber];
		if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
		arraypush(bbcode,bbnumber+1);
		eval('document.post.addbbcode'+bbnumber+'.value += "*"');
		txtarea.focus();
		return;
	}
	storeCaret(txtarea);
}

function getCursor(input){
	var result = {start: 0, end: 0};
	if (input.setSelectionRange){
		result.start= input.selectionStart;
		result.end = input.selectionEnd;
	} else if (!document.selection) {
		return false;
	} else if (document.selection && document.selection.createRange) {
		var range = document.selection.createRange();
		var stored_range = range.duplicate();
		stored_range.moveToElementText(input);
		stored_range.setEndPoint('EndToEnd', range);
		result.start = stored_range.text.length - range.text.length;
		result.end = result.start + range.text.length;
	}
	return result;
}

function setCursor(txtarea, start, end){
	if(txtarea.createTextRange) {
		var range = txtarea.createTextRange();
		range.move("character", start);
		range.select();
	} else if(txtarea.selectionStart) {
		txtarea.setSelectionRange(start, end);
	}
}

function insert_tag(startTag, endTag){
	var txtarea = document.post.message;
	txtarea.focus();

	var scrtop = txtarea.scrollTop;

	var cursorPos = getCursor(txtarea);
	var txt_pre = txtarea.value.substring(0, cursorPos.start);
	var txt_sel = txtarea.value.substring(cursorPos.start, cursorPos.end);
	var txt_aft = txtarea.value.substring(cursorPos.end);

	if (cursorPos.start == cursorPos.end){
		var nuCursorPos = cursorPos.start + startTag.length;
	}else{
		var nuCursorPos=String(txt_pre + startTag + txt_sel + endTag).length;
	}
	txtarea.value = txt_pre + startTag + txt_sel + endTag + txt_aft;
	setCursor(txtarea,nuCursorPos,nuCursorPos);

	if (scrtop) txtarea.scrollTop=scrtop;
}

function insert_text(tagName){
	var startTag = (tagName == 'url') ? '[' + tagName + '=]' : '[' + tagName + ']';
	var endTag = '[/' + tagName + ']';
	insert_tag(startTag, endTag);	
	return false;
}
function insert_sm(tagName){
	var startTag = ' [' + tagName + '] ';
	insert_tag(startTag, '');	
	return false;
}
function insert_link_prepare(type)
{
	var txtarea = (document.post.edit_text.value == '') ? document.post.message : document.edit.message;
	txtarea.focus();
	var cur = getCursor(txtarea);
	if(type == 1 && cur.start == cur.end){
		alert('Выделите текст, который должен стать ссылкой');
		return false;
	}
	document.getElementById('pos').value=cur.end;
	var link = document.getElementById('link');
	insert_tag('%start%', '%end%');
	link.value = txtarea.value;
	txtarea.value = txtarea.value.replace('%start%', '');
	txtarea.value = txtarea.value.replace('%end%', '');
	Openid('black');
	Openid('overlay');
	if (type == 1)
	{
		Openid('link_table');
		document.getElementById('link_text').focus();
	}
	else if (type == 2)
	{
		Openid('vlink_table');
		document.getElementById('vlink_text').focus();
	}
	else
	{
		Openid('ilink_table');
		document.getElementById('ilink_text').focus();
	}
	return false;
}
function insert_link(type)
{
	if (type == 1)
	{
		var link_text = document.getElementById('link_text');
		if (link_text.value.substr(0,4) != 'www.' && link_text.value.substr(0,7) != 'http://' && link_text.value.substr(0,7) != '')
		{
			alert('Нормальные адреса выглядят несколько иначе');
			return false;
		}
		Closeid('link_table');
	}
	else if (type == 2)
	{
		var link_text = document.getElementById('vlink_text');
		if (link_text.value.substr(0,4) != 'www.' && link_text.value.substr(0,7) != 'http://' && link_text.value.substr(0,7) != '')
		{
			alert('Нормальные адреса выглядят несколько иначе');
			return false;
		}
		Closeid('vlink_table');
	}
	else if (type == 3)
	{
		var link_text = document.getElementById('ilink_text');
		if (link_text.value.substr(0,4) != 'www.' && link_text.value.substr(0,7) != 'http://' && link_text.value.substr(0,7) != '')
		{
			alert('Нормальные адреса выглядят несколько иначе');
			return false;
		}
		Closeid('ilink_table');
	}
	else return false;
	Closeid('black');
	Closeid('overlay');
	if (type == 1)
	{
		Closeid('link_table');
		var link_text = document.getElementById('link_text');
	}
	else if (type == 2)
	{
		Closeid('vlink_table');
		var link_text = document.getElementById('vlink_text');
	}
	else
	{
		Closeid('ilink_table');
		var link_text = document.getElementById('ilink_text');
	}
	var txtarea = (document.post.edit_text.value == '') ? document.post.message : document.edit.message;
	txtarea.focus();
	var link = document.getElementById('link');
	if (link_text.value == 'ссылка' || link_text.value == '')
	{
		link_text.value == '';
		link.value = '';
		var pos = parseInt(document.getElementById('pos').value);
		setCursor(txtarea,pos,pos);
		return false;
	}
	link_text.value = encodeURIComponent(link_text.value).replace(/%3A/ig, ':').replace(/%2F/ig, '/').replace(/%25/ig,'%').replace(/%3F/ig,'?').replace(/%3D/ig,'=').replace(/%23/ig,'#').replace(/%26/ig,'&').replace(/%2B/ig,'+').replace(/%2C/ig,',').replace(/\(/ig,'%28').replace(/\)/ig,'%29');
	if (type == 1)
	{
		startTag = '[url=' + link_text.value + ']';
		endTag = '[/url]';
	}
	else if (type == 2)
	{
		startTag = '';
		endTag = '[video]' + link_text.value + '[/video]';
	}
	else
	{
		startTag = '';
		endTag = '[img]' + link_text.value + '[/img]';
	}
	link.value = link.value.replace('%start%', startTag);
	link.value = link.value.replace('%end%', endTag);
	txtarea.value = link.value;
	if (type == 1)
	{
		var pos = parseInt(document.getElementById('pos').value) + parseInt(link_text.value.length) + 12;
	}
	else if (type == 2)
	{
		var pos = parseInt(document.getElementById('pos').value) + parseInt(link_text.value.length) + 15;
	}
	else
	{
		var pos = parseInt(document.getElementById('pos').value) + parseInt(link_text.value.length) + 11;
	}
	setCursor(txtarea,pos,pos);
	link.value = '';
	link_text.value = '';
	return false;
}

// From http://www.massless.org/mozedit/
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;
}

// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
function storeCaret(textEl) {
	if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

var selection = false; // Selection data

// Catching selection
function catchSelection()
{
	if (window.getSelection)
	{
		selection = window.getSelection().toString();
	}
	else if (document.getSelection)
	{
		selection = document.getSelection();
	}
	else if (document.selection)
	{
		selection = document.selection.createRange().text;
	}
}

// Putting username to the post box
function putName(name)
{ 
	emoticon_wospaces(name+', '); 
	document.post.message.focus(); 
	return; 
}
function reply(name, msg)
{ 
	if (document.post.reply.value.length) {
		var arr = document.post.reply.value.substr(1).split(',');
		var cnt = arr.length;
	}
	else var cnt = 0;
	emoticon_wospaces('[reply'+(cnt+1)+'='+name+'], '); 
//	emoticon_wospaces(name+', '); 
	document.post.message.focus();
	document.post.reply.value += ','+msg;
	return; 
}

function reply_back(msg, back) {
	document.getElementById('back'+msg).innerHTML = '&nbsp;<a href="#'+back+'" onclick="document.getElementById(\'back'+msg+'\').innerHTML=\'\';" style="color: black; border-bottom: 1px dashed;">назад</a>';
}

// Putting selection to the post box
function quoteSelection(name)
{
	if (selection)
	{ 
		emoticon_wospaces('[quote="'+name+'"]' + selection + '[/quote]\n'); 
		selection = '';
		document.post.message.focus(); 
		return; 
	}
	else
	{ 
		alert(l_no_text_selected);
		return; 
	} 
}
