/**
 * (c) InfoProjects bv. - www.infoprojects.nl
 *
 * $Revision: 1.12 $
 * $Date: 2011/08/23 07:56:49 $
 */

/*
 * TinyMCE editor
 */
var tinyMCE_fullscreen = false;
var tinyMCE_htmlViews = new Array();
var tinyMCE_closeEditor = true;
var tinyMCE_okBtnPressed = false;
var tinyMCE_popupTitle = '';
var tinyMceProps = new Object();
var currentOpenEditor = null;
var currentOpenEditor_Div = null;
var tinyMCEtemp = null;
var tinyMCEIsReady = new Object();

var bubbleEvent = null;
var bubbleElement = null;

var clickActive = false;

function tinyMCEReady(inst) {
  tinyMCEIsReady[inst.editorId] = true;
}

/**
 * If an editor is active, it will be deactived on
 * click of another element ouside of the currently
 * active editor
 */
function checkActiveEditor(e) {
  if(!e) {
    e = window.event;
  }
  var source = is.ie ? e.srcElement : e.target;

  if(top.tinyMCE_okBtnPressed || clickActive)
    return;

  if(source && currentOpenEditor && !top.tinyMceInlinePopupName) {
    var id = source.id;

    if(ancestorContains(source, currentOpenEditor) == null &&
      (!source.id || (source.id && source.id.substring(9) != currentOpenEditor))) {
      clickActive = true;
      //cancel current click
      cancelBubble();

      top.tinyMCE_closeEditor = true;
      top.tinyMCE_okBtnPressed = true;

      if(source.onclick) {
        bubbleEvent = source.onclick;
      }
      bubbleElement = source;

      if(bubbleEvent == null) {
        var parentEditor = ancestorContains(source, 'htmlView_');
        if(parentEditor != null) {
          bubbleEvent = parentEditor.onclick;
          bubbleElement = parentEditor;
        }
      }

      activateTinyMCEEditor(currentOpenEditor, false, true);
      clickActive = (bubbleEvent != null);
    }
  }
}

function ancestorContains(o, id) {
  for(; o = o.parentNode;) {
    if(o.id && (o.id == id || o.id.indexOf(id) >= 0)) {
      return o;
    }
  }
  return null;
}

function activateTinyMCEEditor(id, active, closeEditor, fullscreen) {
  if(fullscreen == null) {
    fullscreen = false;
  }

  setTrafficStatus(true);
  var divID         = 'htmlView_' + id;
  var divTextareaID = 'htmlCodeDiv_' + id;
  var textareaID    = 'htmlCode_' + id;
  var clearBtnID    = 'ClearFieldDiv_' + id;
  var inputID       = id + '.Txt';
  var inst          = tinyMCE.getInstanceById(textareaID);

  if(active || active == null) {
    if(currentOpenEditor != null) {
      activateTinyMCEEditor(currentOpenEditor, !active, closeEditor);
    }
    if(fullscreen) {
      showModalBackground(true);
      inst.execCommand('mceFullScreen');
      tinyMCE_fullscreen = true;
      scroll(0,0);
    }

    document.onclick = checkActiveEditor;

    inst.setHTML(getElt(inputID).value.replace(/^<div>|<\/div>$/gi, ""));
    setEltDisplay(getElt(divID),'none');
    setEltDisplay(getElt(clearBtnID),'none');
    setEltDisplay(getElt(divTextareaID),'block');
    currentOpenEditor = id;
    currentOpenEditor_Div = divTextareaID;

    var eltLst = document.getElementsByTagName('select');
    for(var i=0; i<eltLst.length; i++) {
      if(eltLst[i].className == 'mceSelectList') {
        dontDisable[elementIdentifier(eltLst[i])] = true;
      }
    }
    dontDisable[elementIdentifier(document.getElementById('focus_' + id))] = true;

    resizeEditor(id);
    disableFormElements();

    if(enableElements) {
      for(var i=0; i<enableElements.length; i++) {
        disableFormElements(enableElements[i]);
      }
    }
    if(tinyMCE_htmlViews) {
      for(var i=0; i<tinyMCE_htmlViews.length; i++) {
        if(tinyMCE_htmlViews[i] != divID) {
          getElt(tinyMCE_htmlViews[i]).className += ' disabled';
        }
      }
    }

    if(!tinyMCE_fullscreen) {
      disallowScroll();
      window.onscroll=disallowScroll;
    }
    window.onresize=function() {
      resizeEditor(id);
    };
    setTrafficStatus(false);
    inst.useCSS = false;
    inst.getWin().focus();
  } else if (inst.isDirty() || !closeEditor) {
    document.onclick = null;
    enableFormElements();
    if(enableElements) {
      for(var i=0; i<enableElements.length; i++) {
        enableFormElements(enableElements[i]);
      }
    }
    var html = inst.getHTML();
    if (!inst.selection.htmlContainsBlock(html)) {
      inst.setHTML(html = "<span>" + html + "</span>");
    }
    var silentDoc = top.getFrame("SilentFrame", refererWindow).document;
    var silentForm = silentDoc.forms[0];

    addFormElement("MemoField.$action","hidden","run",false,silentForm,silentDoc);
    addFormElement("MemoField.LanCod","hidden",languageCode,false,silentForm,silentDoc);
    addFormElement("MemoField.FeaIdt", "hidden", tinyMceProps['mce_' + currentOpenEditor]["feaIdtLst"], false, silentForm, silentDoc);
    addFormElement("MemoField.SplChk","hidden",spellingCheck,false,silentForm,silentDoc);
    addFormElement("MemoField.WcaChk", "hidden", wcagCheck, false, silentForm, silentDoc);
    addFormElement("MemoField.Txt", "hidden", html, false, silentForm, silentDoc);
    if (inst.settings.memoFieldRule) {
      addFormElement("MemoField.Rul", "hidden", inst.settings.memoFieldRule, false, silentForm, silentDoc);
    }

    addFormElement("editor_id","hidden",id,false,silentForm,silentDoc);
    addFormElement("currentOpenEditor","hidden",currentOpenEditor,false,silentForm,silentDoc);
    addFormElement("AppIdt","hidden",filterHtmlAppIdt,false,silentForm,silentDoc);

    if(!closeEditor) {
      addFormElement("closeEditor","hidden","false",false,silentForm,silentDoc);
    }

    document.body.scroll = 'auto';

    window.onscroll = allowScroll;
    window.onresize = null;
    silentForm.submit();
    if(tinyMCE_htmlViews) {
      for(var i=0; i<tinyMCE_htmlViews.length; i++) {
        if(tinyMCE_htmlViews[i] != divID) {
          getElt(tinyMCE_htmlViews[i]).className = getElt(tinyMCE_htmlViews[i]).className.replace(new RegExp(' disabled'), '');
        }
      }
    }
  } else {
    document.onclick = null;

    enableFormElements();
    if(enableElements) {
      for(var i=0; i<enableElements.length; i++) {
        enableFormElements(enableElements[i]);
      }
    }
    if(tinyMCE_htmlViews) {
      for(var i=0; i<tinyMCE_htmlViews.length; i++) {
        if(tinyMCE_htmlViews[i] != divID) {
          getElt(tinyMCE_htmlViews[i]).className = getElt(tinyMCE_htmlViews[i]).className.replace(new RegExp(' disabled'), '');
        }
      }
    }

    document.body.scroll = 'auto';
    window.onscroll = allowScroll;
    window.onresize = null;
    htmlCheckReady(id, closeEditor);
  }

  if(inDialog) {
    resizeDialog();
  }
  if(!active && document.getElementById('focus_' + id) &&
    !document.getElementById('focus_' + id).disabled) {
    document.getElementById('focus_' + id).focus();
  }
}

function htmlCheckReady(id, closeEditor) {
  var divID         = 'htmlView_' + id;
  var divTextareaID = 'htmlCodeDiv_' + id;
  var clearBtnID    = 'ClearFieldDiv_' + id;
  var textareaID    = 'htmlCode_' + id;
  var inputID       = id + '.Txt';
  var inst          = tinyMCE.getInstanceById(textareaID);

  // set content in html-editor
  if (inst.isDirty()) {
    inst.setHTML(getElt(textareaID).value);
    inst.triggerSave(true, true);
  }

  // set content in preview
  getElt(divID).innerHTML = getElt(textareaID).value;

  if(closeEditor) {
    // show preview
    if(tinyMCE_fullscreen) {
      showModalBackground(false);
      inst.execCommand('mceFullScreen');
      tinyMCE_fullscreen = false;
    }
    setEltDisplay(getElt(divID),'block');
    setEltDisplay(getElt(clearBtnID),'block');
    setEltDisplay(getElt(divTextareaID),'none');

    currentOpenEditor = null;
    top.tinyMCE_okBtnPressed = false;

    window.setTimeout('bubbleClickEvent()', 256);
    updateWcagMessages();
  }

  resizeEditor(id, true);

  setTrafficStatus(false);
}

function bubbleClickEvent() {
  if(bubbleEvent) {
    // run bubbleEvent
    var eventResult = bubbleEvent();

    if(eventResult == 'undefined') {
      eventResult = false;
    }

    if(eventResult && bubbleElement && bubbleElement.href) {
      location.href = bubbleElement.href;
    }
  }
  bubbleEvent = null;
  top.clickActive = false;
}

function resizeEditor(id, divOnly) {
  var divID      = 'htmlView_' + id;
  var textareaID = 'htmlCode_' + id;
  var inst       = tinyMCE.getInstanceById(textareaID);
  var initHeight = editorInitHeight[id]?editorInitHeight[id]:0;

  // resize the editor
  var newHeight = initHeight;
  if(inst && !divOnly && !fullscreenEditor[id]) {
    if(getElt(divID).scrollHeight > initHeight && getElt(divID).scrollHeight <= getWindowInnerHeight()) {
      newHeight = getElt(divID).scrollHeight;
      setEltHeight(document.getElementById(inst.editorId), newHeight);
      setEltHeight(inst.iframeElement, newHeight);
    } else if(getElt(divID).scrollHeight >= getWindowInnerHeight()) {
      newHeight = getWindowInnerHeight() - 125;
      setEltHeight(document.getElementById(inst.editorId), newHeight);
      setEltHeight(inst.iframeElement, newHeight);
    } else if(is.ie) {
      setEltHeight(document.getElementById(inst.editorId), initHeight);
      setEltHeight(inst.iframeElement, initHeight);
    }
  }

  // resize preview div
  if(getElt(divID).scrollHeight > getEltHeight(getElt(divID))) {
    setEltHeight(getElt(divID), getElt(divID).scrollHeight);
  } else if(initHeight) {
    setEltHeight(getElt(divID), initHeight);
  }
}

