//--------------------------------------------
// 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

// IBC Code stuff
  var text_enter_url      = "Enter the complete URL for the hyperlink";
  var text_enter_url_name = "Enter the title of the webpage";
  var text_enter_image    = "Enter the complete URL for the image";
  var text_enter_email    = "Enter the email address";
  var text_enter_flash    = "Enter the URL to the Flash movie.";
  var text_code           = "Usage: [CODE] Your Code Here.. [/CODE]";
  var text_quote          = "Usage: [QUOTE] Your Quote Here.. [/QUOTE]";
  var error_no_url        = "You must enter a URL";
  var error_no_title      = "You must enter a title";
  var error_no_email      = "You must enter an email address";
  var error_no_width      = "You must enter a width";
  var error_no_height     = "You must enter a height";
  var prompt_start        = "Enter the text to be formatted";
  var help_bold           = "Insert Bold Text (alt + b)";
  var help_italic         = "Insert Italic Text (alt + i)";
  var help_under          = "Insert Underlined Text (alt + u)";
  var help_font           = "Insert Font Face tags";
  var help_size           = "Insert Font Size tags";
  var help_color          = "Insert Font Color tags";
  var help_close          = "Close all open tags";
  var help_url            = "Insert Hyperlink (alt+ h)";
  var help_img            = "Image (alt + g) [img]http://www.dom.com/img.gif[/img]";
  var help_email          = "Insert Email Address (alt + e)";
  var help_quote          = "Insert Quoted Text (alt + q)";
  var help_list           = "Create a list (alt + l)";
  var help_code           = "Insert Monotype Text (alt + p)";
  var help_click_close    = "Click button again to close";
  var list_prompt         = "Enter a list item. Click 'cancel' or leave blank to end the list";

var B_open = 0;
var R_open = 0;
var I_open = 0;
var U_open = 0;
var N_open = 0;
var Q_open = 0;
var H2_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; }
    cvalue = allcookies.substring(cstart, cend);
    
    if (cvalue == 'ezmode') {
      document.forms[1].bbmode[0].checked = true;
    } else {
      document.forms[1].bbmode[1].checked = true;
    }
  } 
  else {
    // default to normal mode.
    document.forms[1].bbmode[1].checked = true;
  }
}

function setmode(mVal)
{
  document.cookie = "bbmode="+mVal+"; path=/; expires=Wed, 1 Jan 2020 00:00:00 GMT;";
}

function get_easy_mode_state()
{
  // Returns true if we've chosen easy mode
  
  if (document.forms[1].bbmode[0].checked) {
    return true;
  }
  else {
    return false;
  }
}

//--------------------------------------------
// Set the help bar status
//--------------------------------------------

function hstat(msg)
{
  document.forms[1].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;
  }
  
  document.forms[1].tagcount.value = c;
}

//--------------------------------------------
// Get stack size
//--------------------------------------------

function stacksize(thearray)
{
  for (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)
{
  arraysize = stacksize(thearray);
  thearray[arraysize] = newval;
}

//--------------------------------------------
// Pop stack
//--------------------------------------------

function popstack(thearray)
{
  arraysize = stacksize(thearray);
  theval = thearray[arraysize - 1];
  delete thearray[arraysize - 1];
  return theval;
}

//--------------------------------------------
// SIMPLE TAGS (such as B, I U, etc)
//--------------------------------------------

function simpletag(thetag, thenametag, obj_ta)
{
	var isHelp = 0;
  if (obj_ta == "newAnswer") isHelp = 1;
  var tagOpen = eval(thetag + "_open");
  if ( 0 ){ //get_easy_mode_state() ) {
    inserttext = prompt(prompt_start + "\n[" + thetag + "]xxx[/" + thetag + "]");
    if ( (inserttext != null) && (inserttext != "") ) {
      doInsert("<" + thetag + ">" + inserttext + "</" + thetag + "> ", "", false, obj_ta, isHelp);
    }
  }
  else {
    if (tagOpen == 0) {
    	if (thetag == "N" ){
    		  doInsert(" \n&#8226; ", "", true, obj_ta, isHelp);
    	   //eval("document.forms[1]." + thenametag + ".value += '*'");
    	}
    	else if (thetag == "Q"){
    		  doInsert("&#34;", "", true, obj_ta, isHelp);
    	   //eval("document.forms[1]." + thenametag + ".value += '*'");
 
    	}
    	else if (thetag == "R"){
    		  doInsert("<font color=red>", "", true, obj_ta, isHelp);
    	   //eval("document.forms[1]." + thenametag + ".value += '*'");
    	     eval(thetag + "_open = 1");
              // Change the button status
           eval("document.forms["+ isHelp +"]." + thenametag + ".value = 'End " + thenametag + "'");
    
           pushstack(bbtags, thetag);
           cstat();
          hstat('click_close');
 
    	}
      else if(doInsert("<" + thetag + ">", "</" + thetag + ">", true, obj_ta, isHelp)){
      	
        eval(thetag + "_open = 1");
        // Change the button status
        eval("document.forms["+ isHelp +"]." + thenametag + ".value = 'End " + thenametag + "'");
    
        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);
        if (thetag == "R"){
    		  doInsert("</font>", "", false, obj_ta, isHelp);
    	   //eval("document.forms[1]." + thenametag + ".value += '*'");
 
    	  } 
        else doInsert("</" + tagRemove + ">", "", false, obj_ta, isHelp)
        
        // Change the button status
        eval("document.forms["+ isHelp +"]." + thenametag + ".value = 'Start " + thenametag + "'");
        eval(tagRemove + "_open = 0");
      }

      cstat();
    }
    
    
    
    
  }
 

}

function tag_list(obj_ta)
{
  var listvalue = "init";
  var thelist = "<ul>\n";
  
  while ( (listvalue != "") && (listvalue != null) ) {
    listvalue = prompt(list_prompt, "");
    if ( (listvalue != "") && (listvalue != null) ) {
      thelist = thelist+"<li>"+listvalue+"</li>\n";
    }
  }

  doInsert(thelist + "</ul>\n", "", false, obj_ta, isHelp);
}

function tag_url(obj_ta)
{
    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("<a href='"+enterURL+"'>"+enterTITLE+"</a>", "", false, obj_ta, 0);
}

function tag_email(obj_ta)
{
    var emailAddress = prompt(text_enter_email, "");

    if (!emailAddress) { 
    alert(error_no_email); 
    return; 
  }

  doInsert("<a href='mailto:"+emailAddress+"'>"+emailAddress+"</a>", "", false, obj_ta, 0);
}

//--------------------------------------------
// 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 doInsert(ibTag, ibClsTag, isSingle, obj_ta, help)
{
  
  var isClose = false;
  if (help == "1")
        var obj_ta = eval("document.forms[1]." + obj_ta);
  else
        var obj_ta = eval("document.forms[0]." + obj_ta);
  
  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;
      }

      obj_ta.scrollTop = obj_ta.scrollHeight;

    }
    else{
      if(isSingle)
        isClose = true;
  
      obj_ta.value += ibTag;
    }
  }
  else
  {
    if(isSingle)
      isClose = true;

    obj_ta.value += ibTag;
  }

  obj_ta.focus();
  obj_ta.scrollTop = obj_ta.scrollHeight;

  
  
  // clear multiple blanks
//  obj_ta.value = obj_ta.value.replace(/  /, " ");

  return isClose;
} 
