	var its;
	var browserName = '';
	var browserNameLong = '';
	var browserNew = '';
	var preloadFlag = false;
	var Macintosh = navigator.userAgent.indexOf('Mac')>0;
	function its() {
		var n = navigator;
		var ua = ' ' + n.userAgent.toLowerCase();
		var pl = n.platform.toLowerCase();
		var an = n.appName.toLowerCase();

		// browser version
		this.version = n.appVersion;
		this.nn = ua.indexOf('mozilla') > 0;

		// 'compatible' versions of mozilla aren't navigator
		if(ua.indexOf('compatible') > 0) {
			this.nn = false;
		}

		this.opera = ua.indexOf('opera') > 0;
		this.ie = ua.indexOf('msie') > 0;
		this.major = parseInt( this.version );
		this.minor = parseFloat( this.version );

		// platform
		this.mac = ua.indexOf('mac') > 0;
		this.win = ua.indexOf('win') > 0;

		// workaround for IE5 which reports itself as version 4.0
		if(this.ie) {
			if(ua.indexOf("msie 5") > 1) {
			var msieIndex = navigator.appVersion.indexOf("MSIE") + 5;
			this.major = parseFloat(navigator.appVersion.substr(msieIndex,3));
			}
		}

		return this;
	}

function browserNaming() {
	its = new its();
	// is it a DOM-enabled browser?
	if (!document.getElementById) {
		browserNew = false;
	} else {
		browserNew = true;
	}

		// need the name, too
		if (its.opera) {
			browserName = "Opera";
		}
		else if (its.ie) {
			browserName = "IE";
		}
		else {
			browserName = "NS";
		}

		// and the number
		browserNameLong = browserName + its.major;
	}
browserNaming();

  function BBCode(){

      this.closeTags = 1;          //Сразу закрывать тэг или при повторном клике
      this.quotingParams = 1;     //Заключать в кавычки значения аттрибутов
      this.isUnclosed = 0;        //Теги не имеют закрывающих тэгов.
      this.quotes = (this.quotingParams)?'\'':'';
      this.lDelimeter = "[";
      this.rDelimeter = "]";
      this.closingCharacter = "/";
      this.textarea = null;
      this.unclosedTags = {};
      this.params = {};
      this.ie_range_cache = null;

      this.openTag = function(_params){
        //Проверяем, задано ли имя...
        if(_params.tagName)
        {
            var needToClose = 0;
            for(var tn in this.unclosedTags){
              if(tn == _params.tagName && this.unclosedTags[tn])
              {
                  this.unclosedTags[tn] = 0;
                  needToClose = tn;
              }
            }
            this.params = {};
            var textarea = document.getElementById(this.textarea);
            var returnBB = {};
            var params = '';
            var closeTag = _params.closeTag || this.closeTags;
            var isUnclosed = _params.isUnclosed || this.isUnclosed;
            var defaultValue = (_params.defaultValue)?_params.defaultValue:"";
            if(_params.staticParams)this.staticParams(_params.staticParams);
            if(_params.askParams)this.askParams(_params.askParams);
            for(var p in this.params){
              params += ' '+p+'='+this.quotes+this.params[p]+this.quotes;
            }

            returnBB.open = this.lDelimeter + _params.tagName + params + this.rDelimeter
            returnBB.close = isUnclosed ? "" : this.lDelimeter + this.closingCharacter + _params.tagName + this.rDelimeter;
            returnBB.defaultValue = defaultValue;
            //Определяем браузер...
            if(its.nn || its.opera)
            {
                //Это Mozilla FireFox
        		var ss = textarea.selectionStart;
        		var st = textarea.scrollTop;
        		var es = textarea.selectionEnd;
        		if(es <= 0)
        		{
        			es = textarea.textLength;
        		}
        		var start  = (textarea.value).substring(0, ss);
        		var middle = (textarea.value).substring(ss, es);
        		var end    = (textarea.value).substring(es, textarea.textLength);
            }else if(its.ie){
                textarea.focus();
                if(textarea.isTextEdit)
                {
                    var sel = document.selection;
                    var rng = this.ie_range_cache ? this.ie_range_cache : sel.createRange();
        			var stored_range = rng.duplicate()
        			stored_range.moveToElementText( textarea );
        			stored_range.setEndPoint( 'EndToEnd', rng );
        			// Stores start position of text selection
        			textarea.selectionStart = stored_range.text.length - rng.text.length;
        			// Stores end position of text selection
        			textarea.selectionEnd = textarea.selectionStart + rng.text.length;
                    rng.colapse;
                    var start  = (textarea.value).substring(0, textarea.selectionStart);
            		var middle = (textarea.value).substring(textarea.selectionStart, textarea.selectionEnd);
            		var end    = (textarea.value).substring(textarea.selectionEnd, textarea.textLength);
                }
            }else{
                this.returnBB(returnBB.open + returnBB.defaultValue + returnBB.close);
                return true;
            }
            if(!needToClose)
            {
        		if (textarea.selectionEnd - textarea.selectionStart > 0)
        		{
                    middle = (returnBB.defaultValue=='')?middle:returnBB.defaultValue;
        			middle =  returnBB.open + middle + returnBB.close;
                }
        		else
        		{
                    if(!closeTag)
                    {
                        this.unclosedTags[_params.tagName] = (isUnclosed)?0:1;
                        returnBB.close = "";
                    }
                    returnBB.open += returnBB.defaultValue;
                    middle = returnBB.open + returnBB.close;
        		}
            }else{
                end = returnBB.close+end;
            }
    		returnBB = start + middle + end;
            this.returnBB(returnBB);

            if(its.nn || its.opera)
            {
        		var cpos = ss + (middle.length);
        		textarea.selectionStart = cpos;
        		textarea.selectionEnd   = cpos;
        		textarea.scrollTop      = st;
            }else{
                textarea.focus();
                rng.setEndPoint( 'StartToStart', rng );
                rng.moveStart("character", start.length+middle.length);
                rng.moveEnd("character", -(end.length));
                rng.select();
            }
            textarea.focus();
        }else{
            return false;
        }
      }

      this.closeTag = function(tagName){
          var returnBB = this.lDelimeter + this.closingCharacter + tagName + this.rDelimeter;
          this.returnBB(returnBB);
      }

      this.askParams = function(askParams){
          if(askParams){
            for(var param in askParams){
                var question = "";
                question = window.prompt(askParams[param]);
                if(question == null)
                {
                    continue;
                }else{
                    this.params[param] = question;
                }
            }
            return true;
          }else{
              return false;
          }
      }

      this.staticParams = function(staticParams){
          if(staticParams){
            for(var param in staticParams){
                this.params[param] = staticParams[param];
            }
            return true;
          }else{
              return false;
          }
      }

      this.returnBB = function(returnBB){
        this.ie_range_cache = null;
        if(document.getElementById(this.textarea))
        {
            var textarea = document.getElementById(this.textarea);
            textarea.value = returnBB;
            return false;
        }else{
            return returnBB;
        }
      }
      }


    function on_img(img_name){
      document.getElementById(img_name).src = images[img_name+"On"].src;
    }

    function off_img(img_name){
      document.getElementById(img_name).src = images[img_name+"Off"].src;
    }

    function on_img1(img, img_name){
      img.src = images[img_name+"On"].src;
    }

    function off_img1(img, img_name){
      img.src = images[img_name+"Off"].src;
    }
