richedit.js.svn-base
上传用户:cdpainuo
上传日期:2022-07-12
资源大小:5257k
文件大小:45k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. var OP = (window.opera || navigator.userAgent.indexOf('Opera') != -1);
  2. var IE = (navigator.userAgent.indexOf('MSIE') != -1 && !OP);
  3. var GK = (navigator.userAgent.indexOf('Gecko') != -1 || OP);
  4. var DM = (document.designMode && document.execCommand);
  5. var rto = new Array();
  6. var mouseX, mouseY, winX, winY, scrLeft, scrTop;
  7. //---------------------------------------------------------------------------------------------------------
  8. // Language settings
  9. //---------------------------------------------------------------------------------------------------------
  10.   var txtParagraph       = "Paragraph";
  11.   var txtNormal          = "Normal";
  12.   var txtHeading         = "Heading";
  13.   var txtClearFormatting = "Clear Formatting";
  14.   var txtJustifyLeft     = "Justify Left";
  15.   var txtJustifyCenter   = "Justify Center";
  16.   var txtJustifyRight    = "Justify Right";
  17.   var txtJustifyFull     = "Justify Full";
  18.   var txtOrderedList     = "Ordered List";
  19.   var txtUnorderedList   = "Unordered List";
  20.   var txtOutdent         = "Outdent";
  21.   var txtIndent          = "Indent";
  22.   var txtInsertHR        = "Insert Horizontal Rule";
  23.   var txtInsertTable     = "Insert Table";
  24.   var txtInsertGraph     = "Insert Graph";
  25.   var txtInsertBullet    = "Insert Bullet Point";
  26.   var txtInsertImage     = "Insert Image";
  27.   var txtInsertText      = "Insert text here";
  28.   var txtFont            = "Font";
  29.   var txtSize            = "Size";
  30.   var txtBold            = "Bold";
  31.   var txtItalic          = "Italic";
  32.   var txtUnderline       = "Underline";
  33.   var txtFontColor       = "Font Color";
  34.   var txtBGColor         = "Background Color";
  35.   var txtHyperlink       = "Hyperlink";
  36.   var txtCut             = "Cut";
  37.   var txtCopy            = "Copy";
  38.   var txtPaste           = "Paste";
  39.   var txtUndo            = "Undo";
  40.   var txtRedo            = "Redo";
  41.   var txtBorder          = "Border";
  42.   var txtBorderColor     = "Border Color";
  43.   var txtCellColor       = "Cell Color";
  44.   var txtCellSpacing     = "Cell Spacing";
  45.   var txtCellPadding     = "Cell Padding";
  46.   var txtColumns         = "Columns";
  47.   var txtRows            = "Rows";
  48.   var txtCreate          = "Create";
  49.   var txtCancel          = "Cancel";
  50.   var txtValues          = "Values";
  51.   var txtLabels          = "Labels";
  52.   var txtBarColor        = "Bar Color";
  53.   var txtLabelColor      = "Label Color";
  54.   var txtViewValues      = "View Values";
  55.   var txtLegend          = "Legend";
  56.   var txtViewSource      = "View Source";
  57.   var txtViewEditor      = "View Editor";
  58.   var txtNoRichEdit      = "Sorry, your browser does not support richtext editing!";
  59.   var txtCreateError     = "Could not create editor!";
  60. function EDITOR() {
  61. //---------------------------------------------------------------------------------------------------------
  62. // Configuration
  63. //---------------------------------------------------------------------------------------------------------
  64.   this.editorBGColor = "#F0F0F0";               // editor background color
  65.   this.editorBorder = "2px groove #FFFFFF";     // editor border (CSS-spec: "size style color")
  66.   this.textWidth = 650;                         // text field width (pixels)
  67.   this.textHeight = 120;                        // text field height (pixels)
  68.   this.textBGColor = "#FFFFFF";                 // text field background color
  69.   this.textBorder = "2px inset #FFFFFF";        // text field border (CSS-spec: "size style color")
  70.   this.textFont = "Verdana, Arial, Helvetica";  // text field font family (CSS-spec)
  71.   this.textFontSize = 12;                       // text field font size (pixels)
  72.   this.setFocus = false;                        // focus text field on load (true or false)
  73.   this.fieldName = "richEdit";                  // default field name
  74.   this.iconPath = "icons";                      // path to icons
  75.   this.bulletpoint = "bp.gif";                  // bullet point image (full path)
  76. //---------------------------------------------------------------------------------------------------------
  77. // Functions
  78. //---------------------------------------------------------------------------------------------------------
  79.   this.editor = 0;
  80.   this.id = 0;
  81.   this.curSelection = 0;
  82.   this.field = '';
  83.   this.curFontColor = '#000000';
  84.   this.curBGColor = '#FFFF00';
  85.   this.source = false;
  86.   this.getEditor = function() {
  87.     var e = false;
  88.     if(GK) e = document.getElementById('rtoIFrame' + this.id).contentWindow;
  89.     else if(IE) e = document.frames('rtoIFrame' + this.id);
  90.     if(e && !DM) e = false;
  91.     return e;
  92.   }
  93.   this.wordWrap = function(string, col, prefix) {
  94.     if(col == null) col = 100;
  95.     if(prefix == null) prefix = '';
  96.     var text = line = newline = word = '';
  97.     var row = col - prefix.length;
  98.     var i, j, cnt;
  99.     var words = new Array();
  100.     var lines = new Array();
  101.     lines = string.split('n');
  102.     if(row > 0) {
  103.       for(i = 0; i < lines.length; i++) {
  104.         line = lines[i];
  105.         if(line.length > row) {
  106.           newline = '';
  107.           words = line.split(' ');
  108.           for(j = 0; j < words.length; j++) {
  109.             word = words[j];
  110.             if(word.length > row) {
  111.               if(newline) {
  112.                 text += prefix + newline + 'n';
  113.                 newline = '';
  114.               }
  115.               text += prefix + word + 'n';
  116.             }
  117.             else if(newline.length + word.length > row) {
  118.               newline.replace(/ +$/, '');
  119.               text += prefix + newline + 'n';
  120.               newline = word + ' ';
  121.             }
  122.             else newline += word + ' ';
  123.           }
  124.           newline.replace(/ +$/, '');
  125.           text += prefix + newline + 'n';
  126.         }
  127.         else {
  128.           line.replace(/ +$/, '');
  129.           text += prefix + line + 'n';
  130.         }
  131.       }
  132.     }
  133.     return text.replace(/n$/, '');
  134.   }
  135.   this.initEditor = function(content) {
  136.     if(this.editor = this.getEditor()) {
  137.       var html = '<html><head><style> ' +
  138.                  'BODY { ' +
  139.                  'margin: 4px; ' +
  140.                  'background-color: ' + this.textBGColor + '; ' +
  141.                  '} ' +
  142.                  'BODY, TD, TH { ' +
  143.                  'color: #000000; ' +
  144.                  'font-family: ' + this.textFont + '; ' +
  145.                  'font-size: ' + this.textFontSize + 'px; ' +
  146.                  '} ' +
  147.                  'TD { border: 1px dashed #C0C0C0; } ' +
  148.                  'P { margin: 0px; } ' +
  149.                  '</style></head>' +
  150.                  '<body>' +
  151.                  content.replace(/<STYLE>[^<]+</STYLE>(r?n)*/gi, '') +
  152.                  '</body></html>';
  153.       this.editor.document.designMode = 'on';
  154.       if(GK) this.editor.document.execCommand('useCSS', false, false);
  155.       this.editor.document.open();
  156.       this.editor.document.write(this.wordWrap(html));
  157.       this.editor.document.close();
  158.       if(this.setFocus) this.editor.focus();
  159.       for(var i = document.forms.length - 1; i > 0 && !this.field; i--) {
  160.         if(document.forms[i].elements[this.fieldName + this.id]) {
  161.           this.field = document.forms[i].elements[this.fieldName + this.id];
  162.         }
  163.       }
  164.       rtoSetUnselectable(rtoGetObj('rtoEditor' + this.id));
  165.     }
  166.     else alert(txtNoRichEdit);
  167.   }
  168.   this.setButtonStyle = function(name, cls) {
  169.     var obj = rtoGetObj(name + this.id);
  170.     if(obj) obj.className = cls + this.id;
  171.     obj = rtoGetObj(name + 'Arrow' + this.id);
  172.     if(obj) obj.className = cls + this.id;
  173.   }
  174.   this.pickColor = function(color, mode) {
  175.     var obj = rtoGetObj('dlg' + mode);
  176.     if(obj) obj.style.visibility = 'hidden';
  177.     obj = rtoGetObj('cur' + mode + this.id);
  178.     if(obj) {
  179.       obj.style.backgroundColor = color;
  180.       if(mode == 'FontColor') this.curFontColor = color;
  181.       else this.curBGColor = color;
  182.     }
  183.     this.setColor(mode);
  184.   }
  185.   this.setColor = function(mode) {
  186.     if(mode == 'FontColor') this.fnExec('foreColor', this.curFontColor);
  187.     else this.fnExec((GK ? 'hiliteColor' : 'backColor'), this.curBGColor);
  188.   }
  189.   this.changeColor = function(mode) {
  190.     document.forms['f' + mode].id.value = this.id;
  191.     this.viewDialog(mode);
  192.   }
  193.   this.viewDialog = function(mode) {
  194.     var obj = rtoGetObj('dlg' + mode);
  195.     if(obj) {
  196.       if(IE) {
  197.         this.editor.focus();
  198.         this.curSelection = this.editor.document.selection.createRange();
  199.       }
  200.       if(obj.style.visibility == 'visible') obj.style.visibility = 'hidden';
  201.       else {
  202.         var obj2 = rtoGetObj('dlgBGColor');
  203.         obj2.style.visibility = 'hidden';
  204.         obj2 = rtoGetObj('dlgFontColor');
  205.         obj2.style.visibility = 'hidden';
  206.         obj2 = rtoGetObj('dlgImage');
  207.         obj2.style.visibility = 'hidden';
  208. obj2 = rtoGetObj('dlgCode');
  209.         obj2.style.visibility = 'hidden';
  210.         var wdth = hght = 0;
  211.         var top = mouseY;
  212.         var left = mouseX;
  213.         if(document.getElementById) {
  214.           wdth = obj.offsetWidth;
  215.           hght = obj.offsetHeight;
  216.         }
  217.         else if(IE) {
  218.           wdth = obj.style.pixelWidth;
  219.           hght = obj.style.pixelHeight;
  220.         }
  221.         rtoGetWinXY();
  222.         if(left + wdth - scrLeft > winX) left = winX + scrLeft - wdth;
  223.         if(top + hght - scrTop > winY) top = winY + scrTop - hght - 20;
  224.         obj.style.left = (left - 50) + 'px';
  225.         obj.style.top = top + 'px';
  226.         obj.style.visibility = 'visible';
  227. if(mode.indexOf('Code') == -1){
  228. }
  229.         if(mode.indexOf('Color') == -1) {
  230.           document.forms['f' + mode].elements[1].focus();
  231.           if(mode == 'Image') document.fImage.URL.value = 'http://';
  232.         }
  233.       }
  234.     }
  235.   }
  236.   this.fnExec = function(command, option) {
  237.     if(this.editor) {
  238.       if(option == 'removeFormat') {
  239.         command = option;
  240.         option = null;
  241.       }
  242.       try {
  243.         this.editor.document.execCommand(command, false, option);
  244.       }
  245.       catch(e) {
  246.         alert(command + ": not supported");
  247.       }
  248.       this.editor.focus();
  249.     }
  250.   }
  251.   this.doCmd = function(cmd, opt) {
  252.     if(IE && !this.curSelection) {
  253.       this.editor.focus();
  254.       this.curSelection = this.editor.document.selection.createRange();
  255.     }
  256.     if(cmd && opt) {
  257.       if(cmd == 'insertHTML' && IE) this.curSelection.pasteHTML(opt);
  258.       else this.fnExec(cmd, opt);
  259.     }
  260.     else if(cmd) this.fnExec(cmd);
  261.     if(IE) this.curSelection = 0;
  262.   }
  263.   this.insertLink = function() {
  264.     if(IE) this.doCmd('createLink');
  265.     else {
  266.       var url = prompt('URL:', 'http://');
  267.       if(url && url != 'http://') this.doCmd('createLink', url);
  268.     }
  269.   }
  270.   this.insertImage = function() {
  271.     document.fImage.id.value = this.id;
  272.     this.viewDialog('Image');
  273.   }
  274.    this.insertCode = function() {
  275.     document.fCode.id.value = this.id;
  276.     this.viewDialog('Code');
  277.   }
  278.    this.createImage = function() {
  279.     var obj = rtoGetObj('dlgImage');
  280.     if(obj) obj.style.visibility = 'hidden';
  281.     var f = document.fImage;
  282.     if(f.URL.value && f.URL.value != 'http://') {
  283.       if(this.curSelection) this.doCmd('insertHTML', '<IMG src="' + f.URL.value + '">');
  284.       else this.doCmd('insertImage', f.URL.value);
  285.     }
  286.   }
  287.   this.createCode = function() {
  288.     var obj = rtoGetObj('dlgCode');
  289.     if(obj) obj.style.visibility = 'hidden';
  290.     var f = document.fCode;
  291.     var type = f.CTYPE.value;
  292. var code = f.CCODE.value;
  293.  if(code) {
  294. code = code.replace(new RegExp("<","g"),"&lt;"); 
  295. code = code.replace(new RegExp(">","g"),"&gt;"); 
  296.     var html = '<pre class="brush: '+type+';">'+code+'</pre>';
  297. this.doCmd('insertHTML', html);
  298.  }
  299. f.CCODE.value = "";
  300.   }
  301.   this.toggleSource = function() {
  302.     var s = rtoGetObj(this.fieldName + this.id);
  303.     var r = rtoGetObj('rtoIFrame' + this.id);
  304.     var t = rtoGetObj('rtoToolBar' + this.id);
  305.     var b = rtoGetObj('rtoButton' + this.id);
  306.     this.store(true);
  307.     if(this.source) {
  308.       this.source = false;
  309.       s.style.visibility = 'hidden';
  310.       t.style.visibility = 'visible';
  311.       r.style.width = this.textWidth + 'px';
  312.       r.style.visibility = 'visible';
  313.       this.editor.focus();
  314.       b.value = txtViewSource;
  315.     }
  316.     else {
  317.       this.source = true;
  318.       t.style.visibility = 'hidden';
  319.       r.style.visibility = 'hidden';
  320.       r.style.width = '0px';
  321.       s.style.visibility = 'visible';
  322.       s.focus();
  323.       b.value = txtViewEditor;
  324.     }
  325.   }
  326. this.store = function(view) {
  327. if(this.field) {
  328. if(this.source){
  329. this.editor.document.body.innerHTML = this.field.value;
  330. }else{
  331. var content = this.editor.document.body.innerHTML;
  332. content = content.replace(/<br>/g, "n");
  333. if(content && IE && DM && !view){
  334. content = '<style> P { margin: 0px; } </style>n' + content;
  335. this.field.value = content;
  336. }
  337. }
  338.  }
  339.   this.buildEditor = function() {
  340.     document.writeln('<style> ' +
  341.                      '#rtoEditor' + this.id + ' { ' +
  342.                      'position: relative; ' +
  343.                      'background-color: ' + this.editorBGColor + '; ' +
  344.                      'width: ' + (this.textWidth + (IE ? 20 : 12)) + 'px; ' +
  345.                      'margin: 0px; ' +
  346.                      'padding: 4px; ' +
  347.                      'border: ' + this.editorBorder + '; ' +
  348.                      'text-align: left; ' +
  349.                      '} ' +
  350.                      '.cssIFrame' + this.id + ' { ' +
  351.                      'margin: 2px; ' +
  352.                      'padding: 0px; ' +
  353.                      'width: ' + this.textWidth + 'px; ' +
  354.                      'height: ' + this.textHeight + 'px; ' +
  355.                      'border: ' + this.textBorder + '; ' +
  356.                      '} ' +
  357.                      '.cssToolBar' + this.id + ' { ' +
  358.                      'background-color: ' + this.editorBGColor + '; ' +
  359.                      'border: 1px solid ' + this.editorBGColor + '; ' +
  360.                      'padding: 2px; ' +
  361.                      '} ' +
  362.                      '.cssRaised' + this.id + ' { ' +
  363.                      'border-top: 1px solid buttonhighlight; ' +
  364.                      'border-left: 1px solid buttonhighlight; ' +
  365.                      'border-bottom: 1px solid buttonshadow; ' +
  366.                      'border-right: 1px solid buttonshadow; ' +
  367.                      'background-color: ' + this.editorBGColor + '; ' +
  368.                      'padding: 2px; ' +
  369.                      '} ' +
  370.                      '.cssPressed' + this.id + ' { ' +
  371.                      'border-top: 1px solid buttonshadow; ' +
  372.                      'border-left: 1px solid buttonshadow; ' +
  373.                      'border-bottom: 1px solid buttonhighlight; ' +
  374.                      'border-right: 1px solid buttonhighlight; ' +
  375.                      'background-color: ' + this.editorBGColor + '; ' +
  376.                      'padding-left: 3px; ' +
  377.                      'padding-top: 3px; ' +
  378.                      'padding-bottom: 1px; ' +
  379.                      'padding-right: 1px; ' +
  380.                      '} ' +
  381.                      '.cssSource' + this.id + ' { ' +
  382.                      'position: absolute; ' +
  383.                      'top: 0px; ' +
  384.                      'left: 0px; ' +
  385.                      'margin: 6px; ' +
  386.                      'width: ' + (this.textWidth + 4) + 'px; ' +
  387.                      'height: ' + (this.textHeight + 27) + 'px; ' +
  388.                      'font-family: Courier New, Courier, Monospace; ' +
  389.                      'font-size: 12px; ' +
  390.                      'background-color: ' + this.textBGColor + '; ' +
  391.                      'border: ' + this.textBorder + '; ' +
  392.                      'visibility: hidden; ' +
  393.                      '} ' +
  394.                      '#rtoButton' + this.id + ' { ' +
  395.                      'font-family: Verdana, Arial, Helvetica; ' +
  396.                      'font-size: 11px; ' +
  397.                      'font-weight: bold; ' +
  398.                      'background-color: ' + this.editorBGColor + '; ' +
  399.                      '} ' +
  400.                      '#curBGColor' + this.id + ' { ' +
  401.                      'width: 16px; ' +
  402.                      'height: 4px; ' +
  403.                      'font-size: 1px; ' +
  404.                      'background-color: #FFFF00; ' +
  405.                      '} ' +
  406.                      '#curFontColor' + this.id + ' { ' +
  407.                      'width: 16px; ' +
  408.                      'height: 4px; ' +
  409.                      'font-size: 1px; ' +
  410.                      'background-color: #000000; ' +
  411.                      '} ' +
  412.                      '</style>');
  413.     document.writeln('<div id="rtoEditor' + this.id + '">');
  414.     document.writeln('<div id="rtoToolBar' + this.id + '">');
  415.     document.writeln('<table border=0 cellspacing=1 cellpadding=0><tr align=center>' +
  416.                      '<td></td>');
  417.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('justifyLeft')" title="' + txtJustifyLeft + '"><img src="' + this.iconPath + '/justify_left.gif" width=16 height=16></td>');
  418.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('justifyCenter')" title="' + txtJustifyCenter + '"><img src="' + this.iconPath + '/justify_center.gif" width=16 height=16></td>');
  419.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('justifyRight')" title="' + txtJustifyRight + '"><img src="' + this.iconPath + '/justify_right.gif" width=16 height=16></td>');
  420.   
  421.     document.writeln('<td><div style="width:0px; height:15px; border:1px inset #FFFFFF"></div></td>');
  422.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('insertOrderedList')" title="' + txtOrderedList + '"><img src="' + this.iconPath + '/ol.gif" width=16 height=16></td>');
  423.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('insertUnorderedList')" title="' + txtUnorderedList + '"><img src="' + this.iconPath + '/ul.gif" width=16 height=16></td>');
  424.   
  425.     document.writeln('<td><div style="width:0px; height:15px; border:1px inset #FFFFFF"></div></td>');
  426.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('insertHorizontalRule')" title="' + txtInsertHR + '"><img src="' + this.iconPath + '/hrule.gif" width=16 height=16></td>');
  427.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].insertImage()" title="' + txtInsertImage + '"><img src="' + this.iconPath + '/image.gif" width=16 height=16></td>');
  428.   document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('bold')" title="' + txtBold + '"><img src="' + this.iconPath + '/bold.gif" width=16 height=16></td>');
  429.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('italic')" title="' + txtItalic + '"><img src="' + this.iconPath + '/italic.gif" width=16 height=16></td>');
  430.     document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].doCmd('underline')" title="' + txtUnderline + '"><img src="' + this.iconPath + '/underline.gif" width=16 height=16></td>');
  431.       document.writeln('<td id="btnBGColor' + this.id + '" class="cssToolBar' + this.id + '" onMouseOver="rto[' + this.id + '].setButtonStyle('btnBGColor', 'cssRaised')" onMouseOut="rto[' + this.id + '].setButtonStyle('btnBGColor', 'cssToolBar')" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].setColor('BGColor')"><img src="' + this.iconPath + '/bgcolor.gif" width=16 height=12><div id="curBGColor' + this.id + '"></div></td>');
  432.     document.writeln('<td id="btnBGColorArrow' + this.id + '" class="cssToolBar' + this.id + '" onMouseOver="rto[' + this.id + '].setButtonStyle('btnBGColor', 'cssRaised')" onMouseOut="rto[' + this.id + '].setButtonStyle('btnBGColor', 'cssToolBar')" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].changeColor('BGColor')"><img src="' + this.iconPath + '/arrow.gif" width=5 height=16></td>');
  433.        document.writeln('<td id="btnFontColor' + this.id + '" class="cssToolBar' + this.id + '" onMouseOver="rto[' + this.id + '].setButtonStyle('btnFontColor', 'cssRaised')" onMouseOut="rto[' + this.id + '].setButtonStyle('btnFontColor', 'cssToolBar')" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].setColor('FontColor')"><img src="' + this.iconPath + '/color.gif" width=16 height=12><div id="curFontColor' + this.id + '"></div></td>');
  434.     document.writeln('<td id="btnFontColorArrow' + this.id + '" class="cssToolBar' + this.id + '" onMouseOver="rto[' + this.id + '].setButtonStyle('btnFontColor', 'cssRaised')" onMouseOut="rto[' + this.id + '].setButtonStyle('btnFontColor', 'cssToolBar')" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].changeColor('FontColor')"><img src="' + this.iconPath + '/arrow.gif" width=5 height=16></td>');
  435.   document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].insertLink()" title="' + txtHyperlink + '"><img src="' + this.iconPath + '/link.gif" width=16 height=16></td>');
  436.    document.writeln('<td class="cssToolBar' + this.id + '" width=20 height=20 onMouseOver="this.className='cssRaised' + this.id + ''" onMouseOut="this.className='cssToolBar' + this.id + ''" onMouseDown="this.className='cssPressed' + this.id + ''" onMouseUp="this.className='cssRaised' + this.id + ''" onClick="rto[' + this.id + '].insertCode()" title="Code"><img src="' + this.iconPath + '/code.gif" width=16 height=16></td>');
  437.  document.writeln('<td><select class="cssFormField" onChange="rto[' + this.id + '].doCmd('fontName', this[this.selectedIndex].value); this.selectedIndex=0">' +
  438.                      '<option style="color:#C0C0C0">' + txtFont + ':' +
  439.                      '<option value="Arial, Helvetica">Arial' +
  440.                      '<option value="Verdana, Arial, Helvetica">Verdana' +
  441.                      '<option value="Times New Roman, Times, Serif">Times' +
  442.                      '<option value="Comic Sans MS">Comic' +
  443.                      '<option value="MS Sans Serif, sans-serif">Sans-Serif' +
  444.                      '<option value="Courier New, Courier, Monospace">Courier' +
  445.                      '<option value="Trebuchet MS, Arial, Helvetica">Trebuchet' +
  446.                      '</select></td>');
  447.     document.writeln('<td><select class="cssFormField" onChange="rto[' + this.id + '].doCmd('fontSize', this[this.selectedIndex].text); this.selectedIndex=0">' +
  448.                      '<option style="color:#C0C0C0">' + txtSize + ':' +
  449.                      '<option value="1">1' +
  450.                      '<option value="2">2' +
  451.                      '<option value="3">3' +
  452.                      '<option value="4">4' +
  453.                      '<option value="5">5' +
  454.                      '<option value="6">6' +
  455.                      '<option value="7">7' +
  456.                      '</select></td>');
  457. document.writeln('</tr></table>');
  458.     document.writeln('<div style="border:1px inset #FFFFFF"></div>');
  459.     document.writeln('</div>');
  460.     document.writeln('<iframe id="rtoIFrame' + this.id + '" frameborder=0 class="cssIFrame' + this.id + '"></iframe>');
  461.     document.writeln('<textarea name="' + this.fieldName + this.id + '" id="' + this.fieldName + this.id + '" class="cssSource' + this.id + '" wrap=virtual></textarea>');
  462.     document.writeln('<center><input type=button id="rtoButton' + this.id + '" value="' + txtViewSource + '" onClick="rto[' + this.id + '].toggleSource()"></center>');
  463.     document.writeln('</div>');
  464.   }
  465.   this.create = function(content) {
  466.     if(content == null) content = '';
  467.     this.id = rto.length;
  468.     if(rto[this.id] = this) {
  469.       if((IE || GK) && DM) {
  470.         this.buildEditor();
  471.         this.initEditor(content);
  472.       }
  473.       else {
  474.         var cols = Math.round(this.textWidth / 10);
  475.         var rows = Math.round(this.textHeight / 20);
  476.         document.write('<textarea name="' + this.fieldName + this.id + '" style="' +
  477.                        'margin-bottom: 4px; ' +
  478.                        'padding: 4px; ' +
  479.                        'background-color: ' + this.textBGColor + '; ' +
  480.                        'border: ' + this.textBorder +
  481.                        '" cols=' + cols + ' rows=' + rows + ' wrap=virtual>' + content +
  482.                        '</textarea>');
  483.       }
  484.     }
  485.     else alert(txtCreateError);
  486.   }
  487.   this.barGraph = function(values, labels, bColor, lColor, showVal, legend, bSize, bBorder, bLen) {
  488.     showVal = parseInt(showVal);
  489.     var colors = new Array('#0000FF', '#FF0000', '#00E000', '#A0A0FF', '#FFA0A0', '#00A000');
  490.     var d = (typeof(values) == 'string') ? this.makeArray(values) : values;
  491.     if(labels) var r = (typeof(labels) == 'string') ? this.makeArray(labels) : labels;
  492.     else var r = new Array();
  493.     var label = graph = '';
  494.     var percent = 0;
  495.     if(bColor) var drf = (typeof(bColor) == 'string') ? this.makeArray(bColor) : bColor;
  496.     else var drf = new Array();
  497.     var drw, val = new Array();
  498.     var bc = new Array();
  499.     if(lColor) {
  500.       if(lColor.indexOf(',') != -1) var lc = lColor.split(',');
  501.       else {
  502.         lColor = lColor.replace(/s+/g, ' ');
  503.         var lc = lColor.split(' ');
  504.       }
  505.     }
  506.     else var lc = new Array();
  507.     if(lc[0]) lc[0] = lc[0].replace(/s+/, '');
  508.     else lc[0] = '#C0E0FF';
  509.     if(lc[1]) lc[1] = lc[1].replace(/s+/, '');
  510.     var bars = (d.length > r.length) ? d.length : r.length;
  511.     if(legend) graph += '<table border=0 cellspacing=0 cellpadding=0><tr valign=top><td>';
  512.     var sum = max = max_neg = max_dec = ccnt = lcnt = 0;
  513.     for(var i = 0; i < bars; i++) {
  514.       if(typeof(d[i]) == 'string') drw = d[i].split(';');
  515.       else {
  516.         drw = new Array();
  517.         drw[0] = d[i];
  518.       }
  519.       val[lcnt] = new Array();
  520.       for(var j = v = 0; j < drw.length; j++) {
  521.         val[lcnt][j] = v = drw[j] ? parseFloat(drw[j]) : 0;
  522.         if(v > max) max = v;
  523.         else if(v < max_neg) max_neg = v;
  524.         if(v < 0) v *= -1;
  525.         sum += v;
  526.         v = v.toString();
  527.         if(v.indexOf('.') != -1) {
  528.           v = v.substr(v.indexOf('.') + 1);
  529.           dec = v.length;
  530.           if(dec > max_dec) max_dec = dec;
  531.         }
  532.         if(!bc[j]) {
  533.           if(ccnt >= colors.length) ccnt = 0;
  534.           bc[j] = (!drf[j] || drf[j].length < 3) ? colors[ccnt++] : drf[j];
  535.         }
  536.       }
  537.       lcnt++;
  538.     }
  539.     if(!showVal) showVal = 0;
  540.     if(!bBorder) bBorder = '2px outset #FFFFFF';
  541.     if(!bSize) bSize = 15;
  542.     if(!bLen) bLen = 1.0;
  543.     else if(bLen < 0.1) bLen = 0.1;
  544.     else if(bLen > 2.9) bLen = 2.9;
  545.     var border = parseInt(bBorder);
  546.     var mPerc = sum ? Math.round(max * 100 / sum) : 0;
  547.     var mul = mPerc ? 100 / mPerc : 1;
  548.     mul *= bLen;
  549.     if(showVal < 2) var valSpace = 25;
  550.     else var valSpace = 0;
  551.     var spacer = maxSize = Math.round(mPerc * mul + valSpace + border * 2);
  552.     if(max_neg) {
  553.       var mPerc_neg = sum ? Math.round(-max_neg * 100 / sum) : 0;
  554.       var spacer_neg = Math.round(mPerc_neg * mul + valSpace + border * 2);
  555.       maxSize += spacer_neg;
  556.     }
  557.     graph += '<table border=0 cellspacing=2 cellpadding=0>';
  558.     for(i = 0; i < val.length; i++) {
  559.       label = (i < r.length) ? r[i] : i+1;
  560.       graph += '<tr><td rowspan=' + val[i].length + ' bgcolor=' + lc[0] + ' align=center style="font:10px Verdana,Arial,Helvetica">';
  561.       graph += '&nbsp;' + label + '&nbsp;</td>';
  562.       for(j = 0; j < val[i].length; j++) {
  563.         percent = sum ? val[i][j] * 100 / sum : 0;
  564.         if(showVal == 1 || showVal == 2) {
  565.           graph += this.showValue(val[i][j], max_dec, lc[0], 0, 'right');
  566.         }
  567.         if(percent < 0) {
  568.           percent *= -1;
  569.           graph += '<td bgcolor=' + lc[0] + ' align=right nowrap>';
  570.           if(showVal < 2) graph += '<div style="float:left; font:10px Verdana,Arial,Helvetica">' + Math.round(percent) + '%&nbsp;</div>';
  571.           graph += '<div style="float:left; border:' + bBorder + '; background-color:' + bc[j] + '">';
  572.           graph += '<img width=0 height=' + bSize + '><img height=0 width=' + Math.round(percent * mul) + '></div>';
  573.           graph += '</td><td' + (lc[1] ? ' bgcolor=' + lc[1] : '') + '>&nbsp;</td>';
  574.         }
  575.         else {
  576.           if(max_neg) graph += '<td style="background-color:' + lc[0] + '">&nbsp;</td>';
  577.           graph += '<td' + (lc[1] ? ' bgcolor=' + lc[1] : '') + ' nowrap style="font:10px Verdana,Arial,Helvetica">';
  578.           if(percent) {
  579.             graph += '<div style="float:left; border:' + bBorder + '; background-color:' + bc[j] + '">';
  580.             graph += '<img height=0 width=' + Math.round(percent * mul) + '><img width=0 height=' + bSize + '></div>';
  581.           }
  582.           else graph += '<div style="float:left; border-width:' + border + 'px"><img width=0 height=' + bSize + '></div>';
  583.           if(showVal < 2) graph += '<div style="float:left; font:10px Verdana,Arial,Helvetica">&nbsp;' + Math.round(percent) + '%</div>';
  584.           graph += '</td>';
  585.         }
  586.         graph += '</tr>';
  587.       }
  588.     }
  589.     graph += '</table>';
  590.     if(legend) {
  591.       graph += '</td><td width=10>&nbsp;</td><td><div style="padding:4px; background-color:#F0F0F0; border:1px solid #808080">';
  592.       var l = (typeof(legend) == 'string') ? this.makeArray(legend) : legend;
  593.       for(i = 0; i < bc.length; i++) {
  594.         graph += '<span style="font:8px Arial,Helvetica; background-color:' + bc[i] + '; border:' + bBorder + '; height:15px"><img width=10 height=0></span>';
  595.         graph += '&nbsp;<span style="height:15px; font:10px Verdana,Arial,Helvetica">' + (l[i] ? l[i] : '') + '</span><br>';
  596.       }
  597.       graph += '</div></td></tr></table>';
  598.     }
  599.     return graph;
  600.   }
  601.   this.makeArray = function(str) {
  602.     var arr = new Array();
  603.     if(str.indexOf(',') != -1) {
  604.       arr = str.split(',');
  605.       for(var i = 0; i < arr.length; i++) {
  606.         arr[i] = arr[i].replace(/^s+/, '');
  607.         arr[i] = arr[i].replace(/s+$/, '');
  608.       }
  609.     }
  610.     else {
  611.       str = str.replace(/s+/g, ' ');
  612.       arr = str.split(' ');
  613.     }
  614.     return arr;
  615.   }
  616.   this.formatValue = function(val, dec) {
  617.     if(val < 0) {
  618.       var neg = true;
  619.       val *= -1;
  620.     }
  621.     else var neg = false;
  622.     var v = (Math.round(val * Math.pow(10, dec))).toString();
  623.     if(v.length <= dec) for(var i = 0; i < dec - v.length + 1; i++) v = '0' + v;
  624.     v = v.substr(0, v.length - dec) + '.' + v.substr(v.length - dec);
  625.     if(v.substr(0, 1) == '.') v = '0' + v;
  626.     if(neg) v = '-' + v;
  627.     return v;
  628.   }
  629.   this.showValue = function(val, max_dec, color, sum, align) {
  630.     val = max_dec ? this.formatValue(val, max_dec) : val;
  631.     if(sum) sum = max_dec ? this.formatValue(sum, max_dec) : sum;
  632.     value = '<td bgcolor=' + color;
  633.     if(align) value += ' align=' + align;
  634.     value += ' nowrap style="font:10px Verdana,Arial,Helvetica">';
  635.     value += '&nbsp;' + val + (sum ? ' / ' + sum : '') + '&nbsp;</td>';
  636.     return value;
  637.   }
  638. }
  639. //---------------------------------------------------------------------------------------------------------
  640. // Global functions
  641. //---------------------------------------------------------------------------------------------------------
  642. function buildColorChart(mode) {
  643.   var c = new Array();
  644.   // red
  645.   c[0] = new Array('FFEEEE', 'FFCCCC', 'FFAAAA', 'FF8888', 'FF6666', 'FF4444', 'FF2222', 'FF0000',
  646.                    'EE0000', 'CC0000', 'AA0000', '880000', '770000', '660000', '550000', '440000', '330000');
  647.   // green
  648.   c[1] = new Array('EEFFEE', 'CCFFCC', 'AAFFAA', '88FF88', '66FF66', '44FF44', '22FF22', '00FF00',
  649.                    '00EE00', '00CC00', '00AA00', '008800', '007700', '006600', '005500', '004400', '003300');
  650.   // blue
  651.   c[2] = new Array('EEEEFF', 'CCCCFF', 'AAAAFF', '8888FF', '6666FF', '4444FF', '2222FF', '0000FF',
  652.                    '0000EE', '0000CC', '0000AA', '000088', '000077', '000066', '000055', '000044', '000033');
  653.   // yellow
  654.   c[3] = new Array('FFFFEE', 'FFFFCC', 'FFFFAA', 'FFFF88', 'FFFF66', 'FFFF44', 'FFFF22', 'FFFF00',
  655.                    'EEEE00', 'CCCC00', 'AAAA00', '888800', '777700', '666600', '555500', '444400', '333300');
  656.   // pink
  657.   c[4] = new Array('FFEEFF', 'FFCCFF', 'FFAAFF', 'FF88FF', 'FF66FF', 'FF44FF', 'FF22FF', 'FF00FF',
  658.                    'EE00EE', 'CC00CC', 'AA00AA', '880088', '770077', '660066', '550055', '440044', '330033');
  659.   // brown
  660.   c[5] = new Array('FFF0D0', 'FFEECC', 'FFEEBB', 'FFDDAA', 'FFCC99', 'FFC090', 'EEBB88', 'DDAA77',
  661.                    'CC9966', 'BB8855', 'AA7744', '886633', '775522', '664411', '553300', '442200', '331100');
  662.   // cyan
  663.   c[6] = new Array('EEFFFF', 'CCFFFF', 'AAFFFF', '88FFFF', '66FFFF', '44FFFF', '22FFFF', '00FFFF',
  664.                    '00EEEE', '00CCCC', '00AAAA', '008888', '007777', '006666', '005555', '004444', '003333');
  665.   // grey
  666.   c[7] = new Array('FFFFFF', 'EEEEEE', 'DDDDDD', 'CCCCCC', 'BBBBBB', 'AAAAAA', 'A0A0A0', '999999',
  667.                    '888888', '777777', '666666', '555555', '444444', '333333', '222222', '111111', '000000');
  668.   var html = '<table border=0 cellspacing=1 cellpadding=0 bgcolor=#808080>';
  669.   var style, i, j;
  670.   for(i = 0; i < c.length; i++) {
  671.     html += '<tr>';
  672.     for(j = 0; j < c[i].length; j++) {
  673.       style = 'width:14px; height:14px; font-size:1px; cursor:hand; background-color:#' + c[i][j];
  674.       html += '<td width=14 height=14 bgcolor=#' + c[i][j] + '>' +
  675.               '<a href="javascript:rto[document.f' + mode + '.id.value].pickColor('#' + c[i][j] + '', '' + mode + '')" ' +
  676.               'title="#' + c[i][j] + '"><div style="' + style + '"></div></a></td>';
  677.     }
  678.     html += '</tr>';
  679.   }
  680.   html += '</table>';
  681.   return html;
  682. }
  683. function rtoGetObj(id) {
  684.   var obj = false;
  685.   if(document.getElementById) obj = document.getElementById(id);
  686.   else if(document.all) obj = document.all[id];
  687.   return obj;
  688. }
  689. function rtoSetUnselectable(elm) {
  690.   if(document.getElementsByTagName) {
  691.     if(elm && typeof(elm.tagName) != 'undefined') {
  692.       if(elm.tagName != 'INPUT' && elm.tagName != 'TEXTAREA' && elm.tagName != 'IFRAME') {
  693.         if(elm.hasChildNodes()) {
  694.           for(var i = 0; i < elm.childNodes.length; i++) {
  695.             rtoSetUnselectable(elm.childNodes[i]);
  696.           }
  697.         }
  698.         elm.unselectable = true;
  699.       }
  700.     }
  701.   }
  702. }
  703. function rtoStore() {
  704.   for(var i = 0; i < rto.length; i++) rto[i].store(false);
  705. }
  706. function rtoGetScrollLeft() {
  707.   var scrLeft = 0;
  708.   if(window.pageXOffset) scrLeft = window.pageXOffset;
  709.   else if(document.documentElement && document.documentElement.scrollLeft)
  710.     scrLeft = document.documentElement.scrollLeft;
  711.   else if(document.body && document.body.scrollLeft)
  712.     scrLeft = document.body.scrollLeft;
  713.   return scrLeft;
  714. }
  715. function rtoGetScrollTop() {
  716.   var scrTop = 0;
  717.   if(window.pageYOffset) scrTop = window.pageYOffset;
  718.   else if(document.documentElement && document.documentElement.scrollTop)
  719.     scrTop = document.documentElement.scrollTop;
  720.   else if(document.body && document.body.scrollTop)
  721.     scrTop = document.body.scrollTop;
  722.   return scrTop;
  723. }
  724. function rtoGetWinXY() {
  725.   if(window.innerWidth) {
  726.     winX = window.innerWidth;
  727.     winY = window.innerHeight;
  728.   }
  729.   else if(document.documentElement && document.documentElement.clientWidth) {
  730.     winX = document.documentElement.clientWidth;
  731.     winY = document.documentElement.clientHeight;
  732.   }
  733.   else if(document.body && document.body.clientWidth) {
  734.     winX = document.body.clientWidth;
  735.     winY = document.body.clientHeight;
  736.   }
  737.   else {
  738.     winX = screen.width;
  739.     winY = screen.height;
  740.   }
  741.   scrLeft = rtoGetScrollLeft();
  742.   scrTop = rtoGetScrollTop();
  743. }
  744. function rtoGetMouse(e) {
  745.   if(e && e.pageX != null) {
  746.     mouseX = e.pageX;
  747.     mouseY = e.pageY;
  748.   }
  749.   else if(event && event.clientX != null) {
  750.     mouseX = event.clientX + rtoGetScrollLeft();
  751.     mouseY = event.clientY + rtoGetScrollTop();
  752.   }
  753. }
  754. document.onmousedown = rtoGetMouse;
  755. //---------------------------------------------------------------------------------------------------------
  756. // Global styles / dialog boxes
  757. //---------------------------------------------------------------------------------------------------------
  758. if((IE || GK) && DM) {
  759.   document.writeln('<style> ' +
  760.                    '.cssForm { ' +
  761.                    'text-align: left;'+
  762.                    'margin: 0px; ' +
  763.                    'padding: 4px; ' +
  764.                    'border: 2px groove #FFFFFF; ' +
  765.                    '} ' +
  766.                    '.cssDialog { ' +
  767.                    'text-align: left;'+
  768.                    'position: absolute; ' +
  769.                    'padding: 4px; ' +
  770.                    'z-index: 69; ' +
  771.                    'background-color: #E0E0E0; ' +
  772.                    'border: 2px groove #FFFFFF; ' +
  773.                    'text-align: center; ' +
  774.                    'visibility: hidden; ' +
  775.                    '} ' +
  776.                    '.cssFont1 { ' +
  777.                    'font-family: Verdana, Arial, Helvetica; ' +
  778.                    
  779.                    'font-size: 12px; ' +
  780.                    'font-weight: bold; ' +
  781.                    'margin-top: 0px; ' +
  782.                    'margin-bottom: 4px; ' +
  783.                    'padding: 2px; ' +
  784.                    'background-color: #F0F0F0; ' +
  785.                    'border: 2px groove #FFFFFF; ' +
  786.                    'white-space: nowrap; ' +
  787.                    '} ' +
  788.                    '.cssFont2 { ' +
  789.                    'text-align: left;'+
  790.                    'font-family: Verdana, Arial, Helvetica; ' +
  791.                    'font-size: 11px; ' +
  792.                    '} ' +
  793.                    '.cssFormField { ' +
  794.                    'font: menu; ' +
  795.                    'font-size: 12px; ' +
  796.                    'border: 2px groove #FFFFFF; ' +
  797.                    '} ' +
  798.                    '.cssButton { ' +
  799.                    'font-family: Verdana, Arial, Helvetica; ' +
  800.                    'font-size: 11px; ' +
  801.                    'font-weight: bold; ' +
  802.                    'width: 100px; ' +
  803.                    'margin-top: 4px; ' +
  804.                    'background-color: #D0D0D0; ' +
  805.                    '} ' +
  806.                    '</style>');
  807.   document.writeln('<div id="dlgBGColor" class="cssDialog"><center>' +
  808.                    '<p class="cssFont1">' + txtBGColor + '</p>' +
  809.                    '<form name="fBGColor" class="cssForm">' +
  810.                    '<input type=hidden name="id" value="">' +
  811.                    buildColorChart('BGColor') +
  812.                    '<input type=button value="' + txtCancel + '" class="cssButton" onClick="rto[document.fBGColor.id.value].viewDialog('BGColor')">' +
  813.                    '</form>' +
  814.                    '</center></div>');
  815.   document.writeln('<div id="dlgFontColor" class="cssDialog"><center>' +
  816.                    '<p class="cssFont1">' + txtFontColor + '</p>' +
  817.                    '<form name="fFontColor" class="cssForm">' +
  818.                    '<input type=hidden name="id" value="">' +
  819.                    buildColorChart('FontColor') +
  820.                    '<input type=button value="' + txtCancel + '" class="cssButton" onClick="rto[document.fFontColor.id.value].viewDialog('FontColor')">' +
  821.                    '</form>' +
  822.                    '</center></div>');
  823.   document.writeln('<div id="dlgImage" class="cssDialog"><center>' +
  824.                    '<p class="cssFont1">' + txtInsertImage + '</p>' +
  825.                    '<form name="fImage" class="cssForm" action="javascript:rto[document.fImage.id.value].createImage()">' +
  826.                    '<input type=hidden name="id" value="">' +
  827.                    '<table border=0 cellspacing=0>');
  828.   document.writeln('<tr><td class="cssFont2" nowrap>URL:</td><td>&nbsp;<input type=text name="URL" size=30 maxlength=100 class="cssFormField"></td></tr>');
  829.   document.writeln('</table>' +
  830.                    '<table border=0 cellspacing=0 cellpadding=0 width=230><tr>' +
  831.                    '<td><input type=button value="' + txtCancel + '" class="cssButton" onClick="rto[document.fImage.id.value].viewDialog('Image')"></td>' +
  832.                    '<td align=right><input type=submit value="OK" class="cssButton"></td>' +
  833.                    '</tr></table>' +
  834.                    '</form>' +
  835.                    '</center></div>');
  836.     document.writeln('<div id="dlgCode" class="cssDialog" style="{width:660px}"><center>' +
  837.                    '<p class="cssFont1">Insert Code</p>' +
  838.                    '<form name="fCode" class="cssForm" action="javascript:rto[document.fCode.id.value].createCode()">' +
  839.                    '<input type=hidden name="id" value="">' +
  840.                    '<table border=0 cellspacing=0>');
  841.   document.writeln('<tr><td class="cssFont2" nowrap>类型:</td><td>&nbsp;<select  name="CTYPE">');
  842.   document.writeln('<option value="java">java</option><option value="javascript">javascript</option><option value="cpp">cpp</option><option value="php">php</option>');
  843.   document.writeln('<option value="c">c</option><option value="html">html</option><option value="css">css</option><option value="as">as</option><option value="unkonw">unknow</option>');
  844.   document.writeln('</select></td></tr>');
  845.   document.writeln('<tr><td class="cssFont2" nowrap>代码:</td><td>&nbsp;<textarea type=text cols= "80" name="CCODE" size=30 style="width:600px;height:300px;"></textarea></td></tr>');
  846.   document.writeln('</table>' +
  847.                    '<table border=0 cellspacing=0 cellpadding=0 width=230><tr>' +
  848.                    '<td><input type=button value="' + txtCancel + '" class="cssButton" onClick="rto[document.fCode.id.value].viewDialog('Code')"></td>' +
  849.                    '<td align=right><input type=submit value="OK" class="cssButton"></td>' +
  850.                    '</tr></table>' +
  851.                    '</form>' +
  852.                    '</center></div>');
  853.   rtoSetUnselectable(rtoGetObj('dlgBGColor'));
  854.   rtoSetUnselectable(rtoGetObj('dlgFontColor'));
  855.   rtoSetUnselectable(rtoGetObj('dlgImage'));
  856. }
  857. //---------------------------------------------------------------------------------------------------------