﻿function sb_bb($area_Id, $width) {
 //window.onload=function() {
    this.area_Id = $area_Id;
    this.putInTag    = putInTag;
    this.insert_BB_Bar = insert_BB_Bar;
    this.showQBox = showQBox;
    this.hideQBox = hideQBox;
  
    var IE_mem_sel=''; // //Костыль(crutch) для ие
    var modalbox;    
    var shade;
    var main;
    var scrollWidth;
    var scrollHeight;
    var document = window.document;
    
    var area = document.getElementById(this.area_Id);
    if (! area) {  return ;  }
    this.width = $width || parseInt(getStyle(area, 'width'));
    window.sb_bb = this;
  
      var tags = new Array(     new Array('[b]',    '[/b]',        -1188),
      new Array('[i]',    '[/i]',        -748),
            new Array('[u]',    '[/u]',         -66),
            new Array('[s]',    '[/s]',        -242),
            undefined,
            new Array('[sub]',    '[/sub]',    -220),
            new Array('[sup]',    '[/sup]',    -198),
            undefined,
            new Array('[left]',     '[/left]',     -726),
            new Array('[center]',    '[/center]',    -1056),
            new Array('[right]',    '[/right]',    -374),
            new Array('[justify]',    '[/justify]',    -880), 
            undefined,
            new Array('[hr]',    '',        -858),
            new Array('[br]',     '',        -1122),                          
            undefined,
            new Array('[a]',        '[/a]',     -704, 
                {href:'Ссылка (href):',
                target:{caption: 'Открывать ссылку в (target):', _self:'том же окне (_self)', _blank:'новом окне (_blank)'},
                title:'Заголовок (title):' 
                }),
            new Array('[anchor]',        '[/anchor]',     -1232, {name:'Имя якоря (name):'}),
            new Array('[img][/img]',    '',                -814,  {src:'Ссылка (src):', alt:'Альтернативный текст (alt):', width:'Ширина:', height:'Высота:', border:'Бордюр:'}),
            new Array('[email]',        '[/email]',        -1453, {name:'Адрес электронной почты:',title:'Заголовок (title):'})
                          );
    
function putInTag(Tag,Tag2) {
                doc = area;
                doc.focus();
        
                if (window.attachEvent && navigator.userAgent.indexOf('Opera') === -1) {
                    var sel, sel1;
                  if (IE_mem_sel === '') {
                         sel1 = document.selection.createRange();
                         sel = sel1;
                    } else { 
                         sel = IE_mem_sel;
                    }
                    var len = sel.text.length+parseInt(Tag.length)+parseInt(Tag2.length);
                    sel.text = Tag+sel.text+Tag2;
                    sel.moveStart("character", -len); 
                    sel.select();
                    if (IE_mem_sel !== '') IE_mem_sel='';
                    if (Tag2.length === 0 ) {
                        sel.collapse(false);
                        sel.select();
                    }
                } else {
                    var ss = doc.scrollTop;
                    sel1 = doc.value.substr(0, doc.selectionStart);
                    sel2 = doc.value.substr(doc.selectionEnd);
                    sel = doc.value.substr(doc.selectionStart, doc.selectionEnd - doc.selectionStart);
                    doc.value = sel1 + Tag + sel + Tag2 + sel2;
                    selPos = Tag.length + sel1.length + sel.length + Tag2.length;
                    
                    if (Tag2.length === 0)            
                        doc.setSelectionRange((Tag.length+sel1.length), (Tag.length+sel1.length));
                    else
                        doc.setSelectionRange(sel1.length, selPos);
                    
                    doc.scrollTop = ss;
                }
        }
     
function insert_BB_Bar() {
    var bar = document.createElement('div');
        bar.setAttribute('id', 'sb_bb_bar');
        bar.style.cssText='width:'+this.width+'px';
    var parent = area.parentNode;
        parent.insertBefore(bar, area);
        
       for (var i=0; i<tags.length; i++)
               if (typeof tags[i] != 'undefined' )
                bar.innerHTML+='<img class="button" id="sb_bb_but_'+i+'" onmouseover="this.className=\'button Over\'" onmouseout="this.className=\'button\'" src="/cms/images/blank.gif" style="background-position: 0px '+tags[i][2]+'px;" />'; 
            else 
                bar.innerHTML+='<img class="spacer" src="/cms/images/editor/separator.gif" />';

    for (var i=0; i<tags.length; i++)
        if (typeof tags[i] != 'undefined' ) 
            if (typeof tags[i][3] === 'object' ){
                document.getElementById('sb_bb_but_'+i).onclick=function(tag){ 
                            return function(){ 
                                    sb_bb.showQBox(tag[0], tag[1], tag[3]); }
                }(tags[i]);
            } else {
                document.getElementById('sb_bb_but_'+i).onclick=function(tag){  
                            return    function(){    
                                    sb_bb.putInTag(tag[0],    tag[1]);        }
                }(tags[i]);
            }
}            

function insert_Smile_Bar(){
    //path to smile icons
    var path='/cms/images/smiles/';
    
    var bar = document.createElement('div');
        bar.setAttribute('id', 'sb_smile_bar');
        bar.style.cssText='width:'+this.width+'px';
    var parent = area.parentNode;
        parent.insertBefore(bar, area.nextSibling); 
        
    var smiles = new Array(  new Array(' :D ',     '',   '1.gif'),  new Array(' :) ',    '',  '2.gif'),    new Array(' :( ',    '',  '3.gif'),
                 new Array(' :heap: ', '',   '4.gif'),  new Array(' :ooi: ',     '',  '5.gif'),    new Array(' :so: ',    '',  '6.gif'), 
                 new Array(' :surp: ', '',   '7.gif'),  new Array(' :ag: ',      '',  '8.gif'),    new Array(' :ir: ',    '',  '9.gif'),
                 new Array(' :oops:',     '',  '10.gif'),    new Array(' :P ',    '',  '11.gif'),    new Array(' :cry: ',    '',  '12.gif'),
                 new Array(' :rage: ',    '',  '13.gif'), new Array(' :B ',     '',  '14.gif'), new Array(' :roll: ' ,     '',  '15.gif'),
                 new Array(' :wink: ',  '',  '16.gif'), new Array(' :yes: ',     '',  '17.gif'), new Array(' :bot: ',    '',  '18.gif'), 
                 new Array(' :z) ',    '',  '19.gif'), new Array(' :arrow: ',    '',  '20.gif')    );
        for (var i=0; i<smiles.length; i++)
            bar.innerHTML+='<img class="button" onclick="sb_bb.putInTag(\'' + smiles[i][0] + '\', \'\',\''+this.area_Id+'\')" onmouseover="this.className=\'button Over\'" onmouseout="this.className=\'button\'" src="'+path + smiles[i][2] +'" />';
    }
    
function initQBox() {
    main = document.createElement('div');
    main.setAttribute( 'id', 'sb_main');
    document.body.appendChild(main);
    modalbox = document.createElement('div');
    modalbox.setAttribute( 'id', 'sb_modalbox');
    document.body.appendChild(modalbox);
    shade = document.createElement('div');
    shade.setAttribute( 'id', 'sb_shade');
    document.body.appendChild(shade);

    scrollWidth = document.body.scrollWidth;
    scrollHeight = document.body.scrollHeight;

    main.style.width = scrollWidth;
    main.style.height = scrollHeight;
}

function showQBox( p1, p2, p3 ) {             
    IE_mem_sel =( document.selection )? document.selection.createRange() : '';
        if (IE_mem_sel.text==='')    { 
            caretPos=getCaretPos(area);
                  
            var r = area.createTextRange();
            r.collapse(true);
            r.moveEnd("character", caretPos);
            r=document.selection.createRange();
            r.collapse(false);
          r.select();
        IE_mem_sel=document.selection.createRange();
        }
        
        main.style.filter = "alpha(opacity=80)";
        main.style.opacity = 0.8;
        main.style.display = "block";
        var tmp='';
        modalbox.innerHTML='<div id="caption" style="filter: alpha(opacity=100)">Ввод параметров </div>';
        for (var el in p3)
            if (typeof p3[el] === 'object'){
                tmp+='<tr><td class="l_td">'+p3[el]["caption"]+'</td><td class="r_td">'+mkSelect(el, p3[el])+'</td></tr>';
            }else{
                tmp+='<tr><td class="l_td">'+p3[el]+'</td><td class="r_td"><input type=\'text\' name=\''+el+'\'/></td></tr>';
            }
                
        tmp ='<table>'+tmp+'</table>';                    
        tmp+='<div class="mb_buts"><center><input type="button" id="sb_Qbox_butOK" value="Вставить" class="but"  onclick="hideQBox();">';
        tmp+='<input type="button" id="sb_Qbox_butCancel" value="Отменить" class="but"  onclick="hideQBox();"></center></div>';
        modalbox.innerHTML+='<div id="sb_qbox_body"><form id="sb_qbox_form">'+tmp+'</form></div>';
            
        modalbox.style.display = "block";
        shade.style.display = "block";
        posleft = Math.round(scrollWidth / 2) - 150;
        postop = document.body.scrollHeight - 500;
        shade.style.left = posleft + 7;
        shade.style.top = document.body.scrollTop + 307;
        modalbox.style.left = posleft;
        modalbox.style.top = document.body.scrollTop + 300;
        
        document.getElementById('sb_Qbox_butOK').onclick=function(){ 
            sb_bb.putInTag( p1.substr(0, p1.indexOf(']'))+ parQuery(true)+p1.substr(p1.indexOf(']')),    p2);     
        };    
        document.getElementById('sb_Qbox_butCancel').onclick=function(){ 
            sb_bb.putInTag( parQuery(false),    '');     
        };
}

function hideQBox() {
    main.style.display = "none";
    modalbox.style.display = "none";
    modalbox.innerHTML    = "";
    shade.style.display = "none";
}
function parQuery(ret){
var res = '';
if (ret === true){// надо ли возвращать значение, Вставить  -да, Отмена - нет.
        var a = document.getElementById('sb_qbox_form');
        for (var i=0,j=a.elements.length-2; i<j; i++){        
            if (a.elements[i].tagName.toLowerCase() === 'input' || a.elements[i].tagName.toLowerCase() === 'select')
                    res+=(a.elements[i].value === '')? '': ' '+a.elements[i].name+'='+a.elements[i].value;
        }
 }
    hideQBox();
    return res;
}
            insert_BB_Bar(); 
            insert_Smile_Bar();
            initQBox();            
//}
function getStyle(elem, prop)
{
  if (typeof elem!="object") elem = document.getElementById(elem);
  if (document.defaultView && document.defaultView.getComputedStyle)  {
    if (prop.match(/[A-Z]/)) prop = prop.replace(/([A-Z])/g, "-$1").toLowerCase();
    return document.defaultView.getComputedStyle(elem, "").getPropertyValue(prop);
  }
  if (elem.currentStyle)  {
    var i;
    while ((i=prop.indexOf("-"))!=-1) prop = prop.substr(0, i) + prop.substr(i+1,1).toUpperCase() + prop.substr(i+2);
    return elem.currentStyle[prop];
  } 
  return "";
}
function mkSelect(Obj_name, Obj){
var result='',tmp='';
      result+='<select name="'+Obj_name+'">';
        result+='<option value=\'\'>не задано</option>';
    for (k in Obj){
                    if (k != 'caption')
                        tmp+='<option value='+k+'>'+Obj[k]+'</option>';    
    }    
    result+=tmp+'</select>';
    return result;
}


function getCaretPos(obj)
{
  obj.focus();
   if(obj.selectionStart) return obj.selectionStart;//Gecko
  else if (document.selection)//IE
  {
    var sel = document.selection.createRange();
    var clone = sel.duplicate();
    sel.collapse(true);
    clone.moveToElementText(obj);
    clone.setEndPoint('EndToEnd', sel);
    return clone.text.length;
  }
   return 0;
}

}
