/* $Date: 2009-12-02 14:48:53 +0100 (on, 02 dec 2009) $    $Revision: 5680 $ */

function AjaxTinyList(targetdiv, param) {

  if (!param) param = new Object();
  var thisref = this;
  var mainProp = new Object();
  var language = "sv";
  var editPermission = false;
  this.adddiv = null;
  this.hasPermission = new Object();

  if (typeof(targetdiv) != "object")
    targetdiv = $("#" + targetdiv);
  if (!targetdiv) return;

  this.init = function() {
    NFN.BasePage.HasEditPermission(_pageId, targetdiv.attr("id"), function(r){thisref.init1(r);});
  }

  this.init1 = function(response) {
    editPermission = response.value;
    if (editPermission) this.getControlInfo(function(){thisref.init2();});
    else this.init2();
  }

  this.init2 = function() {
    targetdiv.children().each(function(i) {
      new AjaxTiny($(this), param, null, thisref);
    });

    if (editPermission && this.hasPermission.add) {
      $("head").addCssFile("admin/jstools/ajaxtiny/ajaxtiny.css");
      this.adddiv = $("<div />").addClass("ajaxListToolbar").mouseover(function(){thisref.highlight(true);}).mouseout(function(){thisref.highlight(false);}).css({"display":"none"});
      var txt = this.translate("Lägg till element i listan") + " " + mainProp.name + "(" + mainProp.id + "). " + this.translate("Senast redigerat av") + " " + mainProp.modBy + " " + mainProp.modDate;
      this.adddiv.append(
        $("<a />").attr({href:"javascript:void(0)"}).click(thisref.addTiny).append(
          $('<img />').attr({src:'admin/gfx/add.gif', alt:txt, title:txt, border:'0'})
        )
      );
      targetdiv.prepend(this.adddiv);
      targetdiv.mouseover(function(){thisref.highlight(true);});
      targetdiv.mouseout(function(){thisref.highlight(false)});
    }
  }

  this.getControlInfo = function(callback) {
    NFN.BasePage.GetListControlInfo(_pageId, targetdiv.attr("id"), function(r) {thisref.getControlInfo2(r, callback)});
  }

  this.getControlInfo2 = function(response, callback) {
    if (response.error) {
      try { console.log("Error in GetListControlInfo: " + response.error.Message); } catch(e){};
      return;
    }

    mainProp.id = parseInt(response.value[0]);
    mainProp.name = response.value[1];
    mainProp.modDate = response.value[2];
    mainProp.modBy = response.value[3];

    this.hasPermission.isSysAdmin = response.value[4] == "y";
    this.hasPermission.add = response.value[5] == "y";
    this.hasPermission.del = response.value[6] == "y";
    language = response.value[7];

    if (callback) callback();
  }

  this.addTiny = function() {
    NFN.BasePage.AddTiny(_pageId, targetdiv.attr("id"), thisref.addTiny2);
  }

  this.addTiny2 = function(response) {
    var adiv = $("<div />").attr({id:response.value}).addClass("AjaxTiny");
    targetdiv.append(adiv);
    param.onInitDone = thisref.showChildEdit;
    new AjaxTiny(adiv, param, null, thisref);
  }

  this.showChildEdit = function(child) {
    child.viewdiv.css({"display":'block'});
  }

  this.highlight = function(hl) {
    this.adddiv.css({"display":(hl ? "block" : "none")});
  },

  this.deleteElement = function(elem) {
    NFN.BasePage.DeleteTiny(_pageId, targetdiv.attr("id"), elem.targetdiv.attr("id"), function(r){thisref.deleteElement2(elem.targetdiv);});
  }

  this.deleteElement2 = function(elemdiv) {
    elemdiv.remove();
  }

  this.translate = function(txt) {
    if (language == "sv") return txt;
    var response = NFN.BasePage.Translate(txt);
    return response.value;
  },

  this.init();
}


var ajaxtiny = new Array();

function AjaxTiny(targetdiv, param, propId, parentList) {

  if (!param) param = new Object();
  var styles = "";
  var hasTemplates = false;
  var language = "sv";
  var tl = null;
  var thisref = this;
  var editPermission = false;

  this.isChanged = false;
  var tinyIsReady = false;

  if (typeof(targetdiv) != "object")
    targetdiv = $("#" + targetdiv);
  if (!targetdiv) return;
  this.targetdiv = targetdiv;

  this.hasPermission = new Object();

  var mainProp = new Object();
  if (propId) mainProp.id = propId;
  else {
    try { mainProp.id = parseInt(targetdiv.attr("propid")); }
    catch(e) { mainProp.id = 0; }
    if (isNaN(mainProp.id)) mainProp.id = 0;
    mainProp.name = targetdiv.attr("id");
  }
  var tinyId = "tiny_" + targetdiv.attr("id");

  this.param = param;
  if (this.param == null) this.param = new Object();
  if (this.param.width == null) this.param.width = (targetdiv.outerWidth() == 0 ? 300 : targetdiv.outerWidth()+4) + "px";
  if (this.param.height == null) this.param.height = (targetdiv.outerHeight() == 0 ? 150 : targetdiv.outerHeight()+30) + "px";
  if (this.param.dateControlled == null) this.param.dateControlled = false;
  if (this.param.relativeUrls == null) this.param.relativeUrls = true;
  if (this.param.baseUrl == null) this.param.baseUrl = "/";
  if (this.param.convertUrls == null) this.param.convertUrls = true;
  if (this.param.css == null) this.param.css = '/css/base.css, /css/tiny.css';
  if (this.param.toolbarItems == null) this.param.toolbarItems = "";
  if (this.param.toolbarConfig == null) this.param.toolbarConfig = (this.param.toolbarItems.length == 0 ? "extended" : "custom");
  if (this.param.languageDependent == null) this.param.languageDependent = true;
  if (this.param.toolbarLocation == null) this.param.toolbarLocation = "external";
  if (this.param.draggableToolbar == null) this.param.draggableToolbar = false;
  if (this.param.contentByAjax == null) this.param.contentByAjax = false;
  if (this.param.fixParentOverflow == null) this.param.fixParentOverflow = true;
  if (this.param.useZipTiny == null) this.param.useZipTiny = false;
  if (this.param.onInitDone == null) this.param.onInitDone = null;
  if (this.param.beforeShowEditor == null) this.param.beforeShowEditor = null;
  if (this.param.beforeHideEditor == null) this.param.beforeHideEditor = null;
  if (this.param.afterShowEditor == null) this.param.afterShowEditor = null;
  if (this.param.afterHideEditor == null) this.param.afterHideEditor = null;
  if (this.param.validElements == null) this.param.validElements = "script[charset|defer|language|src|type]";
  if (this.param.debug == null) this.param.debug = false;

  this.init = function() {
    NFN.BasePage.HasEditPermission(_pageId, targetdiv.attr("id"), function(r){thisref.init1(r);});
  }

  this.init1 = function(response) {
    editPermission = response.value;
    if (targetdiv && (editPermission || this.param.contentByAjax))
      this.getControlInfo(this.param.contentByAjax, function(){thisref.init2();});
    else {
      this.statdiv = targetdiv;
      if (this.param.onInitDone) this.param.onInitDone(this);
    }
  }

  this.init2 = function(response) {
    if (this.hasPermission.edit) {
      $("head").addCssFile("admin/jstools/ajaxtiny/ajaxtiny.css");
      if (this.param.dateControlled) {
        $("head").addCssFile("admin/jstools/datetimepicker/skins/tiger/theme.css");
        $("head").addJsFile("admin/jstools/datetimepicker/calendar.js");
        $("head").addJsFile("admin/jstools/datetimepicker/lang/calendar-" + language + ".js");
      }
    }

    this.generateDOM(function(){thisref.init3();});
  }

  this.init3 = function() {
    if (this.param.onInitDone) this.param.onInitDone(this);
  }

  this.getControlInfo = function(getContent, callback) {
    NFN.BasePage.GetControlInfo(_pageId, mainProp.id, mainProp.name, getContent, function(r) {thisref.getControlInfo2(r, getContent, callback)});
  }

  this.getControlInfo2 = function(response, getContent, callback) {
    if (response.error) {
      try { console.log("Error in GetControlInfo: " + response.error.Message); } catch(e){};
      return;
    }
    if (!response.value) {
      try { console.log("Error in GetControlInfo: response is null."); } catch(e){};
      return;
    }

    var propInfo = response.value[0];
    var permInfo = response.value[1];
    var extraInfo = response.value[2];

    mainProp.id = parseInt(propInfo[0]);
    mainProp.name = propInfo[1];
    mainProp.modDate = propInfo[2];
    mainProp.modBy = propInfo[3];
    mainProp.publishedDate = propInfo[4];
    mainProp.publishedBy = propInfo[5];
    mainProp.isPublished = propInfo[6] == "y";
    mainProp.isVisible = propInfo[7] == "y";
    mainProp.isShared = propInfo[8] == "y";
    mainProp.canBeShared = propInfo[9] == "y";
    mainProp.isCommon = propInfo[10] == "y";
    mainProp.canBeCommon = propInfo[11] == "y";
    mainProp.startDate = propInfo[12];
    mainProp.endDate = propInfo[13];
    if (getContent)
      mainProp.value = propInfo[14];
    else
      mainProp.value = targetdiv.html();

    this.hasPermission.isSysAdmin = permInfo[0] == "y";
    this.hasPermission.edit = permInfo[1] == "y";
    this.hasPermission.publish = permInfo[2] == "y";
    this.hasPermission.show = permInfo[3] == "y";
    this.hasPermission.share = permInfo[4] == "y";
    this.hasPermission.restore = permInfo[5] == "y";
    this.hasPermission.Paragraph = permInfo[6] == "y";
    this.hasPermission.Font = permInfo[7] == "y";
    this.hasPermission.Css = permInfo[8] == "y";
    this.hasPermission.Character = permInfo[9] == "y";
    this.hasPermission.CharacterExtended = permInfo[10] == "y";
    this.hasPermission.Color = permInfo[11] == "y";
    this.hasPermission.Justify = permInfo[12] == "y";
    this.hasPermission.Paste = permInfo[13] == "y";
    this.hasPermission.PasteExtended = permInfo[14] == "y";
    this.hasPermission.Undo = permInfo[15] == "y";
    this.hasPermission.Search = permInfo[16] == "y";
    this.hasPermission.Link = permInfo[17] == "y";
    this.hasPermission.DocumentBank = permInfo[18] == "y";
    this.hasPermission.Media = permInfo[19] == "y";
    this.hasPermission.HtmlTemplates = permInfo[20] == "y";
    this.hasPermission.List = permInfo[21] == "y";
    this.hasPermission.Indent = permInfo[22] == "y";
    this.hasPermission.Table = permInfo[23] == "y";
    this.hasPermission.TableExtended = permInfo[24] == "y";
    this.hasPermission.Style = permInfo[25] == "y";
    this.hasPermission.Layer = permInfo[26] == "y";
    this.hasPermission.Zoom = permInfo[27] == "y";
    this.hasPermission.Special = permInfo[28] == "y";
    this.hasPermission.SpecialExtended = permInfo[29] == "y";
    this.hasPermission.Advanced = permInfo[30] == "y";

    styles = extraInfo[0];
    hasTemplates = extraInfo[1] == "y";
    language = extraInfo[2];

    if (callback) callback();
  }

  this.deleteMe = function() {
    if (confirm(this.translate("Är du säker på att du vill ta bort elementet") + "?"))
      parentList.deleteElement(this);
  }

  this.generateDOM = function(callback) {
    this.maindiv = $("<div />").attr({id:tinyId + "_main"});

    if (this.hasPermission.edit) {
      if (this.param.dateControlled) {
        this.inpstartdate = $("<input />").attr({type:"hidden", value:mainProp.startDate});
        this.maindiv.append(this.inpstartdate);
        this.inpenddate = $("<input />").attr({type:"hidden", value:mainProp.endDate});
        this.maindiv.append(this.inpenddate);
      }

      if (this.hasPermission.isSysAdmin) {
        this.permdiv = $("<div />").addClass("ajaxPermissions").css({ "background-color":"#fff", "width":this.param.width, "height":this.param.height });
        this.maindiv.append(this.permdiv);

        this.permdiv.append(
          $("<div />").addClass("ajaxHeadDiv").append(
            $("<a />").attr({ href:"javascript:void(0)" }).focus(function(){this.blur();}).click(function(e) {thisref.stopPropagation(e);thisref.permdiv.css({"display":"none"});}).append(
              $("<img />").attr({ src:"admin/gfx/closewind.gif", alt:this.translate("Stäng"), border:"0" } )
            )
          )
        );

        this.permroles = $("<div />").addClass("ajaxRolesDiv" );
        this.permdiv.append(this.permroles);
        this.permsettings = $("<div />").addClass("ajaxPermissionDiv");
        this.permdiv.append(this.permsettings);
      }

      this.viewdiv = $("<div />").addClass("ajaxToolbarStatic").mouseover(function(){thisref.highlight(true)}).mouseout(function(){thisref.highlight(false)}).css({"z-index":"10"});
      this.maindiv.append(this.viewdiv);

      this.viewdiv.append(
        $("<table />").append(
          $("<tbody />").append(
            $("<tr />").append(
              $("<td />").append(
                $("<img />").attr({ src:"admin/gfx/hidden.gif", alt:this.translate("Elementet visas inte på den publika sidan"), title:this.translate("Elementet visas inte på den publika sidan") }).css({ "display":"none" })
      )))));

      var atr = this.viewdiv.find("tr");
      this.editlink = $("<a />").attr({ href:"javascript:void(0)", title:atitle}).focus(function(){this.blur();}).click(function(e){thisref.edit(e);});
      var atitle = this.translate("Redigera elementet") + " " + tinyId.substring(5) + "(" + mainProp.id + ")\n\r" + this.translate("Senast redigerat av") + " " + mainProp.modBy + " " + mainProp.modDate + "\n\r" + this.translate("Senast publicerat av") + " " + mainProp.publishedBy + " " + mainProp.publishedDate;
      atr.append(
        $("<td />").append(
          $("<a />").attr({ href:"javascript:void(0)", title:atitle}).focus(function(){this.blur();}).click(function(e){thisref.edit(e);}).append(
            $("<img />").attr({ src:"admin/gfx/edit.gif", alt:this.translate("Redigera elementet"), border:"0" })
      )));

      if (parentList && parentList.hasPermission.del) {
        atr.append(
          $("<td />").append(
            $("<a />").attr({ href:"javascript:void(0)", title:this.translate("Ta bort") }).focus(function(){this.blur();}).click(function(e){thisref.deleteMe(e);}).mouseover(function(){thisref.highlight(true);}).mouseout(function(){thisref.highlight(false);}).append(
              $("<img />").attr({ src:"admin/gfx/delete.gif", alt:this.translate("Ta bort"), border:"0" })
        )));
      }

      if (this.hasPermission.isSysAdmin) {
        atr.append(
          $("<td />").append(
            $("<a />").attr({ href:"javascript:void(0)", title:this.translate("Redigera behörigheter")}).focus(function(){this.blur();}).click(function(e){thisref.showPermissions(e);}).mouseover(function(){thisref.highlight(true);}).mouseout(function(){thisref.highlight(false);}).append(
              $("<img />").attr({ src:"admin/gfx/permission.gif", alt:this.translate("Redigera behörigheter"), border:"0" })
        )));
      }

      if (this.hasPermission.publish) {
        this.publishbtn = $("<a />").attr({ href:"javascript:void(0)", title:this.translate("Publicera ändringar") }).focus(function(){this.blur();}).click(function(e){thisref.publish(e);}).mouseover(function(){thisref.highlight(true);}).mouseout(function(){thisref.highlight(false);}).css({'display':(mainProp.isPublished ? "none" : "inline")});
        atr.append(
          $("<td />").append(
            this.publishbtn.append(
              $("<img />").attr({ src:"admin/gfx/publish.gif", alt:this.translate("Publicera ändringar"), border:"0" })
        )));
        this.unpublishbtn = $("<a />").attr({ href:"javascript:void(0)", title:this.translate("Ångra till senast publicerat")}).focus(function(){this.blur();}).click(function(e){thisref.unpublish(e);}).mouseover(function(){thisref.highlight(true);}).mouseout(function(){thisref.highlight(false);}).css({'display':(mainProp.isPublished ? "none" : "inline")});
        atr.append(
          $("<td />").append(
            this.unpublishbtn.append(
              $("<img />").attr({ src:"admin/gfx/unpublish.gif", alt:this.translate("Ångra till senast publicerat"), border:"0" })
        )));
      }
      else {
        this.publishinfo = $("<span />").css({ "display":(mainProp.isPublished ? "none" : "inline") });
        atr.append(
          $("<td />").append(
            this.publishinfo.append(
              $("<img />").attr({ src:"admin/gfx/publish.gif", alt:this.translate("Elementets innehåll är ändrat men inte publicerat"), border:"0" })
        )));
      }
    }

    this.statdiv = $("<div />").attr({ id:tinyId + "_static" });
    this.maindiv.append(this.statdiv);
    this.setStaticContent(mainProp.value);

    if (this.hasPermission.edit) {
      this.statdiv.mouseover(function() {thisref.highlight(true);});
      this.statdiv.mouseout(function() {thisref.highlight(false);});

      this.editdiv = $("<div />").css({ "display":"none", "position":"relative", "left":"-1px", "top":"-1px" });
      this.editdiv.append($("<div />").attr({ id:tinyId + "_mce" }).html(mainProp.value ));
      this.maindiv.append(this.editdiv);
    }

    this.setDimControl();

    setTimeout(function(){thisref.whenDomLoaded(callback);}, 500);

  },

  this.whenDomLoaded = function(callback) {
    targetdiv.empty();
    targetdiv.append(this.maindiv);
    if (callback) callback();
  }

  this.replaceScripts = function(aval) {
    var re = new RegExp(/<script\b[^>]*>(.*?)<\/script>/);
    var scripts = "";
    var s = re.exec(aval);
    var count = 0;
    while (s && count < 100) {
      var ascript = s[0].substring(31, s[0].length-9);
      ascript = ascript.replace(/writeFlash\(/g, "writeFlash('_fs" + tinyId + count + "_',");
      ascript = ascript.replace(/writeShockWave\(/g, "writeShockWave('_fs" + tinyId + count + "_',");
      ascript = ascript.replace(/writeQuickTime\(/g, "writeQuickTime('_fs" + tinyId + count + "_',");
      ascript = ascript.replace(/writeRealMedia\(/g, "writeRealMedia('_fs" + tinyId + count + "_',");
      ascript = ascript.replace(/writeWindowsMedia\(/g, "writeWindowsMedia('_fs" + tinyId + count + "_',");
      scripts += ascript;
      aval = aval.replace(s[0], "<span id='_fs" + tinyId + count + "_'></span>");
      count++;
      s = re.exec(aval);
    }
    return [aval, scripts];
  },

  this.setStaticContent = function(cont) {
    var res = this.replaceScripts(cont);
    this.statdiv.html(res[0]);
    if (res[1].length > 0)
      eval(res[1]);
  },

  this.setProperty = function(propertyName, propertyId, callback) {
    mainProp.id = propertyId;
    mainProp.name = propertyName;
    this.getControlInfo(true, function() {thisref.setProperty2(callback);});
  },

  this.setProperty2 = function(callback) {
    this.setStaticContent(mainProp.value);
    if (this.hasPermission.edit)
      this.setTinyContent(mainProp.value);
    var atitle = this.translate("Redigera elementet") + " " + tinyId.substring(5) + "(" + mainProp.id + ")\n\r" + this.translate("Senast redigerat av") + " " + mainProp.modBy + " " + mainProp.modDate + "\n\r" + this.translate("Senast publicerat av") + " " + mainProp.publishedBy + " " + mainProp.publishedDate;
    if (this.editlink)
      this.editlink.attr({title:atitle});
    if (callback) callback();
  },

  this.tinyInstance = function() {
    return tinyMCE.editors[tinyId + "_mce"];
  }

  this.getToolbars = function() {
    var res = null;
    if (this.param["toolbarItems"].length == 0) {
      if (this.param["toolbarConfig"] == "empty") {
        this.param["toolbarItems"] = "";
        if (this.hasPermission.isSysAdmin) this.param["toolbarItems"] += "Advanced";
      }
      else if (this.param["toolbarConfig"] == "simple") {
        this.param["toolbarItems"] = "Character;Link;Undo;DocumentBank";
        if (this.hasPermission.isSysAdmin) this.param["toolbarItems"] += ";Advanced";
      }
      else if (this.param["toolbarConfig"] == "standard") {
        this.param["toolbarItems"] = "Paragraph;Character;Css;Justify;Paste;Undo;Link;DocumentBank;HtmlTemplates";
        if (this.hasPermission.isSysAdmin) this.param["toolbarItems"] += ";Advanced";
      }
      else if (this.param["toolbarConfig"] == "extended") {
        this.param["toolbarItems"] = "Paragraph;Css;Character;Justify;Paste;Undo;Link;DocumentBank;Media;HtmlTemplates;List;TableExtended;Layer;Style;Advanced";
      }
      else if (this.param["toolbarConfig"] == "advanced") {
        this.param["toolbarItems"] = "Paragraph;Font;Css;CharacterExtended;Color;Justify;Paste;Undo;Link;DocumentBank;Media;HtmlTemplates;List;Indent;TableExtended;Style;Layer;Zoom;Special;Advanced";
      }
      else if (this.param["toolbarConfig"] == "full") {
        this.param["toolbarItems"] = "Paragraph;Font;Css;CharacterExtended;Color;Justify;Paste;Undo;Search;Link;DocumentBank;Media;HtmlTemplates;List;Indent;TableExtended;Style;Layer;Zoom;SpecialExtended;Advanced";
      }
    }
    return this.param["toolbarItems"];
  },


  this.getTools = function() {

    function addItem(s, item) {
      if (s.length > 0) s += ",separator,";
      s += item;
      return s;
    }

    var showShare = this.hasPermission.share && mainProp.canBeShared;
    var showCommon = this.hasPermission.share && mainProp.canBeCommon;
    var s = "save";
    if (this.hasPermission.publish) s += ",savepublish";
    s += ",cancel";
    if (this.hasPermission.show || showShare || showCommon) {
      s += ",separator";
      if (this.hasPermission.show) s += ",showhide";
      if (showShare) s += ",share";
      if (showCommon) s += ",common";
    }
    if (this.param.dateControlled)
      s += ",startdate,enddate";
    if (this.hasPermission.restore)
      s += ",restore";

    var tbstr = this.getToolbars();
    var tb = tbstr.split(';');;
    for (var i=0; i < tb.length; i++) {
      if (tb[i] == "Paragraph" && this.hasPermission.Paragraph) s = addItem(s, "formatselect");
      else if (tb[i] == "Font" && this.hasPermission.Font) s = addItem(s, "fontselect,fontsizeselect");
      else if (tb[i] == "Css" && this.hasPermission.Css && styles.length > 0 ) s = addItem(s, "styleselect");
      else if (tb[i] == "Character" && tbstr.indexOf("CharacterExtended") < 0 && this.hasPermission.Character) s = addItem(s, "bold,italic");
      else if (tb[i] == "CharacterExtended" && this.hasPermission.CharacterExtended) s = addItem(s, "bold,italic,underline,strikethrough,sub,sup");
      else if (tb[i] == "Color" && this.hasPermission.Color) s = addItem(s, "forecolor,backcolor");
      else if (tb[i] == "Justify" && this.hasPermission.Justify) s = addItem(s, "justifyleft,justifycenter,justifyright,justifyfull");
      else if (tb[i] == "Paste" && tbstr.indexOf("PasteExtended") < 0 && this.hasPermission.Paste) s = addItem(s, "cut,copy,paste");
      else if (tb[i] == "PasteExtended" && this.hasPermission.PasteExtended) s = addItem(s, "cut,copy,paste,pastetext,pasteword,selectall");
      else if (tb[i] == "Undo" && this.hasPermission.Undo) s = addItem(s, "undo,redo");
      else if (tb[i] == "Search" && this.hasPermission.Search) s = addItem(s, "search,replace");
      else if (tb[i] == "Link" && this.hasPermission.Link) s = addItem(s, "link,unlink,anchor");
      else if (tb[i] == "DocumentBank" && this.hasPermission.DocumentBank) s = addItem(s, "docbank,image");
      else if (tb[i] == "Media" && this.hasPermission.Media) s = addItem(s, "media");
      else if (tb[i] == "HtmlTemplates" && this.hasPermission.HtmlTemplates && hasTemplates) s = addItem(s, "template");
      else if (tb[i] == "List" && this.hasPermission.List) s = addItem(s, "bullist,numlist");
      else if (tb[i] == "Indent" && this.hasPermission.Indent) s = addItem(s, "outdent,indent");
      else if (tb[i] == "Table" && tbstr.indexOf("TableExtended") < 0 && this.hasPermission.Table) s = addItem(s, "table,delete_col,delete_row,col_after,col_before,row_after,row_before");
      else if (tb[i] == "TableExtended" && this.hasPermission.TableExtended) s = addItem(s, "table,row_props,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,split_cells,merge_cells");
      else if (tb[i] == "Style" && this.hasPermission.Style) s = addItem(s, "styleprops,removeformat");
      else if (tb[i] == "Layer" && this.hasPermission.Layer) s = addItem(s, "insertlayer,moveforward,movebackward,absolute");
      else if (tb[i] == "Zoom" && this.hasPermission.Zoom) s = addItem(s, "zoom");
      else if (tb[i] == "Special" && tbstr.indexOf("SpecialExtended") < 0 && this.hasPermission.Special) s = addItem(s, "hr,charmap");
      else if (tb[i] == "SpecialExtended" && this.hasPermission.SpecialExtended) s = addItem(s, "hr,charmap,emotions,insertdate,insterttime,nonbreaking");
      else if (tb[i] == "Advanced" && this.hasPermission.Advanced) s = addItem(s, "cleanup,code");
    }
    return s;
  },


  this.getPlugins = function(tools) {
    var plugins = "inlinepopups";
    if (tools.length > 0) plugins += ",contextmenu";
    if (tools.indexOf("styleprops") >= 0) plugins += ",style";
    if (tools.indexOf("insertlayer") >= 0) plugins += ",layer";
    if (tools.indexOf("table") >= 0) plugins += ",table";
    if (tools.indexOf("template") >= 0) plugins += ",template";
    if (tools.indexOf("zoom") >= 0) plugins += ",zoom";
    if (tools.indexOf("link") >= 0) plugins += ",advlink";
    if (tools.indexOf("image") >= 0) plugins += ",advimage";
    if (tools.indexOf("emotions") >= 0) plugins += ",emotions";
    if (tools.indexOf("insertdate") >= 0) plugins += ",insertdatetime";
    if (tools.indexOf("paste") >= 0) plugins += ",paste";
    if (tools.indexOf("search") >= 0) plugins += ",searchreplace";
    if (tools.indexOf("nonbreaking") >= 0) plugins += ",nonbreaking";
    if (tools.indexOf("media") >= 0) plugins += ",media";
    return plugins;
  },

  this.initTiny = function(callback) {
    var tools = this.getTools();
    var plugins = this.getPlugins(tools);

    if (this.param.useZipTiny) {
      tinyMCE_GZ.init({
        plugins : plugins,
        themes : 'advanced',
        languages : 'en',
        disk_cache : true,
        debug : false
      });
    }

    this.tinyConfigs = {
      mode:'exact',
      relative_urls:this.param["relativeUrls"],
      remove_script_host : false,
      document_base_url : this.param["baseUrl"],
      convert_urls:this.param["convertUrls"],
      theme:'advanced',
      language:language,
      onchange_callback: function() { thisref.onChange() },
      init_instance_callback : function(inst) { thisref.initTinyDone(callback); },
      content_css:this.param["css"],
      width:this.param["width"],
      height:this.param["height"],
      plugins:plugins,
      debug:this.param.debug,
      media_use_script:false,
      extended_valid_elements:this.param.validElements,
      strict_loading_mode : false,
      theme_advanced_toolbar_location: this.param["toolbarLocation"],
      theme_advanced_containers_default_align:'left',
      theme_advanced_buttons1:tools,
      theme_advanced_buttons2:"",
      theme_advanced_buttons3:"",
      theme_advanced_styles:styles,
      template_templates: this.getHtmlTemplates(),
      file_browser_callback:function(field_name, url, type, win) { thisref.openDocumentBank(field_name, url, type, win); },
      setup : function(ed) {
        ed.addButton('save', {
          title:thisref.translate("Spara ändringar"),
          image:'admin/tinymce/gfx/save.gif',
          onclick:function(e){ thisref.save(e,false); }
        });
        ed.addButton('savepublish', {
          title:thisref.translate("Spara och publicera ändringar"),
          image:'admin/tinymce/gfx/savepublish.gif',
          onclick:function(e){ thisref.save(e,true); }
        });
        ed.addButton('cancel', {
          title:thisref.translate("Ångra ändringar"),
          image:'admin/tinymce/gfx/cancel.gif',
          onclick:function(e){ thisref.undo(e); }
        });
        ed.addButton('showhide', {
          title:(mainProp.isVisible ? thisref.translate("Dölj elementet på den publika sidan") : thisref.translate("Visa elementet på den publika sidan")),
          image:(mainProp.isVisible ? "admin/tinymce/gfx/hide.gif" : "admin/tinymce/gfx/show.gif"),
          onclick:function(e){ thisref.showHide(e); }
        });
        ed.addButton('share', {
          title:(mainProp.isShared ? thisref.translate("Ångra delning av elementets egenskaper med andra webbsidor") : thisref.translate("Dela elementets egenskaper med andra webbsidor")),
          image:(mainProp.isShared ? "admin/tinymce/gfx/unshare.gif" : "admin/tinymce/gfx/share.gif"),
          onclick:function(e){ thisref.share(e); }
        });
        ed.addButton('common', {
          title:(mainProp.isShared ? thisref.translate("Ångra delning av elementets egenskaper med hela sajten") : thisref.translate("Dela elementets egenskaper med hela sajten")),
          image:(mainProp.isCommon ? "admin/tinymce/gfx/uncommon.gif" : "admin/tinymce/gfx/common.gif"),
          onclick:function(e){ thisref.common(e); }
        });
        ed.addButton('startdate', {
          title:thisref.translate("Sätt startdatum för visning"),
          image:"admin/tinymce/gfx/starttime.gif",
          onclick:function(e){ thisref.setStartDate(e); }
        });
        ed.addButton('enddate', {
          title:thisref.translate("Sätt slutdatum för visning"),
          image:"admin/tinymce/gfx/endtime.gif",
          onclick:function(e){ thisref.setEndDate(e); }
        });
        ed.addButton('restore', {
          title:thisref.translate("Återställ kontrollen"),
          image:"admin/tinymce/gfx/restore.gif",
          onclick:function(e){ thisref.openRestore(e); }
        });
        ed.onPaste.add(function(ed, e, o) {
          ed.execCommand('mcePasteText', true);
          return tinymce.dom.Event.cancel(e);
        });
      }
    }
    $("#" + tinyId + "_mce").tinymce(this.tinyConfigs);
  },


  this.initTinyDone = function(callback) {
    var atable = $("#" + tinyId + "_mce_toolbar1");
    var tds = atable.children().children().children("td");
    //var adiv = $("<div />").css({"width":this.param["width"]});
    var adiv = $("<div />");

    tds.each(function(i) {
      adiv.append(
        $("<div />").css({'float':'left'}).append(
          $(this).remove()
        )
      );
    });
    adiv.append(
      $("<div />").addClass('clearfloat')
    );
    atable.parent().append(adiv);
    atable.remove();

    if (this.param.toolbarLocation == "external" && this.param.draggableToolbar) {
      $('#' + tinyId + "_mce_external").bind('drag',function( event ){
        $( this ).css({
          top: event.offsetY,
          left: event.offsetX
        });
      });
    }

    tinyIsReady = true;
    callback();
  }

  this.setStartDate = function(e) {
    this.stopPropagation(e);
    var inp = this.inpstartdate.get(0);
    var icon = $("#" + tinyId + '_mce_startdate').get(0);
    showCalendar(inp, icon, false, function(cal, adate){inp.value=adate;mainProp.startDate=adate;thisref.setDimControl();});
  }

  this.setEndDate = function(e) {
    this.stopPropagation(e);
    var inp = this.inpenddate.get(0);
    var icon = $("#" + tinyId + '_mce_enddate').get(0);
    showCalendar(inp, icon, false, function(cal, adate){inp.value=adate;mainProp.endDate = adate;thisref.setDimControl();});
  }

  this.openRestore = function(e) {
    this.stopPropagation(e);
    var pos = $("#" + tinyId + '_mce_restore').offset();
    $("body").append($("<div />").attr({id:tinyId+"_drestore"}).addClass("drestore").css({left:pos.left,top:pos.top+22}));
    this.getRestoreTimes(0);
  }

  this.getRestoreTimes = function(idx) {
    NFN.BasePage.GetRestoreTimes(mainProp.id, idx, function(r){thisref.showRestoreTimes(idx, r);});
  }

  this.showRestoreTimes = function(idx, response) {
    var info = response.value[0].split('|');
    var up = info[0] == "1";
    var down = info[1] == "1";

    var adiv = $("#" + tinyId + "_drestore");
    adiv.empty();

    adiv.append($("<h3 />").html(this.translate("Välj tidpunkt")));
    if (up) adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)"}).click(function(){thisref.getRestoreTimes(idx-10);}).html(this.translate("Nyare")));
    for (var i=1; i < response.value.length; i++) {
      var vals = response.value[i].split('|');
      adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)", id:"dr_" + vals[0]}).click(function(){thisref.doRestore(this);}).html(vals[1]));
    }
    if (down) adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)"}).click(function(){thisref.getRestoreTimes(idx+10);}).html(this.translate("Äldre")));
    adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)"}).click(function(){thisref.closeRestore();}).html(this.translate("Avbryt")));
    adiv.show();
  }

  this.doRestore = function(a) {
    var rid = parseInt(a.id.substring(3));
    var adate = a.innerHTML;
    if (confirm(this.translate("Är du säker på att du vill återställa kontrollens innehåll till tiden " + adate + "?")))
      NFN.BasePage.RestoreProperty(mainProp.id, parseInt(rid), function(r){thisref.doRestore2(r);});
  }
  this.doRestore2 = function(response) {
    this.closeRestore();
    this.setTinyContent(response.value);
    this.setStaticContent(response.value);
    this.lockProperty(false);
    this.showEditor(false);
    this.isChanged = false;
  }

  this.closeRestore = function() {
    $("#" + tinyId + "_drestore").remove();
  }

  this.showControl = function() {
    function getDate(s) {
      var h = s.split('-');
      while (h[1].indexOf('0') == 0) h[1] = h[1].substring(1);
      while (h[2].indexOf('0') == 0) h[2] = h[2].substring(1);
      return new Date(parseInt(h[0]), parseInt(h[1])-1, parseInt(h[2]));
    }
    var now = new Date();
    var yesterday = new Date();
    yesterday.setDate(now.getDate()-1);
    var s = getDate(mainProp.startDate);
    var e = getDate(mainProp.endDate);
    return mainProp.isVisible && s <= now && e >= yesterday;
  }

  this.resize = function(w, h) {
    if (!tinyIsReady) {
      this.initTiny(function(){thisref.resize(w, h);});
      return;
    }
    if (this.tinyInstance()) {
      var docFrame = this.tinyInstance().contentAreaContainer.firstChild;
      docFrame.style.width = w + "px";
      docFrame.style.height = h + "px";
    }
  }

  this.getHtmlTemplates = function() {
    var response = NFN.BasePage.GetHtmlTemplates();
    if (response.error) return [];
    var res = new Array(response.value.length);
    for (var i=0; i < response.value.length; i++) {
      var vals = response.value[i].split('|');
      res[i] = {title:vals[0], src:vals[1], description:vals[2]};
    }
    return res;
  },

  this.openDocumentBank = function(field_name, url, type, win) {
    tinyMCE.activeEditor.windowManager.open({
      file : "/admin/DocumentBank/DocumentBank.aspx?fromtiny=y&maxwidth=" + this.param["width"],
      title : this.translate('Mediabank'),
      width : 900,
      height : 600,
      resizable : "yes",
      inline : "yes",
      close_previous : "yes"
    },
    {
      window : win,
      input : field_name,
      allowedtype : type
    });
    return false;
  },

  this.onChange = function() {
    this.isChanged = true;
  },

  this.translate = function(txt) {
    if (language == "sv") return txt;
    if (tl == null) tl = new Object();
    if (!tl[language]) {
      var s = "Välj tidpunkt|Nyare|Äldre|Avbryt|Stäng|Elementet visas inte på den publika sidan|Redigera elementet|Senast redigerat av|Senast publicerat av|Redigera behörigheter|Publicera ändringar|Ångra till senast publicerat|Elementets innehåll är ändrat men inte publicerat|Visa elementet på den publika sidan|Dölj elementet på den publika sidan|Dela elementets egenskaper med andra webbsidor|Ångra delning av elementets egenskaper med andra webbsidor|Dela elementets egenskaper med hela sajten|Ångra delning av elementets egenskaper med hela sajten|Spara och publicera ändringar i elementet|Spara ändringar i elementet|Ångra ändringar|Posten redigeras av en annan användare. Försök senare|Är du säker på att du vill ångra ändringar och återgå till det senast publicerade värdet|Denna åtgärd medför att nuvarande information i kontrollen ersätts med delad information. Vill du fortsätta|Denna åtä¤rd medför att motsvarande informationspost på alla sajtens sidor kommer att ha samma innehåll. Vill du fortsätta|Denna åtgärd medför att motsvarande informationspost på sajtens olika sidor ej längre kommer att dela innehåll. Vill du fortsätta|Roller|Välj roll|Sätt standardbehörigheter för rollen|Behörigheter";
      var sarr = s.split('|');
      var response = NFN.BasePage.TranslateArr(sarr);
      tl[language] = new Object();
      for (var i=0; i < sarr.length; i++)
        tl[language][sarr[i]] = response.value[i];
    }
    return (tl[language][txt] ? tl[language][txt] : txt);
  },

  this.setTinyContent = function(html) {
    if (!tinyIsReady) {
      this.initTiny(function(){thisref.setTinyContent(html);});
      return;
    }
    this.tinyInstance().setContent(html);
  },

  this.checkLoggedIn = function() {
    var response = NFN.BasePage.CheckLoggedIn();
    if (!response.value) {
      this.lockProperty(false);
      window.location.reload();
    }
  },

  this.lockProperty = function(lock) {
    if (lock) NFN.BasePage.LockProperty(mainProp.id);
    else NFN.BasePage.UnlockProperty(mainProp.id);
  },

  this.stopPropagation = function(e) {
    if (e && e.stopPropagation) e.stopPropagation();
    else if (window.event && window.event.cancelBubble)
    window.event.cancelBubble = true;
  }

  this.edit = function(e) {
    this.checkLoggedIn();
    this.stopPropagation(e);
    var response = NFN.BasePage.IsLockedProperty(mainProp.id);
    if (response.value)
      alert(this.translate("Posten redigeras av en annan användare. Försök senare") + ".");
    else {
      this.lockProperty(true);
      this.showEditor(true);
    }
  },

  this.fixParentOverflow = function(show) {
    if (show) {
      this.parentelems = new Array();
      var elem = $("#" + tinyId + "_main").parent();
      while (elem.length > 0 && elem.get()[0].tagName != "HTML") {
        if (elem.css("overflow") == "hidden") {
          this.parentelems.push({elem: elem, overflow: elem.css("overflow") });
          elem.css({"overflow":"visible"});
        }
        elem = elem.parent();
      }
    }
    else if (this.parentelems.length > 0) {
      for (var i=0; i < this.parentelems.length; i++)
        this.parentelems[i].elem.css({"overflow" : this.parentelems[i].overflow});
      this.parentelems.clear();
    }
  },

  this.showEditor = function(show) {
    if (show && this.param.beforeShowEditor) this.param.beforeShowEditor(this);
    if (!show && this.param.beforeHideEditor) this.param.beforeHideEditor(this);
    if (show && !tinyIsReady) {
      this.initTiny(function(){thisref.showEditor(true);});
      return;
    }
    if (this.param.fixParentOverflow) this.fixParentOverflow(show);
    this.viewdiv.css({"display":(show ? "none" : "block")});
    this.statdiv.css({"display":(show ? "none" : "block")});
    this.editdiv.css({"display":(show ? "block" : "none")});
    if (show && this.param.afterShowEditor) this.param.afterShowEditor(this);
    if (!show && this.param.afterHideEditor) this.param.afterHideEditor(this);
    $("#" + tinyId + "_drestore").remove();
  },

  this.showPublishButtons = function(show) {
    var disp = (show ? "inline" : "none");
    if (this.publishbtn != null) this.publishbtn.css({"display":disp});
    if (this.unpublishbtn != null) this.unpublishbtn.css({"display":disp});
    if (this.publishinfo != null) this.publishinfo.css({"display":disp});
  }

  this.publish = function(e) {
    this.checkLoggedIn();
    this.stopPropagation(e);
    NFN.BasePage.PublishProperty(mainProp.id);
    this.showPublishButtons(false);
  },

  this.unpublish = function(e) {
    this.checkLoggedIn();
    this.stopPropagation(e);
    if (confirm(this.translate("Är du säker på att du vill ångra ändringar och återgå till det senast publicerade värdet") + "?")) {
      NFN.BasePage.UnpublishProperty(mainProp.id);
      var textProp = (language == "sv" || !this.param["languageDependent"] ? "text" : "text_" + language);
      var response = NFN.BasePage.GetPropVal(mainProp.id, textProp);
      this.setTinyContent(response.value);
      this.setStaticContent(response.value);
      this.showPublishButtons(false);
    }
  },

  this.save = function(e, publish) {
    this.stopPropagation(e);
    this.checkLoggedIn();
    //if (this.isChanged) {
      var html = this.tinyInstance().getContent();
      var sd = (this.param.dateControlled ? mainProp.startDate : null);
      var ed = (this.param.dateControlled ? mainProp.endDate : null);
      NFN.BasePage.SaveTiny(mainProp.id, "text", html, publish, mainProp.isVisible, sd, ed);

      this.setStaticContent(html);
      this.showPublishButtons(!publish);
    //}
    this.lockProperty(false);
    this.showEditor(false);
    this.isChanged = false;
  },

  this.undo = function(e) {
    this.stopPropagation(e);
    this.checkLoggedIn();
    if (this.isChanged) {
      this.setTinyContent(this.statdiv.html());
    }
    this.lockProperty(false);
    this.showEditor(false);
    this.isChanged = false;
  },

  this.setDimControl = function() {
    var dim = !this.showControl();
    $("#" + tinyId + "_mce_tbl").css({"filter":(dim ? "alpha(opacity:40)" : ""), "KHTMLOpacity":(dim ? "0.4" : ""), "MozOpacity":(dim ? "0.4" : ""), "opacity":(dim ? "0.4" : "")});
    this.statdiv.css({"filter":(dim ? "alpha(opacity:40)" : ""), "KHTMLOpacity":(dim ? "0.4" : ""), "MozOpacity":(dim ? "0.4" : ""), "opacity":(dim ? "0.4" : "")});
  },

  this.showHide = function(e) {
    this.stopPropagation(e);
    this.checkLoggedIn();
    var show = !mainProp.isVisible;
    NFN.BasePage.ShowHideProperty(mainProp.id, show);
    mainProp.isVisible = !mainProp.isVisible;

    this.setDimControl();
    $("#" + tinyId + "_mce_showhide").attr({title:(show ? this.translate("Dölj elementet på den publika sidan") : this.translate("Visa elementet på den publika sidan"))});
    $("#" + tinyId + "_mce_showhide img:first").attr({src:(show ? "admin/tinymce/gfx/hide.gif" : "admin/tinymce/gfx/show.gif")});
  },

  this.share = function(e) {
    this.stopPropagation(e);
    this.checkLoggedIn();

    var share = !mainProp.isShared;
    var ok = true;
    if (share) {
      var response = NFN.BasePage.ShareWillLooseData(_pageId, mainProp.name);
      if (response.value)
        ok = confirm(this.translate("Denna åtgärd medför att nuvarande information i kontrollen ersätts med delad information. Vill du fortsätta") + "?");
    }
    if (ok) {
      var response = NFN.BasePage.SetSharing(_pageId, mainProp.id, "", share);

      if (response.value.length > 0) {
        mainProp.isShared = !mainProp.isShared;
        $("#" + tinyId + "_mce_share").attr({title:(share ? this.translate("Ångra delning av elementets egenskaper med andra webbsidor") : this.translate("Dela elementets egenskaper med andra webbsidor"))});
        $("#" + tinyId + "_mce_share img:first").attr({src:(share ? "admin/tinymce/gfx/unshare.gif" : "admin/tinymce/gfx/share.gif")});

        var res = response.value.split('|');
        mainProp.id = res[0];
        var shared = (res[2] == "Y");
        var published = (res[3] == "Y");
        var html = res[4];
        if (html != "$nochange$") {
          this.setTinyContent(html);
          this.setStaticContent(html);
        }

        this.showPublishButtons(!published);
      }
    }
  },


  this.common = function(e) {
    this.stopPropagation(e);
    this.checkLoggedIn();
    var share = !mainProp.isCommon;
    var ok;
    if (share) ok = confirm(this.translate("Denna åtgärd medför att motsvarande informationspost på alla sajtens sidor kommer att ha samma innehåll. Vill du fortsätta") + "?");
    else ok = confirm(this.translate("Denna åtgärd medför att motsvarande informationspost på sajtens olika sidor ej längre kommer att dela innehåll. Vill du fortsätta") + "?");
    if (ok) {
      var response = NFN.BasePage.SetCommon(_pageId, mainProp.id, "", share);
      if (response.value != null && response.value.length > 0) {
        mainProp.isCommon = !mainProp.isCommon;

        mainProp.id = response.value[0];
        var shared = (response.value[2] == "Y");
        var published = (response.value[3] == "Y");
        var html = response.value[4];

        this.setTinyContent(html);
        this.setStaticContent(html);

        $("#" + tinyId + "_mce_common").attr({title:(share ? this.translate("Ångra delning av elementets egenskaper med hela sajten") : this.translate("Dela elementets egenskaper med hela sajten"))});
        $("#" + tinyId + "_mce_common img:first").attr({src:(share ? "admin/tinymce/gfx/uncommon.gif" : "admin/tinymce/gfx/common.gif")});
        $("#" + tinyId + "_mce_share").css({"display":(shared ? "none" : "")});

        this.showPublishButtons(!published);
      }
    }
  },

  this.showPermissions = function(e) {
    this.stopPropagation(e);
    var response = NFN.BasePage.GetRoles("dummy");
    var res = response.value.split(';');
    var roles = res[1].split('|');

    this.permroles.empty();

    this.permroles.append($("<p />").addClass("ajaxHeadline").html(this.translate("Roller")));
    var aselect = $("<select />").attr({ id:tinyId + "_rolelist"}).change(function() {thisref.tinyRoleChanged(this);});
    this.permroles.append(aselect);
    aselect.append($("<option />").html("--" + this.translate("Välj roll") + "--" ));
    for (var i=0; i < roles.length; i++)
      aselect.append($("<option />").html(roles[i]));

    this.permroles.append(
      $("<a />").attr({href:"javascript:void(0)", title:this.translate("Sätt standardbehörigheter för rollen")}).focus(function(){this.blur();}).click(function(e) {thisref.tinyDefaultPermissions();}).css({"margin-left":"20px" }).append(
        $("<img />").attr({src:"admin/gfx/default.gif", alt:this.translate("Sätt standardbehörigheter för rollen"), border:"0" })
      )
    )

    this.permsettings.empty();
    this.permdiv.css({"display":"block"});
  },

  this.highlight = function(hl) {
    this.statdiv.removeClass().addClass((hl ? "highlightEdit" : ""));
    this.viewdiv.css({"display":(hl ? "block" : "none")});
  },

  this.tinyDefaultPermissions = function(e) {
    this.stopPropagation(e);
    var idx = $("#" + tinyId + "_rolelist").get(0).selectedIndex;
    if (idx == 0)
      alert(this.translate("Välj roll"));
    else {
      var role = $("#" + tinyId + "_rolelist option:selected").val();
      var response = NFN.BasePage.SetDefaultPermissions(mainProp.id, role);
      this.tinyRoleChanged($("#" + tinyId + "_rolelist").get(0));
    }
  },

  this.tinyRoleChanged = function(list) {
    if (list.selectedIndex == 0) {
      this.permsettings.empty();
    }
    else {
      var role = $(list).find("option:selected").val();
      var response = NFN.BasePage.GetPermissionInfo(role, mainProp.id);

      this.permsettings.empty();
      this.permsettings.append($("<p />").addClass("ajaxHeadline").html(this.translate("Behörigheter")));
      this.permsettings.append(
        $("<table />").attr({cellSpacing:"0", cellPadding:"0"}).append(
          $("<tbody />")
        )
      );
      var atbody = this.permsettings.find("tbody:first");
      for (var i=0; i < response.value.length; i++) {
        var help = response.value[i].split('|');
        var atr = $("<tr />");
        atbody.append(atr);
        atr.append($("<td />").html(help[0]));
        atr.append($("<td />").append($("<input />").attr({type:"checkbox", checked:(help[2] == "y")}).click(function(e){thisref.permClicked(e, role, help[1], this.checked);})));
      }
    }
  },

  this.permClicked = function(e, role, actiontype, permission) {
    this.stopPropagation(e);
    NFN.BasePage.SetRichTextPermission(mainProp.id, role, actiontype, permission);
  }

  this.init();

  ajaxtiny.push(this);
}


function showEditControls() {
  $("div .ajaxToolbarStatic").css({"display":"block"});
  $("div .ajaxListToolbar").css({"display":"block"});
}


function writeFlash(id, p) {
  if (!p) return;
  if (!p.wmode) p.wmode = "transparent";
  writeEmbed(id,
    'D27CDB6E-AE6D-11cf-96B8-444553540000',
    'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
    'application/x-shockwave-flash',
    p
  );
}

function writeShockWave(id, p) {
  writeEmbed(id,
  '166B1BCA-3F9C-11CF-8075-444553540000',
  'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
  'application/x-director',
    p
  );
}

function writeQuickTime(id, p) {
  writeEmbed(id,
    '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
    'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
    'video/quicktime',
    p
  );
}

function writeRealMedia(id, p) {
  writeEmbed(id,
    'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
    'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
    'audio/x-pn-realaudio-plugin',
    p
  );
}

function writeWindowsMedia(id, p) {
  p.url = p.src;
  writeEmbed(id,
    '6BF52A52-394A-11D3-B153-00C04F79FAA6',
    'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
    'application/x-mplayer2',
    p
  );
}

function writeEmbed(id, cls, cb, mt, p) {
  var h = '', n;

if (!p) return;
  h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
  h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
  h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
  h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
  h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
  h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
  h += '>';

  for (n in p)
    h += '<param name="' + n + '" value="' + p[n] + '">';

  h += '<embed type="' + mt + '"';

  for (n in p)
    h += n + '="' + p[n] + '" ';

  h += '></embed></object>';

  if (document.getElementById(id)) document.getElementById(id).innerHTML = h;
}
