//--------------------------------------------
// Set up our simple tag open values
//--------------------------------------------
//
// Modified by Volker Puttrich to allow IE 4+
// on windows to use cursor position for inserting
// tags / smilies
//
//VGR01012005 MOD code layout (tab vs spaces)
//            MOD bad code
//            ADDed dynamic form name & fields naming to adapt to caller's needs
//

var theformname="posting";
var thecommfield="commentaire";

var B_open = 0;
var I_open = 0;
var U_open = 0;
var QUOTE_open = 0;
var CODE_open = 0;
var SQL_open = 0;
var HTML_open = 0;

var bbtags = new Array();

// Determine browser type and stuff.
// Borrowed from http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html

var myAgent = navigator.userAgent.toLowerCase();
var myVersion = parseInt(navigator.appVersion);

var is_ie = ((myAgent.indexOf("msie") != -1)  && (myAgent.indexOf("opera") == -1));
var is_nav = ((myAgent.indexOf('mozilla')!=-1) && (myAgent.indexOf('spoofer')==-1)
                && (myAgent.indexOf('compatible') == -1) && (myAgent.indexOf('opera')==-1)
                && (myAgent.indexOf('webtv') ==-1)       && (myAgent.indexOf('hotjava')==-1));

var is_win = ((myAgent.indexOf("win")!=-1) || (myAgent.indexOf("16bit")!=-1));
var is_mac = (myAgent.indexOf("mac")!=-1);

// Set the initial radio button status based on cookies

var allcookies = document.cookie;
var pos = allcookies.indexOf("bbmode=");

prep_mode();

function prep_mode() {
  if (pos != 1) {
    var cstart = pos + 7;
    var cend   = allcookies.indexOf(";", cstart);
    if (cend == -1) { cend = allcookies.length; }
    var cvalue = allcookies.substring(cstart, cend);
    if (cvalue == 'ezmode') {
      eval("document."+theformname+".bbmode[0].checked = true;");
    } else {
      eval("document."+theformname+".bbmode[1].checked = true;");
    }
  } 
  else {
    // default to normal mode.
    eval("document."+theformname+".bbmode[1].checked = true;");
  }
}

function setmode(mVal) {
  document.cookie = "bbmode="+mVal+"; path=/; expires=Wed, 1 Jan 2020 00:00:00 GMT;";
}

//VGR01052004 MOD this, was very poorly written
function get_easy_mode_state() {
  // Returns true if we've chosen easy mode
  return(eval("document."+theformname+".bbmode[0].checked"));
}

//--------------------------------------------
// Set the help bar status
//--------------------------------------------

function hstat(msg) {
//	document.posting.helpbox.value = eval( "help_" + msg );
}

// Set the number of tags open box

function cstat() {
  var c = stacksize(bbtags);
  if ( (c < 1) || (c == null) ) {
    c = 0;
  }
  if ( ! bbtags[0] ) {
    c = 0;
  }
  eval("document."+theformname+".tagcount.value = c;");
}

//--------------------------------------------
// Get stack size
//--------------------------------------------

function stacksize(thearray) {
  for (var i = 0 ; i < thearray.length; i++ ) {
    if ( (thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined') ) {
      return i;
    }
  }
  return thearray.length;
}

//--------------------------------------------
// Push stack
//--------------------------------------------

function pushstack(thearray, newval) {
  var arraysize = stacksize(thearray);
  thearray[arraysize] = newval;
}

//--------------------------------------------
// Pop stack
//--------------------------------------------

function popstack(thearray) {
  arraysize = stacksize(thearray);
  var theval = thearray[arraysize - 1];
  delete thearray[arraysize - 1];
  return theval;
}


//--------------------------------------------
// Close all tags
//--------------------------------------------

function closeall() {
  eval("var theform=document."+theformname);
  eval("var themessage=document."+theformname+"."+thecommfield);
  if (bbtags[0]) {
    while (bbtags[0]) {
      var tagRemove = popstack(bbtags)
      themessage.value += "[/" + tagRemove + "]";
      // Change the button status
      // Ensure we're not looking for FONT, SIZE or COLOR as these
      // buttons don't exist, they are select lists instead.
      if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') ) {
        eval("theform." + tagRemove + ".value = ' " + tagRemove + " '");
        eval(tagRemove + "_open = 0");
      }
    }
  }
  // Ensure we got them all
  theform.tagcount.value = 0;
  bbtags = new Array();
  themessage.focus();
}

//--------------------------------------------
// EMOTICONS
//--------------------------------------------

function emoticon(theSmilie) {
  doInsert(" " + theSmilie + " ", "", false);
}

//--------------------------------------------
// ADD CODE
//--------------------------------------------

function add_code(NewCode) {
  eval("var theform=document."+theformname);
  eval("var themessage=document."+theformname+"."+thecommfield);
  themessage.value += NewCode;
  themessage.focus();
}

//--------------------------------------------
// ALTER FONT
//--------------------------------------------

function alterfont(theval, thetag) {
  eval("var theform=document."+theformname);
  if (theval == 0) return;
  if(doInsert("[" + thetag + "=" + theval + "]", "[/" + thetag + "]", true)) pushstack(bbtags, thetag);
  theform.ffont.selectedIndex  = 0;
  theform.fsize.selectedIndex  = 0;
  theform.fcolor.selectedIndex = 0;
}


//--------------------------------------------
// SIMPLE TAGS (such as B, I U, etc)
//--------------------------------------------

function simpletag(thetag) {
  eval("var theform=document."+theformname);
  var tagOpen = eval(thetag + "_open");
  var lastindex;
  if ( get_easy_mode_state() ) {
    inserttext = prompt(prompt_start + "\n[" + thetag + "]xxx[/" + thetag + "]");
    if ( (inserttext != null) && (inserttext != "") ) {
      doInsert("[" + thetag + "]" + inserttext + "[/" + thetag + "] ", "", false);
    }
  } else {
    if (tagOpen == 0) {
      if (doInsert("[" + thetag + "]", "[/" + thetag + "]", true)){
        eval(thetag + "_open = 1");
        // Change the button status
        eval("theform." + thetag + ".value += '*'");
        pushstack(bbtags, thetag);
        cstat();
        hstat('click_close');
      }
    } else {
      // Find the last occurance of the opened tag
      lastindex = 0;
      for (i = 0 ; i < bbtags.length; i++ ) {
        if ( bbtags[i] == thetag ) {
          lastindex = i;
        }
      }
      // Close all tags opened up to that tag was opened
      while (bbtags[lastindex]) {
        tagRemove = popstack(bbtags);
        doInsert("[/" + tagRemove + "]", "", false)
        // Change the button status
        eval("theform." + tagRemove + ".value = ' " + tagRemove + " '");
        eval(tagRemove + "_open = 0");
      }
      cstat();
    }
  }
}


function tag_list() {
  var listvalue = "init";
  var thelist = "[LIST]\n";
  while ( (listvalue != "") && (listvalue != null) ) {
    listvalue = prompt(list_prompt, "");
    if ( (listvalue != "") && (listvalue != null) ) {
      thelist = thelist+"[*]"+listvalue+"\n";
    }
  }
  doInsert(thelist + "[/LIST]\n", "", false);
}

function tag_url() {
  var FoundErrors = '';
  var enterURL   = prompt(text_enter_url, "http://");
  var enterTITLE = prompt(text_enter_url_name, "My Webpage");
  if (!enterURL) {
    FoundErrors += " " + error_no_url;
  }
  if (!enterTITLE) {
    FoundErrors += " " + error_no_title;
  }
  if (FoundErrors) {
    alert("Error!"+FoundErrors);
    return;
  }
  doInsert("[URL="+enterURL+"]"+enterTITLE+"[/URL]", "", false);
}

function tag_image() {
  var FoundErrors = '';
  var enterURL   = prompt(text_enter_image, "http://");
  if (!enterURL) {
    FoundErrors += " " + error_no_url;
  }
  if (FoundErrors) {
    alert("Error!"+FoundErrors);
    return;
  }
  doInsert("[IMG]"+enterURL+"[/IMG]", "", false);
}

function tag_email() {
  var emailAddress = prompt(text_enter_email, "");
  if (!emailAddress) { 
    alert(error_no_email); 
    return; 
  }
  doInsert("[MAIL]"+emailAddress+"[/MAIL]", "", false);
}

//--------------------------------------------
// GENERAL INSERT FUNCTION
//--------------------------------------------
// ibTag: opening tag
// ibClsTag: closing tag, used if we have selected text
// isSingle: true if we do not close the tag right now
// return value: true if the tag needs to be closed later

//
function  insert(instext) {
  eval("var theform=document."+theformname);
  eval("var mess=document."+theformname+"."+thecommfield);
  //IE support
  if (document.selection) {
    mess.focus();
    sel = document.selection.createRange();
    sel.text = instext;
    mess.focus();
  }
  //MOZILLA/NETSCAPE support
  else if (mess.selectionStart || mess.selectionStart == "0") {
    var startPos = mess.selectionStart;
    var endPos = mess.selectionEnd;
    var chaine = mess.value;
    mess.value = chaine.substring(0, startPos) + instext + chaine.substring(endPos, chaine.length);
    mess.selectionStart = startPos + instext.length;
    mess.selectionEnd = endPos + instext.length;
    mess.focus();
  } else {
    mess.value += instext;
    mess.focus();
  }
}
	
function doInsert(ibTag, ibClsTag, isSingle) {
  eval("var theform=document."+theformname);
  eval("var obj_ta=document."+theformname+"."+thecommfield);
  var isClose = false;
  if ( (myVersion >= 4) && is_ie && is_win) { // Ensure it works for IE4up / Win only
    if (obj_ta.isTextEdit) { // this doesn't work for NS, but it works for IE 4+ and compatible browsers
      obj_ta.focus();
      var sel = document.selection;
      var rng = sel.createRange();
      rng.colapse;
      if ((sel.type == "Text" || sel.type == "None") && rng != null) {
        if (ibClsTag != "" && rng.text.length > 0) ibTag += rng.text + ibClsTag;
        else if(isSingle) isClose = true;
        rng.text = ibTag;
      }
    } else {
      if (isSingle) isClose = true;
      insert(ibTag);
    }
  } else {
    if (isSingle) isClose = true;
    insert(ibTag);
  }
  obj_ta.focus();
  // clear multiple blanks
//	obj_ta.value = obj_ta.value.replace(/  /, " ");
  return isClose;
}	
