﻿
function SlideInToolPanel() {
    var panelContainer = document.getElementById('ManagementTools');
    panelContainer.style.left = "0px";
}

function SlideOutToolPanel() {
    var panelContainer = document.getElementById('ManagementTools');
    panelContainer.style.left = "-300px";
}

function areaFocus(areaName) {
    // get selection holder
    var area = document.getElementById('CurrentArea');
      
    var oldArea;
    if (area.value != "") {
        oldArea = document.getElementById(area.value);
        oldArea.setAttribute("class", "");
        oldArea.setAttribute("className", "");
    }

    var newArea = document.getElementById(areaName);
    newArea.setAttribute("class", "SelectedArea");
    newArea.setAttribute("className", "SelectedArea");
    // set new chosen area
    area.value = areaName;
}

function resizeAllFrames()
{
    var frameList = document.body.getElementsByTagName("iframe");

    for (var i = 0; i < frameList.length; i++) 
    {
        try {
            // get the document object
            var currentDoc = null;
            var newHeight = 0;
            if (frameList[i].contentDocument)     // Firefox, Opera 
            {
                currentDoc = frameList[i].contentDocument;
                newHeight = 0;
            }
            else if (frameList[i].contentWindow)  // Internet Explorer   
                currentDoc = frameList[i].contentWindow.document;
            // make sure designmode is on
            currentDoc.designMode = "On";

            if (frameList[i].contentDocument)     // Firefox, Opera   
                currentDoc = frameList[i].contentDocument;
            else if (frameList[i].contentWindow)  // Internet Explorer   
                currentDoc = frameList[i].contentWindow.document;

            newHeight = newHeight + currentDoc.body.scrollHeight;
            frameList[i].height = newHeight;
        }
        catch (err) {
        }

    }
     
    window.setTimeout("resizeAllFrames()", 500);
}

function InitialiseEditor() {
    var frameList = document.body.getElementsByTagName("iframe");
    
    if (document.addEventListener) 
    {
      document.addEventListener("mousedown", dismisscolorpalette, true);
      document.addEventListener("keypress", dismisscolorpalette, true);
    } 
    else if (document.attachEvent) 
    {
        document.attachEvent("mousedown", dismisscolorpalette, true);
        document.attachEvent("keypress", dismisscolorpalette, true);
    }
    
    InitToolbarButtons();
    resizeAllFrames();
}

function InitToolbarButtons() 
{
    var kids = document.getElementsByTagName('div');

    for (var i=0; i < kids.length; i++) 
    {
        if (kids[i].className == "toolButton") 
        {
            kids[i].onmouseover = tbmouseover;
            kids[i].onmouseout = tbmouseout;
            kids[i].onmousedown = tbmousedown;
            kids[i].onmouseup = tbmouseup;
            kids[i].onclick = tbclick;
        }
    }
    
    var palette = document.getElementById("colorpalette");
    var x = palette.getElementsByTagName("TD");
    
    for (var i=0;i<x.length;i++)
    {
        x[i].onmouseover = tbmouseover;
        x[i].onmouseout = tbmouseout;
        x[i].onclick = colorPick;
    }
}

function colorPick()
{
    var currentArea = document.getElementById("CurrentArea").value;
    currentArea.document.execCommand(parent.command,false, this.id);
    document.getElementById("colorpalette").style.visibility="hidden";
}

function tbmousedown(e) {
  var evt = e ? e : window.event; 

  this.firstChild.style.left = 2;
  this.firstChild.style.top = 2;
  this.style.border="inset 1px";
  if (evt.returnValue) {
    evt.returnValue = false;
  } else if (evt.preventDefault) {
    evt.preventDefault( );
  } else {
    return false;
  }
}

function tbmouseup() {
  this.firstChild.style.left = 1;
  this.firstChild.style.top = 1;
  this.style.border="outset 1px";
}

function tbmouseout() {
  this.style.border="solid 1px navy";
}

function tbmouseover() {
  this.style.border="solid 1px red";
}

  function insertNodeAtSelection(win, insertNode) {
      debugger;
      // get current selection
      var sel = win.getSelection();

      // get the first range of the selection
      // (there's almost always only one range)
      var range = sel.getRangeAt(0);

      // deselect everything
      sel.removeAllRanges();

      // remove content of current selection from document
      range.deleteContents();

      // get location of current selection
      var container = range.startContainer;
      var pos = range.startOffset;

      // make a new range for the new selection
      range=document.createRange();

      if (container.nodeType==3 && insertNode.nodeType==3) {

        // if we insert text in a textnode, do optimized insertion
        container.insertData(pos, insertNode.nodeValue);

        // put cursor after inserted text
        range.setEnd(container, pos+insertNode.length);
        range.setStart(container, pos+insertNode.length);

      } else {


        var afterNode;
        if (container.nodeType==3) {

          // when inserting into a textnode
          // we create 2 new textnodes
          // and put the insertNode in between

          var textNode = container;
          container = textNode.parentNode;
          var text = textNode.nodeValue;

          // text before the split
          var textBefore = text.substr(0,pos);
          // text after the split
          var textAfter = text.substr(pos);

          var beforeNode = document.createTextNode(textBefore);
          afterNode = document.createTextNode(textAfter);

          // insert the 3 new nodes before the old one
          container.insertBefore(afterNode, textNode);
          container.insertBefore(insertNode, afterNode);
          container.insertBefore(beforeNode, insertNode);

          // remove the old node
          container.removeChild(textNode);

        } else {

          // else simply insert the node
          afterNode = container.childNodes[pos];
          container.insertBefore(insertNode, afterNode);
        }

        range.setEnd(afterNode, 0);
        range.setStart(afterNode, 0);
      }

      sel.addRange(range);
  };

function getOffsetTop(elm) {

  var mOffsetTop = elm.offsetTop;
  var mOffsetParent = elm.offsetParent;

  while(mOffsetParent){
    mOffsetTop += mOffsetParent.offsetTop;
    mOffsetParent = mOffsetParent.offsetParent;
  }
 
  return mOffsetTop;
}

function getOffsetLeft(elm) 
{
  var mOffsetLeft = elm.offsetLeft;
  var mOffsetParent = elm.offsetParent;

  while(mOffsetParent){
    mOffsetLeft += mOffsetParent.offsetLeft;
    mOffsetParent = mOffsetParent.offsetParent;
  }
 
  return mOffsetLeft;
}

function tbclick() {
    var currentArea = document.getElementById("CurrentArea").value;
    //document.getElementById(currentArea).contentWindow.document.designMode = "On";

    try
    {
        if ((this.id == "forecolor") || (this.id == "hilitecolor")) {
            parent.command = this.id;
            buttonElement = document.getElementById(this.id);
            document.getElementById("colorpalette").style.left = getOffsetLeft(buttonElement);
            document.getElementById("colorpalette").style.top = getOffsetTop(buttonElement) + buttonElement.offsetHeight;
            document.getElementById("colorpalette").style.visibility = "visible";
        } else if (this.id == "createlink") {
            var szURL = prompt("Enter a URL:", "http://");
            if ((szURL != null) && (szURL != "")) {
                document.getElementById(currentArea).contentWindow.document.execCommand("CreateLink", false, szURL);
            }
        } else if (this.id == "createimage") {
            imagePath = prompt('Enter Image URL:', 'http://');
            if ((imagePath != null) && (imagePath != "")) {
                document.getElementById(currentArea).contentWindow.document.execCommand('InsertImage', false, imagePath);
            }
        } else if (this.id == "createtable") {
            e = document.getElementById(currentArea);
            rowstext = prompt("enter rows");
            colstext = prompt("enter cols");
            rows = parseInt(rowstext);
            cols = parseInt(colstext);
            if ((rows > 0) && (cols > 0)) {
                table = e.contentWindow.document.createElement("table");
                tbody = e.contentWindow.document.createElement("tbody");
                for (var i = 0; i < rows; i++) {
                    tr = e.contentWindow.document.createElement("tr");
                    for (var j = 0; j < cols; j++) {
                        td = e.contentWindow.document.createElement("td");
                        br = e.contentWindow.document.createElement("br");
                        td.appendChild(br);
                        tr.appendChild(td);
                    }
                    tbody.appendChild(tr);
                }
                table.appendChild(tbody);
                insertNodeAtSelection(e.contentWindow, table);
            }
        } else if (this.id == "src") {
        
        }
        else {
            document.getElementById(currentArea).contentWindow.document.execCommand(this.id, false, null);
        } 
    }
    catch(error)
    {
        alert("Browser could not perform the command :\n\n" + error);
    }
}

function Select(selectname)
{
    var currentArea = document.getElementById("CurrentArea").value;
    document.getElementById(currentArea).contentWindow.focus();
   
   var cursel = document.getElementById(selectname).selectedIndex;
   /* First one is always a label */
   if (cursel != 0) {
     var selected = document.getElementById(selectname).options[cursel].value;
     document.getElementById(currentArea).contentWindow.document.execCommand(selectname, false, selected);
     document.getElementById(selectname).selectedIndex = 0;
   }
}

function dismisscolorpalette()
{
  document.getElementById("colorpalette").style.visibility="hidden";
}

function viewsource(source)
{
  var currentArea = document.getElementById("CurrentArea").value;
  var html;
  if (source) {
    html = document.createTextNode(document.getElementById(currentArea).contentWindow.document.body.innerHTML);
    document.getElementById(currentArea).contentWindow.document.body.innerHTML = "";
    html = document.getElementById(currentArea).contentWindow.document.importNode(html,false);
	document.getElementById(currentArea).contentWindow.document.body.appendChild(html);
    document.getElementById("toolbar1").style.visibility="hidden";
    document.getElementById("toolbar2").style.visibility="hidden";  
  } else {
    html = document.getElementById(currentArea).contentWindow.document.body.ownerDocument.createRange();
    html.selectNodeContents(document.getElementById(currentArea).contentWindow.document.body);
    document.getElementById(currentArea).contentWindow.document.body.innerHTML = html.toString();
    document.getElementById("toolbar1").style.visibility="visible";
    document.getElementById("toolbar2").style.visibility="visible";  
  }
}

function usecss(source)
{
  document.getElementById(currentArea).contentWindow.document.execCommand("useCSS", false, !(source));  
}

function readonly(source)
{
    document.getElementById(currentArea).contentWindow.document.execCommand("readonly", false, !(source));
}

