// ===========
// HTML EDITOR
// ===========

var allow_multiple_wysiwyg=true;

function wysiwyg_on()
{
   var cookie=ReadCookie('use_wysiwyg');
   return (cookie=='') || (cookie=='1');
}

function toggle_wysiwyg(name)
{
   if (!browser_matches('wysiwyg'))
   {
      window.alert('WYSIWYG editing is not currently supported on your current web browser.');
      return false;
   }

   if (!window.load_XML_doc) return false;
   if (!window.merge_text_nodes) return false;
   if (!document.getElementsByClassName) return false;

   var is_wysiwyg_on=wysiwyg_on();
   SetCookie('use_wysiwyg',is_wysiwyg_on?'0':'1',3000);

   var posting_form=document.getElementById(name).form;
   var counter,name2;
   var areaedits=document.getElementsByClassName('htmlarea');
   var so=document.getElementById('post_special_options');
   var so2=document.getElementById('post_special_options2');
   var textarea_new;

   var request,result;
   if (is_wysiwyg_on)
   {
      var prompt=window.prompt('To revert to the prior Comcode text, type \'discard\' here. Press \'Cancel\' if you do not wish to disable WYSIWYG. Just press \'OK\' to continue normally.','');
      if (prompt==undefined)
      {
         SetCookie('use_wysiwyg','1',3000);
         return false;
      }
      var discard=(prompt.toLowerCase()=='discard'.toLowerCase());

      for (counter=0;counter<posting_form.elements.length;counter++)
      {
         name2=posting_form.elements[counter].name;
         if ((areaedit_editors[name2]) && (!posting_form.elements[counter].recreated_textarea))
         {
            areaedit_editors[name2].deactivateEditor();
            document.getElementById(name2+'__is_wysiwyg').value='0';
            posting_form.elements[counter].id='wysiwyg_version_of_'+name2;
            posting_form.elements[counter].name='wysiwyg_version_of_'+name2;
            textarea_new=document.createElement('textarea');
            posting_form.elements[counter].replacing=textarea_new;
            textarea_new.id=name2;
            textarea_new.name=name2;
            textarea_new.recreated_textarea=true;
            textarea_new.className=posting_form.elements[counter].className;
            textarea_new.setAttribute('tabindex',posting_form.elements[counter].getAttribute('tabindex'));
            textarea_new.setAttribute('rows',posting_form.elements[counter].getAttribute('rows'));
            if ((discard) && (areaedit_original_comcode[name2]))
            {
               textarea_new.value=areaedit_original_comcode[name2];
            } else
            {
               request=load_XML_doc('http://www.bbwparties.com/ocPortal/data/comcode_convert.php?from_html=1'+keep_stub(),false,'data='+window.encodeURIComponent(areaedit_editors[name2].getHTML()));
               result=request.responseXML.documentElement.getElementsByTagName("result")[0];
               textarea_new.value=merge_text_nodes(result.childNodes);
            }
            document.getElementById('container_for_'+name2).appendChild(textarea_new);
            document.getElementById('toggle_wysiwyg_'+name2).innerHTML='Enable WYSIWYG editing';
         }
      }
      for (counter=0;counter<areaedits.length;counter++)
      {
         areaedits[counter].style.display='none';
      }
      if (so) so.style.display='block';
      if (so2) so2.style.display='none';
   } else
   {
      if (so) so.style.display='none';
      if (so2) so.style.display='block';
      var old_text;
      if (areaedit_loaded)
      {
         for (counter=0;counter<areaedits.length;counter++)
         {
            areaedits[counter].style.display='block';
         }
         for (counter=0;counter<posting_form.elements.length;counter++)
         {
            if (posting_form.elements[counter].name.indexOf('wysiwyg_version_of_')!=-1)
            {
               name2=posting_form.elements[counter].name.replace(/wysiwyg\_version\_of\_/,'');
               old_text=posting_form.elements[counter].replacing.value;
               document.getElementById(name2+'__is_wysiwyg').value='1';
               posting_form.elements[counter].id=name2;
               posting_form.elements[counter].name=name2;
               posting_form.elements[counter].replacing.parentNode.removeChild(posting_form.elements[counter].replacing);
               areaedit_editors[name2].activateEditor();
               request=load_XML_doc('http://www.bbwparties.com/ocPortal/data/comcode_convert.php?semihtml=1&from_html=0'+keep_stub(),false,'data='+window.encodeURIComponent(old_text));
               result=request.responseXML.documentElement.getElementsByTagName("result")[0];
               if (result.childNodes[0]) areaedit_editors[name2].setHTML(merge_text_nodes(result.childNodes));
               else
               {
                  window.alert('There was a problem receiving the result to display; it is likely your Comcode is invalid.');
                  areaedit_editors[name2].setHTML(escape_html(old_text));
               }
               document.getElementById('toggle_wysiwyg_'+name2).innerHTML='Disable WYSIWYG editing';
            }
         }
      } else
      {
         load_html_edit(posting_form,true);
      }
   }

   return false;
}

var areaedit_editors=[];
var areaedit_loaded=false;
var areaedit_original_comcode=[];
function load_html_edit(posting_form,ajax_copy)
{
   if (!window.DDT) return;
   if (!window.load_XML_doc) return;
   if (!window.merge_text_nodes) return;
   if (!window.HTMLArea) return;
   if (!browser_matches('wysiwyg')) return;
   if (!wysiwyg_on()) return;

   var so=document.getElementById('post_special_options');
   var so2=document.getElementById('post_special_options2');
   if (so) so.style.display='none';
   if (so2) so2.style.display='block';

   var counter,e_id,count=0,e,indicator,those_done=Array(),result,request;
   var areaedit_editors_static=[];
   for (counter=0;counter<posting_form.elements.length;counter++)
   {
      e=posting_form.elements[counter];

      if ((e.type=='textarea') && (e.className.indexOf('wysiwyg')!=-1) && (!is_comcode_xml(e)))
      {
         indicator=document.createElement('input');
         indicator.type='hidden';
         indicator.name=posting_form.elements[counter].name+'__is_wysiwyg';
         indicator.id=indicator.name;
         posting_form.appendChild(indicator);

         e_id=posting_form.elements[counter].id;
         if (those_done[e_id]) continue;
         those_done[e_id]=1;
         if ((((e_id!='post') && (posting_form.elements['post'])) || (count!=0)) && (!allow_multiple_wysiwyg))
         {
            indicator.value='0';
            continue; // Multiple WYSIWYG's causes problems in some browsers
         }

         areaedit_editors[count]=e_id;
         posting_form.elements[counter].disabled=true;
         areaedit_editors_static[count]=posting_form.elements[counter];
         areaedit_original_comcode[e_id]=areaedit_editors_static[count].value;
         count++;

         indicator.value='1';

         if (!ajax_copy)
         {
            if (posting_form.elements[e_id+"_parsed"])
               posting_form.elements[counter].value=posting_form.elements[e_id+"_parsed"].value;
         } else
         {
            request=load_XML_doc('http://www.bbwparties.com/ocPortal/data/comcode_convert.php?semihtml=1&from_html=0'+keep_stub(),false,'data='+window.encodeURIComponent(posting_form.elements[counter].value));
            result=request.responseXML.documentElement.getElementsByTagName("result")[0];
            posting_form.elements[counter].value=merge_text_nodes(result.childNodes);
         }

         document.getElementById('toggle_wysiwyg_'+posting_form.elements[counter].name).innerHTML='Disable WYSIWYG editing';
      }
   }
   if (count==0) return;

   var areaedit_init=function () {
      var startupDDT=new DDT("ocPortal");
      //startupDDT._ddtOn();

      var areaedit_plugins=
      [
   		'CheckOnKeyPress',
         'CharacterMap',
         'ContextMenu',
         'EnterParagraphs',
         'FullScreen',
         'ListType',
   		//
         'SpellChecker',
         //
   		'TableOperations'
      ];

   	startupDDT._ddt("ocPortal", "92", "calling HTMLArea.loadplugins()");

      require_css('htmlarea');

      HTMLArea.init();
      if (!HTMLArea.loadPlugins(areaedit_plugins, areaedit_init)) return;

     	startupDDT._ddt("ocPortal", "119", "calling HTMLArea.Config()");

      var areaedit_config=new HTMLArea.Config();
      areaedit_config.toolbar =
      [
         ["htmlmode","formatblock","fontname","fontsize",/*"separator",*/"bold","italic","underline"/*,"strikethrough"*/],
         ["forecolor"/*,"hilitecolor","separator"*/],
         ["subscript","superscript",/*"separator",*/"removeformat",/*"separator",*/"createlink"],
         ["linebreak","justifyleft","justifycenter","justifyright"/*,"justifyfull"*/],
         ["separator","insertorderedlist","insertunorderedlist","outdent","indent","separator"],
         ["inserthorizontalrule","insertimage","inserttable","separator"],
         ["undo","redo"],(HTMLArea.is_gecko?[]:["cut","copy","paste"]),
         /*["separator"],["toggleborders"]*/
      ];
      areaedit_config.pageStyleSheets=[];
      var linked_sheets=document.getElementsByTagName('link');
      for (counter=0;counter<linked_sheets.length;counter++)
      {
         if (linked_sheets[counter].getAttribute('rel')=='stylesheet')
            areaedit_config.pageStyleSheets.push(linked_sheets[counter].getAttribute('href'));
      }
      linked_sheets=document.getElementsByTagName('style');
      areaedit_config.pageStyle='';
      var global_div=document.getElementById('global_div');
      if (global_div) areaedit_config.pageStyle='body { background-color: '+getStyle(global_div,'background-color')+' !important; }';
      areaedit_config.pageStyle=areaedit_config.pageStyle+"#main_page_title { display: block !important }";
      areaedit_config.pageStyle=areaedit_config.pageStyle+".MsoNormal, .MsoNormal, .MsoNormal { margin: 0; }";
      for (counter=0;counter<linked_sheets.length;counter++)
      {
         areaedit_config.pageStyle+=linked_sheets[counter].innerHTML;
      }
      //areaedit_config.pageStyleSheets.push('http://www.bbwparties.com/ocPortal/data/areaedit/override.css');

      areaedit_config.statusBar=false;
      startupDDT._ddt("ocPortal", "140", "calling HTMLArea.makeEditors()");

      areaedit_editors=HTMLArea.makeEditors(areaedit_editors,areaedit_config,areaedit_plugins);

      startupDDT._ddt("ocPortal","160","calling HTMLArea.startEditors()");

      HTMLArea.startEditors(areaedit_editors);
   }

   areaedit_init();
   areaedit_loaded=true;

   for (counter=0;counter<count;counter++)
   {
      areaedit_editors_static[counter].disabled=false;
   }
}

function getStyle(oElm, strCssRule){ // by Robert Nyman
    var strValue = "";
    if(document.defaultView && document.defaultView.getComputedStyle){
        strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
    }
    else if(oElm.currentStyle){
        strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
            return p1.toUpperCase();
        });
        strValue = oElm.currentStyle[strCssRule];
    }
    return strValue;
}

// =============
// NORMAL EDITOR
// =============

function is_comcode_xml(element)
{
   return (element.value.substr(0,8)=='<comcode');
}

function convert_xml(name)
{
   if (!window.load_XML_doc) return false;
   if (!window.merge_text_nodes) return false;

   var element=document.getElementById(name);
   var old_text=element.value;
   var request=load_XML_doc('http://www.bbwparties.com/ocPortal/data/comcode_convert.php?to_comcode_xml=1'+keep_stub(),false,'data='+window.encodeURIComponent(old_text));
   var result=((request) && (request.responseXML) && (request.responseXML.documentElement))?request.responseXML.documentElement.getElementsByTagName("result")[0]:null;
   if ((result) && (result.childNodes[0].data)) element.value=merge_text_nodes(result.childNodes);
   else
   {
      var error_window=window.open();
      error_window.document.write(request.responseText);
      error_window.document.close();
      window.alert('Your Comcode could not be parsed and hence could not be converted. You will be shown a Comcode debugger if you try to submit this form. Alternatively, there could have been a connection error.');
   }

   return false;
}

function do_emoticon(field_name,p,_opener)
{
   var element;
   if (_opener)
   {
      element=opener.document.getElementById(field_name);
   } else
   {
      element=document.getElementById(field_name);
   }
   element=ensure_true_id(element,field_name);

   if (element.style.display=='none')
   {
      if (_opener)
      {
         if (!opener.areaedit_editors) return;
         opener.areaedit_editors[element.id].insertHTML(opener.areaedit_editors[element.id].getSelectedHTML()+p.innerHTML);
      } else
      {
         areaedit_editors[element.id].insertHTML(areaedit_editors[element.id].getSelectedHTML()+p.innerHTML);
      }
      return;
   }

   var text=is_comcode_xml(element)?'<emoticon>'+escape_html(p.title)+'</emoticon>':(' '+p.title+' ');

   if (_opener)
   {
      insertTextboxOpener(element,text);
   } else
   {
      insertTextbox(element,text);
   }
}

function do_attachment(field_name,id,description)
{
   if (!opener.areaedit_editors) return;

   if (!description) description='';

   var element=opener.document.getElementById(field_name);
   element=ensure_true_id(element,field_name);

   var comcode;
   if (!is_comcode_xml(element))
   {
      comcode='\n\n[attachment type="island" description="'+escape_comcode(description)+'"]'+id+'[/attachment]';
   } else
   {
      comcode='<br /><br /><attachment type="island"><attachmentDescription>'+description+'</attachmentDescription>'+id+'</attachment>';
   }

   if (element.style.display=='none')
   {
      opener.areaedit_editors[element.id].insertHTML(opener.areaedit_editors[element.id].getSelectedHTML()+comcode);
   } else
   {
      insertTextboxOpener(element,comcode);
   }
}

function ensure_true_id(element,field_name) // Works around IE bug
{
   var form=element.form;
   var i;
   for (i=0;i<form.elements.length;i++)
   {
      if ((form.elements[i].id==field_name) || (form.elements[i].name==field_name))
      {
         return form.elements[i];
      }
   }
   return element;
}

function insertTextbox(element,text,sel)
{
   if (element.style.display=='none')
   {
      areaedit_editors[element.id].insertHTML(areaedit_editors[element.id].getSelectedHTML()+text);
      return;
   }

   var from=element.value.length,to;

   element.focus();

   if (!sel) sel=document.selection?document.selection:null;

   if (element.selectionEnd) // Mozilla style
   {
      from=element.selectionStart;
      to=element.selectionEnd;

      var start=element.value.substring(0,from);
      var end=element.value.substring(to,element.value.length);

      element.value=start+element.value.substring(from,to)+text+end;
      setSelectionRange(element,from+text.length,from+text.length);
   } else
   if (sel) // IE style
   {
      var ourRange=sel.createRange();
      if ((ourRange.moveToElementText) || (ourRange.parentElement()==element))
      {
         if (ourRange.parentElement()!=element) ourRange.moveToElementText(element);
         ourRange.text=ourRange.text+text;
      } else
      {
         element.value+=text;
         from+=2;
         setSelectionRange(element,from+text.length,from+text.length);
      }
   }
   else
   {
      // :(
      from+=2;
      element.value+=text;
      setSelectionRange(element,from+text.length,from+text.length);
   }
}
function insertTextboxOpener(element,text)
{
   insertTextbox(element,text,opener.document.selection);
}

function insertTextboxWrapping(element,beforeWrapTag,afterWrapTag)
{
   var from,to;

   if (afterWrapTag=="")
   {
      if (!is_comcode_xml(element))
      {
         afterWrapTag="[/"+beforeWrapTag+"]";
         beforeWrapTag="["+beforeWrapTag+"]";
      } else
      {
         afterWrapTag="</"+beforeWrapTag+">";
         beforeWrapTag="<"+beforeWrapTag+">";
      }
   }

   if (element.style.display=='none')
   {
      areaedit_editors[element.id].insertHTML(beforeWrapTag+areaedit_editors[element.id].getSelectedHTML()+afterWrapTag);
      return;
   }

   if (element.selectionEnd) // Mozilla style
   {
      from=element.selectionStart;
      to=element.selectionEnd;

      var start=element.value.substring(0,from);
      var end=element.value.substring(to,element.value.length);

      if (to>from)
      {
         element.value=start+beforeWrapTag+element.value.substring(from,to)+afterWrapTag+end;
      } else
      {
         element.value=start+beforeWrapTag+afterWrapTag+end;
      }
      setSelectionRange(element,from,to+beforeWrapTag.length+afterWrapTag.length);
   } else
   if (document.selection) // IE style
   {
      element.focus();
      var sel=document.selection;
      var ourRange=sel.createRange();
      if ((ourRange.moveToElementText) || (ourRange.parentElement()==element))
      {
         if (ourRange.parentElement()!=element) ourRange.moveToElementText(element);
         ourRange.text=beforeWrapTag+ourRange.text+afterWrapTag;
      } else element.value+=beforeWrapTag+afterWrapTag;
   }
   else
   {
      // :(
      element.value+=beforeWrapTag+afterWrapTag;
      setSelectionRange(element,from,to+beforeWrapTag.length+afterWrapTag.length);
   }
}

// From http://www.faqts.com/knowledge_base/view.phtml/aid/13562
function setSelectionRange(input,selectionStart,selectionEnd)
{
   if (input.setSelectionRange) /* Mozilla style */
   {
      input.focus();
      input.setSelectionRange(selectionStart,selectionEnd);
   }
   else if (input.createTextRange) /* IE style */
   {
      var range=input.createTextRange();
      range.collapse(true);
      range.moveEnd('character',selectionEnd);
      range.moveStart('character',selectionStart);
      range.select();
   } else input.focus();
}
     


