function f_txtarea() {
    if (typeof(document.form_input) != 'undefined')
    {
      return document.form_input.text_input;
    } 
}

// text wrap
function check_length(message, maxLen){
	if (message.value.length > maxLen)
	{
	 message.value = message.value.substring(0, maxLen);
	}
}

// Startup variables
var imageTag = false;
var theSelection = false;

// 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]','[center]','[/center]','[left]','[/left]','[right]','[/right]','[color=]','[/color]','[email]','[/email]','[email=]','[/email]','[url]','[/url]','[url=]','[/url]','[img]','[/img]','[quote]','[/quote]','[mark]','[/mark]','[youtube]','[/youtube]','[mail.ru]','[/mail.ru]','[опрос]\nВопрос\nОтвет1\nОтвет2\n...\nОтветN\n[/опрос]','');
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 bbfontstyle(bbopen, bbclose) {
	txtarea = f_txtarea();

	if ((clientVer >= 4) && is_ie && is_win) {
		theSelection = document.selection.createRange().text;
		if (!theSelection) {
			txtarea.value += bbopen + bbclose;
			txtarea.focus();
			return;
		}
		document.selection.createRange().text = bbopen + theSelection + bbclose;
		txtarea.focus();
		return;
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
	{
		mozWrap(txtarea, bbopen, bbclose);
		return;
	}
	else
	{
		txtarea.value += bbopen + bbclose;
		txtarea.focus();
	}
	storeCaret(txtarea);
}


function bbstyle(bbnumber) {
	txtarea = f_txtarea();

	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];
		}
		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];
				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
			
			imageTag = false;
		}

		// Open tag
		txtarea.value += bbtags[bbnumber];
		if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; 
		arraypush(bbcode,bbnumber+1);
		txtarea.focus();
		return;
	}
	storeCaret(txtarea);
}

// 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;
}


// from Piter
function GetSelectionText(txtarea)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd == 1 || selEnd == 2)
		selEnd = selLength;

	var s2 = (txtarea.value).substring(selStart, selEnd)
	return s2;
}

function magnet_link() {
	txtarea = f_txtarea();
  theSelection = false;
  if ((clientVer >= 4) && is_ie && is_win)
	{
		theSelection = document.selection.createRange().text; // Get text selection
		if (!theSelection) {
                    return ;
		}
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
	{
		theSelection = GetSelectionText(txtarea);
	}
        else { return ; }

			
  var re = new RegExp("^magnet:\\?xt=urn:tree:tiger:[A-Z0-9]+&xl=([0-9]+)&dn=(\\S+)$");
  var arr = re.exec(theSelection);
  size = RegExp.$1;
  name = RegExp.$2;
  if ( (size == "") | (name == "") ) { return ; }

  var size_i = new Number(size);
      if (size_i > 1073741824)
        {
          size = ( Math.round((size_i*100) / 1073741824) / 100) + ' GB';
        }
      else if (size_i > 1048576)
        {
          size = ( Math.round((size_i*10) / 1048576) / 10 ) + ' MB';
        }
      else if (size_i > 1024)
        {
          size = Math.round(size_i / 1024) + ' KB';
        }
      else
        {
          size = size_i + ' B';
        }  
  var re;
  re = /\+/g;
  name = name.replace(re, " ");
  name = name.replace(/%2C/g,",");
  name = decodeURI(name);

  theSelection = false;
  if ((clientVer >= 4) && is_ie && is_win)
	{
		theSelection = document.selection.createRange().text;
		if (theSelection) {
			document.selection.createRange().text = "[url="+theSelection+"]"+name+"[/url]"+" ["+size+"]" ;
			txtarea.focus();
			theSelection = '';
			return;
		}
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
	{
		mozWrap(txtarea, "[url=", "]"+name+"[/url]"+" ["+size+"]");
		return;
	}
}

function hideshowdiv(el)
{
	var elems = el.getElementsByTagName('div');
	for(var i=0; i<elems.length; i++)
		if (elems[i].id == 'hb')
			var hb = elems[i];
	if (hb.currentStyle.display == 'none')
	{
		hb.style.display = 'block';
		el.style.background = 'url(/ico/minus.gif) no-repeat 3px 3px'; 
	}
	else
	{
		hb.style.display = 'none';
		el.style.background = 'url(/ico/plus.gif) no-repeat 3px 3px'; 
	}
}

