// ==============================================================================================
// classe 'JSiter_dyna_editor' e metodi per la gestione del dynacode
// ..............................................................................................

// --- Classe Jsiter_dyna_editor ---
function JSiter_dyna_editor(id, bcid, level) {
   // --- proprietà ---
   this.id = id;
   this.docId = 'jsiter_bc_'+id;
   this.bcid = bcid;
   this.level = level;

   // --- metodi ---
   // *** edit
   this.edit = function(style){
      if(this.bcid=='') return;

      code = JSiter.getBC(this.bcid, '&h_level='+this.level);
      
      $('textarea#jstr_dynacode').attr("value", code);

      $('input#dyna_apply_command').unbind();
      $('input#dyna_apply_and_close_command').unbind();
      eval("$('input#dyna_apply_command').click(function(){ "+this.docId+".save();});");
      eval("$('input#dyna_apply_and_close_command').click(function(){ "+this.docId+".save(); $('#jstr_dyna_window').fadeOut(); });");

      $('#jstr_dyna_window').fadeIn();

      // Attivazione dello stato 'IN EDIT'
   }

   // *** save 
   this.save = function(){
      pars = 'h_level='+this.level+'&h_bodycode='+Utf8.encode(encodeURIComponent($('textarea#jstr_dynacode').attr('value')));
      text = JSiter.setBC(this.bcid, pars);
      $('#'+this.docId).html(unescape(text));
   }
}

/* *** ORIGINAL CLASS *** */
/* *** ************** *** */
/*
// --- Classe Jsiter_dyna_editor ---
function JSiter_dyna_editor(id, bcid, level) {
   // --- proprietà ---
   this.status = false;
   this.id = id;
   this.docId = 'jsiter_bc_'+id;
   this.bcid = bcid;
   this.level = level;
   this.code = '';
   this.httpRequest = null;
   this.obj = document.getElementById(this.docId); 

   // --- metodi ---
   // *** edit
   this.edit = function(style){
      if(this.bcid=='') return;
      if(this.status==true) return;
      jsiter_editor=this;
      var text = '';

      text += JSiter.coder('edit-tool-bar', 'textarea_id='+this.docId+'_txtarea&preview_page=/bc_prev');
      code = JSiter.getBC(this.bcid, '&h_level='+this.level);
      code = code.replace(/&/ig, "&amp;").replace(/</ig, "&lt;").replace(/>/ig, "&gt;");
      var events = 'onchange="storeCaret(this);" onkeyup="storeCaret(this);" onclick="storeCaret(this);" onselect="storeCaret(this);"';
      
      text += '<div class="dynacode">';
      text += '<textarea id="'+this.docId+'_txtarea" id="'+this.docId+'_txtarea" wrap="off" '+events+'>';
      text += code;
      text += '</textarea>';
      text += '<div class="edit_area">';
      text += '<input type="button" onClick="eval('+this.docId+'.save());" value="save" class="button"/>';
      text += '</div>';
      text += '</div>';
      $('#jsiter_msg_text').html(text);

      $('#jsiter_msg_outer').jqmShow();
      //$('#jsiter_msg_outer').die("resize");
      $('#jsiter_msg_outer').resize(function() {
         //alert($('#jsiter_msg_outer').height()-93);
         $('div.dynacode textarea').height($('#jsiter_msg_outer').height()-93);
      });

      // Attivazione dello stato 'IN EDIT'
      this.status = true;
   }

   // *** save 
   this.save = function(){
      if(this.status==false) return;
      pars = 'h_level='+this.level+'&h_bodycode='+Utf8.encode(encodeURIComponent($('#'+this.docId+'_txtarea').attr('value')));
      text = JSiter.setBC(this.bcid, pars);
      $('#'+this.docId).html(unescape(text));
   }
}*/

// =============================================
// classe "Utf8" per la codifica/decodifica UTF8
// .............................................
var Utf8 = {
    // public method for url encoding
    encode : function (string) {
        string = string.replace(/\r\n/g,'\n');
        var utftext = "";

        for (var n = 0; n < string.length; n++) {
            var c = string.charCodeAt(n);
            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
        }
        return utftext;
    },

    // public method for url decoding
    decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;
        while ( i < utftext.length ) {
            c = utftext.charCodeAt(i);
            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
        }
        return string;
    }
}

// ==========================================
// editing della textarea con la tool-bar
// ..........................................
function bold(textarea) {
    var text = getText(textarea);
    AddTxt="<b>" + text + "</b>";
    AddText(AddTxt, textarea);
}

function italic(textarea) {
    var text = getText(textarea);
    AddTxt="<i>" + text + "</i>";
    AddText(AddTxt, textarea);
}

function underline(textarea) {
    var text = getText(textarea);
    AddTxt="<u>" + text + "</u>";
    AddText(AddTxt, textarea);
}

function center(textarea) {
    var text = getText(textarea);
    AddTxt='<div style="text-align:center;">' + text + '</div>';
    AddText(AddTxt, textarea);
}

function left(textarea) {
    var text = getText(textarea);
    AddTxt='<div style="text-align:left;">' + text + "[/div]";
    AddText(AddTxt, textarea);
}

function right(textarea) {
    var text = getText(textarea);
    AddTxt='<div style="text-align:right;">' + text + "</div>";
    AddText(AddTxt, textarea);
}

function hr(textarea) {
    var text = getText(textarea);
    AddTxt=text +"<hr />";
    AddText(AddTxt, textarea);
}

function image(textarea) {
    var text = getText(textarea);
    AddTxt='<h_img src="' + text + '" />';
    AddText(AddTxt, textarea);
}

function insertimg(textarea,mid) {
    var text = getText(textarea);
    popupWin = window.open('?h_fwcode=upload-image-form&targetarea='+textarea+'&mid='+mid,'new_page','width=310,resizable=no,height=200,scrollbars=no')
}

function file(textarea) {
    var text = getText(textarea);
    AddTxt='<h_download src="' + text + '" label="download" />';
    AddText(AddTxt, textarea);
}


function getText(textarea) {
    var tarea = document.getElementById(textarea);
    if (tarea.createTextRange && tarea.caretPos) {
        return tarea.caretPos.text;
    } else if (typeof tarea.selectionStart != 'undefined'){
        return tarea.value.substr(tarea.selectionStart,tarea.selectionEnd-tarea.selectionStart)
    }
    return '';
}

function AddText(text, textarea) {
    var crtScrollTop;
    var crtScrollLeft;
    try {
        var tarea = document.getElementById(textarea);
        if (typeof tarea.scrollTop != 'undefined') {
            crtScrollTop = tarea.scrollTop;
            crtScrollLeft = tarea.scrollLeft;
        }
    } catch (e) {};
    var tarea = document.getElementById(textarea);
    if (typeof tarea.selectionStart != 'undefined'){ // if it supports DOM2
        start = tarea.selectionStart;
        end = tarea.selectionEnd;
        tarea.value = tarea.value.substr(0,tarea.selectionStart)
        + text+ tarea.value.substr(tarea.selectionEnd);
        tarea.focus();
        tarea.selectionStart = ((start - end) == 0) ? start + text.length : start;
        tarea.selectionEnd = start + text.length;
    } else {
        if (tarea.createTextRange && tarea.caretPos) {
            var caretPos = tarea.caretPos;
            caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
        }
        else {
            tarea.value += text;
        }
        tarea.focus(caretPos);
    };
    try {
        var tarea = document.PostTopic.Message;
        if (typeof tarea.scrollTop != 'undefined') {
            tarea.scrollTop = crtScrollTop;
            tarea.scrollLeft = crtScrollLeft;
        }
    } catch (e) {}; 
}

function storeCaret(ftext) {
    if (ftext.createTextRange) {
        ftext.caretPos = document.selection.createRange().duplicate();
    }
}