/////////////////////////////////////////////////
// UNIVERSAL BULLETIN BOARD CODE INTERFACE v2.1
// By Mark Plachetta (astroboy@zip.com.au)
/////////////////////////////////////////////////

/////////////////////////////
// Basic browser detection
//
 var ie = ((document.all)&&(!document.getSelection)) ? 1 : 0;
 var nn = (document.layers) ? 1 : 0;
 var n6 = (window.sidebar) ? 1 : 0;
 var opera = ((document.all)&&(document.getSelection))? 1:0;
 


/////////////////////////////
// Stylesheet output
//
 function writeStyle() {
 	
    var html = '<style type="text/css"><!--\n';
       html += '.ibcButton { font-size:11px; font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#cccccc;  }\n';
       html += '.ubbcButton { font-size:11px; font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#ececec;}\n';
       html += '.codeSelect{ vertical-align: middle; font-size:12px; font-weight: bold; font-style:italic; font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#ffffff; width: 90px ;height:22px;}\n';
       html += '.ibcSelect{ font-size:11px; font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#ffffff;  }\n';
       html += '.ibcButton { font-size:11px; font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#ececec; }\n';
       html += '.button, button { vertical-align: middle; font-size:12px; font-weight: bold; font-style:italic; font-family:Verdana, Arial, Helvetica, sans-serif; background-color:#cccccc; width: 68px ;height:22px;}\n';
      html += '@media all{html>body button{height:auto;position:relative;display:inline;}}';
       html += '.button{padding:.4em .8em;height:2em;}';
       html += '.button:hover{text-decoration:none;}';
       html += 'button.hasdefaultstate{'+(window.opera?('top:10;'):'')+' vertical-align: middle;padding-right:22px;height:22px;background-color:#D6D6CE;}';
       html += '.buttonmenu{top:0;left:0;z-index:2;position:absolute;visibility:hidden;border-style:solid;border-width:1px;font:verdana;}';
       html += 'html>body .buttonmenu{width:1%;}';
       html += '@media all{html>body .buttonmenu{width:auto;}}';
       html += '.buttonmenu strong{display:none;}';
       html += '.buttonmenu ul{margin:0;list-style:none;padding:.5em;}';
       html += '.buttonmenu li{padding:.25em;border-width:1px;border-style:solid;cursor:pointer;cursor:hand;}';
       html += '.buttonmenu li a:hover{text-decoration:none;}';
       html += 'html>body .buttonmenu ul{float:left;}';
       html += '@media all{html>body .buttonmenu ul{float:none;width:auto;}}';
       html += '.buttonmenu li a, .buttonmenu li a:hover{color:#333;}';
       html += '.buttonmenu{border-color:#C1C1C1;background-color:#F6F6F6;}';
       html += '.buttonmenu li, #movemenu li{border-color:#F6F6F6;}';
       html += '.buttonmenu li.hover, #movemenu li.hover, .buttonmenu li:hover, #movemenu li:hover{background-color:#E6E6E6;border-color:#C1C1C1;}';
       html += ' --></style>';

    document.write(html);
  }


/////////////////////////////
// Interface output
//
  function makeInterface(images,flash,graphical,lang) {
    var html = '<table border="0" cellpadding="2" cellspacing="0" bgcolor=\"#5975B2\" width=\"100%\"><tr><td align=center>' + ((nn) ? '&nbsp;' : '');
           html += '</td></tr><tr><td align=left>' + ((nn) ? '&nbsp;' : '');
    if (graphical) {
      
     	html +=makeTranslitEnabler()+makeImage('pixel.gif',3,1,'');
    	
       html += makeLink("ubbBasic('b');",'Жирный[B]') + makeImage('bold.gif','23','22','Жирный[B]') + '</a>';
       html += makeLink("ubbBasic('i');",'Наклонный[I]') + makeImage('italics.gif','23','22','Наклонный[I]') + '</a>';
       html += makeLink("ubbBasic('u');",'Подчёркнутый[U]') + makeImage('underline.gif','23','22','Подчёркнутый[U]') + '</a>';
       html += makeLink("ubbBasic('s');",'Зачёркнутый[S]') + makeImage('strikethrough.gif','23','22','Зачёркнутый[S]') + '</a>';
    } else {
       html += makeButton("ubbBasic('b');",' B ','Жирный[B]','b') + makeImage('pixel.gif',1,1,'');
       html += makeButton("ubbBasic('i');",' I ','Наклонный[I]','i') + makeImage('pixel.gif',1,1,'');
       html += makeButton("ubbBasic('u');",' U ','Подчёркнутый[U]','u') + makeImage('pixel.gif',1,1,'');
       html += makeButton("ubbBasic('s');",' S ','Зачёркнутый[S]','s');	   
    }

    if (graphical) {
       } else 
       {
       html += makeLink("ubbweb('');",'Веб[W]') + makeImage('web.gif','23','22','Веб[W]') + '</a>';
    }
    if (graphical) {
       html += makeLink("ubbList('');",'Список [L]') + makeImage('list.gif','23','22','Список [L]') + '</a>';
       html += makeLink("ubbListItem();",'Пункт списка [K]') + makeImage('listitem.gif','23','22','Пункт списка [K]') + '</a>';
       html += makeLink("ubbHref();",'Ссылка [H]') + makeImage('url.gif','23','22','Ссылка [H]') + '</a>';
       html += makeLink("ubbEmail();",'[E]mail') + makeImage('email.gif','23','22','[E]mail') + '</a>';
       html += ((images) ? makeLink("ubbImage();",'Картинка[P]') + makeImage('image.gif','23','22','Картинка[P]') + '</a>' : '');
       html += makeLink("emo_pop();",'Смайлы') + makeImage('smile.gif','23','22','Смайлы') + '</a>';
	   html += makeLink("ubbBasic('red');",'Красный') + makeImage('red.gif','23','22','Красный') + '</a>';
	   html += makeLink("ubbBasic('blue');",'Синий') + makeImage('blue.gif','23','22','Синий') + '</a>';
	   html += makeLink("ubbBasic('green');",'Зеленый') + makeImage('green.gif','23','22','Зеленый') + '</a>';

    } else {
       html += makeButton("ubbList('');",'UL','Список [L]','l') + makeImage('pixel.gif',1,1,'');
       html += makeButton("ubbListItem();",'LI','Пункт списка [K]','k');
       html += makeButton("ubbHref();",'URL','Ссылка [H]','h') + makeImage('pixel.gif',1,1,'');
       html += makeButton("ubbEmail();",' @ ','[E]mail','e') + makeImage('pixel.gif',1,1,'');
       html += ((images) ? makeButton("ubbImage();",'IMG','Картинка[P]','p') + makeImage('pixel.gif',1,1,'') : '');       
    }
          html += '</td></tr></table>';
    document.write(html);
  }
/*
//Это реакция на событие листа
function ubbSource(list) {
    var attrib = list.name.substring(1,list.name.length);
    var value = list.options[list.selectedIndex].value;
    if (value && attrib) {
    //Вот code можно форматировать как тебе угодно :)
    //	например var code = '[' + value + ']' + getText() + '[/' + value + ']';
    //если хочеж, чтобы теги были [java]dfgsdfgsdfg[/java]
      var code = '[' + attrib + '=' + value + ']' + getText() + '[/' + attrib + ']';
      ubbCode(code);
    }
    resetList(list.name);
}
*/
/////////////////////////////
// Code inserter
//
function ubbCode(code) {
/*Для эксплорера оставим как было*/
if(ie){
 if (form["Post"].createTextRange && form["Post"].caretPos)
 {
   var caretPos = form["Post"].caretPos;
   caretPos.text = code;
 } else { form["Post"].value += code; }
 }
else  /*пошёл нетскейп/мозилла*/
if(n6) {        
     var post=form["Post"];

/*Тут делим техт из поста на две части 1) до выборки 2) после выборки*/
     var firstPart=post.value.substring(0,post.selectionStart);
     var lastPart=post.value.substr(post.selectionEnd);

/*ну и запишем правильный текст обратно в пост*/
     post.value=firstPart+code+lastPart;
     
/*Возвращаем курсор на место */
     var post=form["Post"];
     post.selectionStart=selStart+code.length;
     post.selectionEnd=post.selectionStart;
     post.scrollTop=scrTop;
     }
     else{form["Post"].value += code;}
  
 form["Post"].focus();
}

/////////////////////////////
// HTML shortcuts
//
//Graph elements for translit
function checkTheBox() {
kodirovka=document.getElementById("EnableTranslit").checked;
deleteCookie("translit");
setCookie ("translit", kodirovka);
var post=form["Post"];
post.selectionStart=selStart;
post.selectionEnd=selEnd;
post.focus();

}

function my_transilt()
{
	var str=showModalDialog("guest/translator.htm","","dialogHeight:310px; dialogWidth:390px; help:no; status:no; scroll:no; border:0; unadorned");
}

function makeTranslitEnabler() {
  var checked=(getCookie ("translit")=="true")?true:false;

  kodirovka=checked;
  var html= "<a onmousedown='my_transilt();' style='cursor:hand' style='color:#ffffff'>транслит</a>";
  
  
  return html;
}


 
  function makeButton(onclick,value,title,accesskey) {
    var html = '<input type="button" onclick="' + onclick;
       html += 'return false;" title="' + title;
       html += '" accesskey="' + accesskey + '" class="ubbcButton';
       html += '" value="' + value + '">';
    return html;
  }

  function makeLink(onclick,text) {
    var html = '<a href="#" onclick="' + onclick;
       html += 'return false;" onmouseover="return winStat(\'' + text;
       html += '\');" onmouseout="return winStat(\'\');">';
    return html;
  }

  function makeImage(source,width,height,alt) {
    var html = '<img src="' + "guest/" + source + '" width="' + width;
       html += '" height="' + height + '" border="0" alt="' + alt;
       html += '" align="absmiddle">';
    return html;
  }




/////////////////////////////
// Misc utils
//
//С помощью этих переменных нетскейп запоминает позицию в тексте
var selStart=0;
var selEnd=0;
var scrTop=0;

function storeCaret(el) 
{
  if(ie)
  {
     if (el.createTextRange) 
     {
       el.caretPos = document.selection.createRange().duplicate();
     }
    }else
    if(n6)
    {//Тут добавлено сохранение позиции
      var post=form["Post"];
      selStart=post.selectionStart;
      selEnd=post.selectionEnd;
      scrTop=post.scrollTop;
    }
}


function getText() {
 /*Для эксплорера оставим как было.*/
        if (ie) {
          return ((form["Post"].createTextRange && form["Post"].caretPos) ? form["Post"].caretPos.text : '');
        } 
  /*пошёл нетскейп/мозилла*/
        if(n6) {
        var post=form["Post"];  
         return post.value.substr(post.selectionStart,post.selectionEnd-post.selectionStart);
        }
 /*Тут незнакомый броузер так было раньше для всех, кроме эксплорера*/
        return '';
}

  function isUrl(text) {
    return ((text.indexOf('.') > 7) &&
            ((text.substring(0,7) == 'http://') ||
            (text.substring(0,6) == 'ftp://')));
  }

  function isEmail(str) {
    if (!reSupport) { return (str.indexOf(".") > 2) && (str.indexOf("@") > 0); }
    var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
    var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
    return (!r1.test(str) && r2.test(str));
  }

  function winStat(txt) {
    window.status = txt;
    return true;
  }

  function returnFocus() {
    setTimeout('form["Post"].focus()',10);
  }

  function resetList(list) {
    setTimeout('form["'+list+'"].options[0].selected = true',10);
  }


function ubbSmile() {
    var url = 'http://localhost/Malikov/';
    var options = 'scrollbars=yes';
    window.open(url);
  }

  function removeElement(array,value) {
    array = array.split(',');
    for (i = 0; i < array.length; i++) {
      if (array[i] == value) { var pos = i; break; }
    }
    for (i = pos; i < (array.length-1); i++) {
      array[i] = array[i + 1];
    }
    array.length = array.length - 1;
    return array.join(',');
  }

/*
functions for cookies
*/

function setCookie (name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? ";expires=" + expires : "") +
      ((path) ? ";path=" + path : "") +
      ((domain) ? ";domain=" + domain : "") +
      ((secure) ? ";secure" : "");
  if ((escape(value)).length <= 4000) document.cookie = curCookie+";";
}

function getCookie (name) {
  var prefix = name + "=";
  var cookieStartIndex = document.cookie.indexOf(prefix);
  if (cookieStartIndex == -1) return null;
  var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
  if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
  return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

function deleteCookie (name, path, domain) {
  if (getCookie(name)) {
      document.cookie = name + "=" +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") + "; expires=Thu, 01-Jan-99 00:00:01 GMT"
  }
}


/////////////////////////////
// Indivdual code types
//
  var openTags = new Array('');
  var closedTags = new Array('dummy','b','i','u','s','code','quote','me','list');
  function ubbBasic(code) {
    var text = getText();
    if (text) {
      code = '[' + code + ']' + text + '[/' + code + ']';
      ubbCode(code);
    } else {
      if (openTags.join(',').indexOf(','+code) != -1) {
        var tag = '[/' + code + ']';
        openTags = removeElement(openTags.join(','),code).split(',');
        closedTags[closedTags.length] = code;
      } else {
        var tag = '[' + code + ']';
        closedTags = removeElement(closedTags.join(','),code).split(',');
        openTags[openTags.length] = code;
      } ubbCode(tag);
    }
  }

  function ubbList(size) {
    var text = getText();
    if (!size && !text) { ubbBasic('list'); }
    else if (!size && text && reSupport) {
      var regExp = /\n/g;
      text = text.replace(regExp,'\n[*]');
      var code = '[list]\n[*]' + text + '\n[/list]\n';
      ubbCode(code);
    } else {
      if (text) { text += '\n'; }
      var code = text + '[list]\n';
      for (i = 0; i < size; i++) { code += '[*]\n'; }
      code += '[/list]\n';
      ubbCode(code);
      resetList("quicklist");
    }
  }

  function ubbListItem() {
    var code = '[*]' + getText();
    ubbCode(code);
  }

  function ubbHref() {
    var url = 'http://'; var desc = '';
    var text = getText();
    if (text) {
      if (isUrl(text)) { url = text; }
      else { desc = text; }
    }
    url = prompt('Введите ссылку:',url) || '';
    desc = prompt('Описание ссылки:',desc) || url;
    if (!isUrl(url)) { returnFocus(); return; }
    var code = '[url=' + url + ']' + desc + '[/url]';
    ubbCode(code);
  }

  function ubbEmail() {
    var email = ''; var desc = '';
    var text = getText();
    if (text) {
      if (isEmail(text)) { email = text; }
      else { desc = text; }
    }
    email = prompt('Введите E-mail адрес:',email) || '';
    desc = prompt('Введите описание:',desc) || email;
    if (!isEmail(email)) { returnFocus(); return; }
    var code = '[email=' + email + ']' + desc + '[/email]';
    ubbCode(code);
  }

  function ubbImage() {
    var text = getText();
    var url = (text && isUrl) ? text : prompt("\nВведите URL картинки:","http://") || "";
    if (!url) { return; }
    var code = "[IMG]" + url + "[/IMG]";
    ubbCode(code);
  }



/////////////////////////////
// Access Keys
//
  var keys = new Array('b','i','u','s','g','q','m','h','e','l','k');
  function checkKey(e) {
  	if(!ie)event=e;
  	
  	//alert(form.submit+"\n"+form.submitPost);
    if (event.ctrlKey) {
      for (i = 0; i < keys.length; i++) {
        if (String.fromCharCode(event.keyCode) == keys[i].toUpperCase()) {
          var found = keys[i]; break;
        }
      }
      if(event.keyCode==13){form.submitPost();}
      if (found) {
        switch(found) {
          case 'h':ubbHref();break;
          case 'e':ubbEmail();break;
          case 'p':ubbImage();break;
          case 'l':ubbList();break;
          case 'k':ubbListItem();break;
          case 'g':ubbBasic('code');break;
          case 'q':ubbBasic('quote');break;
          case 'm':ubbBasic('me');break;
       //  case '\n':{document.forms['REPLIER'].submit();}break;
          default:{ubbBasic(found);}
        }
        this.cancelBubble = true;
        this.returnValue = false;
        return false;
      }
    }
  }


/////////////////////////////
// Replacing default iB JS
//
  function emoticon(theSmilie) {
    var text = getText() + ' ';
    var code = text + theSmilie + ' ';
    ubbCode(code);
  }


/////////////////////////////
// Initilization
//
  var form;
  writeStyle();
  var reSupport = 0;
  function ubbcInit(images,flash,graphical,lang) {
    form = document.forms["REPLIER"];
	form['submitPost']=form.submit;
    if (images) { keys[keys.length] = 'p'; }
//    if (flash) { keys[keys.length] = 'f'; }
    if (graphical) { document.onkeydown = checkKey; }

    if (window.RegExp) {
      var tempStr = "a";
      var tempReg = new RegExp(tempStr);
      if (tempReg.test(tempStr)) { reSupport = 1; }
    }
  }
