/* $Date: 2010-01-14 14:26:15 +0100 (to, 14 jan 2010) $    $Revision: 5776 $ */

jQuery.fn.ajaxtinylist = function(options) {

  return this.each(function() {

    var obj = $(this);
    var mainProp = new Object();
    var language = "sv";
    var editPermission = false;
    obj.adddiv = null;
    obj.hasPermission = new Object();

    obj.init = function() {
      NFN.BasePage.HasEditPermission(_pageId, obj.attr("id"), function(r){obj.init1(r);});
    }

    obj.init1 = function(response) {
      editPermission = response.value;
      if (editPermission) obj.getControlInfo(function(){obj.init2();});
      else obj.init2();
    }

    obj.init2 = function() {
      obj.children().each(function(i) {
        $(this).ajaxtiny(options, null, obj);
      });

      if (editPermission && obj.hasPermission.add) {
        $("head").addCssFile("admin/jstools/jquery/plugins/ajaxtiny/ajaxtiny.css");
        obj.adddiv = $("<div />").addClass("ajaxListToolbar").mouseover(function(){obj.highlight(true);}).mouseout(function(){obj.highlight(false);}).css({"display":"none"});
        var txt = obj.translate("Lägg till element i listan") + " " + mainProp.name + "(" + mainProp.id + "). " + obj.translate("Senast redigerat av") + " " + mainProp.modBy + " " + mainProp.modDate;
        obj.adddiv.append(
          $("<a />").attr({href:"javascript:void(0)"}).click(obj.addTiny).append(
            $('<img />').attr({src:'admin/gfx/add.gif', alt:txt, title:txt, border:'0'})
          )
        );
        obj.prepend(obj.adddiv);
        obj.mouseover(function(){obj.highlight(true);});
        obj.mouseout(function(){obj.highlight(false)});
      }
    }

    obj.getControlInfo = function(callback) {
      NFN.BasePage.GetListControlInfo(_pageId, obj.attr("id"), function(r) {obj.getControlInfo2(r, callback)});
    }

    obj.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];

      obj.hasPermission.isSysAdmin = response.value[4] == "y";
      obj.hasPermission.add = response.value[5] == "y";
      obj.hasPermission.del = response.value[6] == "y";
      language = response.value[7];

      if (callback) callback();
    }

    obj.addTiny = function() {
      NFN.BasePage.AddTiny(_pageId, obj.attr("id"), obj.addTiny2);
    }

    obj.addTiny2 = function(response) {
      var adiv = $("<div />").attr({id:response.value}).addClass("AjaxTiny");
      obj.append(adiv);
      options.onInitDone = obj.showChildEdit;
      $(adiv).ajaxtiny(options, null, obj);
    }

    obj.showChildEdit = function(child) {
      child.viewdiv.css({"display":'block'});
    }

    obj.highlight = function(hl) {
      obj.adddiv.css({"display":(hl ? "block" : "none")});
    },

    obj.deleteElement = function(elem) {
      NFN.BasePage.DeleteTiny(_pageId, obj.attr("id"), elem.attr("id"), function(r){obj.deleteElement2(elem);});
    }

    obj.deleteElement2 = function(elemdiv) {
      elemdiv.remove();
    }

    obj.translate = function(txt) {
      if (language == "sv") return txt;
      var response = NFN.BasePage.Translate(txt);
      return response.value;
    },

    obj.init();
  });
}


jQuery.fn.ajaxtiny = function(options, propId, parentList) {

  var thisref = this;
  this.objs = new Array();

  var settings = jQuery.extend({}, jQuery.fn.ajaxtiny.defaults, options);
  if (settings.toolbarItems.length > 0) settings.toolbarConfig = "custom";

  this.setContent = function(cont) {
    this.setStaticContent(cont);
    this.setTinyContent(cont);
  };

  this.setStaticContent = function(cont) {
    jQuery.each(thisref.objs, function(){
      this.setStaticContent(cont);
    });
  };

  this.setTinyContent = function(html) {
    jQuery.each(thisref.objs, function(){
      this.setTinyContent(html);
    });
  };

  this.setPropertyId = function(propertyId, callback) {
    this.setProperty("", propertyId, callback);
  };

  this.setPropertyName = function(propertyName, callback) {
    this.setProperty(propertyName, 0, callback);
  };

  this.setProperty = function(propertyName, propertyId, callback) {
    jQuery.each(thisref.objs, function(){
      this.setProperty(propertyName, propertyId, function(){if (callback && isPropTrue("propertyIsSet")) callback();});
    });
  };

  function isPropTrue(prop) {
    var istrue = true;
    jQuery.each(thisref.objs, function(){
      if (!this[prop]) istrue = false;
    });
    return istrue;
  }

  this.initdone = function() {
    return isPropTrue("initdone");
  };

  function initDone() {
    if (settings.onInitDone && isPropTrue("initdone")) settings.onInitDone(thisref);
  }

  return this.each(function() {

    var obj = $(this);
    thisref.objs.push(obj);

    var styles = "";
    var hasTemplates = false;
    var language = "sv";
    var tl = null;
    var editPermission = false;

    obj.initdone = false;
    obj.isChanged = false;
    var tinyIsReady = false;

    obj.hasPermission = new Object();

    var mainProp = new Object();
    if (propId) mainProp.id = propId;
    else {
      try { mainProp.id = parseInt(obj.attr("propid")); }
      catch(e) { mainProp.id = 0; }
      if (isNaN(mainProp.id)) mainProp.id = 0;
      mainProp.name = obj.attr("id");
    }
    var tinyId = "tiny_" + obj.attr("id");

    obj.init = function() {
      settings.width = (settings.width ? settings.width : (obj.width() == 0 ? settings.defwidth : obj.width() + 4));
      settings.height = (settings.height ? settings.height : (obj.height() == 0 ? settings.defheight : obj.height() + 30));
      NFN.BasePage.HasEditPermission(_pageId, obj.attr("id"), function(r){obj.init1(r);});
    }

    obj.init1 = function(response) {
      editPermission = response.value;
      if (editPermission || settings.contentByAjax)
        obj.getControlInfo(settings.contentByAjax, function(){obj.init2();});
      else {
        obj.statdiv = this;
        obj.initdone = true;
        initDone();
      }
    }

    obj.init2 = function(response) {
      if (obj.hasPermission.edit) {
        $("head").addCssFile("admin/jstools/jquery/plugins/ajaxtiny/ajaxtiny.css");
        if (settings.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");
        }
      }

      obj.generateDOM(function(){obj.init3();});
    }

    obj.init3 = function() {
      obj.initdone = true;
      initDone();
      obj.propertyIsSet = true;
    }

    obj.getControlInfo = function(getContent, callback) {
      NFN.BasePage.GetControlInfo(_pageId, mainProp.id, mainProp.name, getContent, function(r) {obj.getControlInfo2(r, getContent, callback)});
    }

    obj.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 = obj.html();

      obj.hasPermission.isSysAdmin = permInfo[0] == "y";
      obj.hasPermission.edit = permInfo[1] == "y";
      obj.hasPermission.publish = permInfo[2] == "y";
      obj.hasPermission.show = permInfo[3] == "y";
      obj.hasPermission.share = permInfo[4] == "y";
      obj.hasPermission.restore = permInfo[5] == "y";
      obj.hasPermission.Paragraph = permInfo[6] == "y";
      obj.hasPermission.Font = permInfo[7] == "y";
      obj.hasPermission.Css = permInfo[8] == "y";
      obj.hasPermission.Character = permInfo[9] == "y";
      obj.hasPermission.CharacterExtended = permInfo[10] == "y";
      obj.hasPermission.Color = permInfo[11] == "y";
      obj.hasPermission.Justify = permInfo[12] == "y";
      obj.hasPermission.Paste = permInfo[13] == "y";
      obj.hasPermission.PasteExtended = permInfo[14] == "y";
      obj.hasPermission.Undo = permInfo[15] == "y";
      obj.hasPermission.Search = permInfo[16] == "y";
      obj.hasPermission.Link = permInfo[17] == "y";
      obj.hasPermission.DocumentBank = permInfo[18] == "y";
      obj.hasPermission.Media = permInfo[19] == "y";
      obj.hasPermission.HtmlTemplates = permInfo[20] == "y";
      obj.hasPermission.List = permInfo[21] == "y";
      obj.hasPermission.Indent = permInfo[22] == "y";
      obj.hasPermission.Table = permInfo[23] == "y";
      obj.hasPermission.TableExtended = permInfo[24] == "y";
      obj.hasPermission.Style = permInfo[25] == "y";
      obj.hasPermission.Layer = permInfo[26] == "y";
      obj.hasPermission.Zoom = permInfo[27] == "y";
      obj.hasPermission.Special = permInfo[28] == "y";
      obj.hasPermission.SpecialExtended = permInfo[29] == "y";
      obj.hasPermission.Advanced = permInfo[30] == "y";

      styles = extraInfo[0];
      hasTemplates = extraInfo[1] == "y";
      language = extraInfo[2];

      if (callback) callback();
    }

    obj.deleteMe = function() {
      if (confirm(obj.translate("Är du säker på att du vill ta bort elementet") + "?"))
        parentList.deleteElement(obj);
    }

    obj.generateDOM = function(callback) {
      obj.maindiv = $("<div />").attr({id:tinyId + "_main"});

      if (obj.hasPermission.edit) {
        if (settings.dateControlled) {
          obj.inpstartdate = $("<input />").attr({type:"hidden", value:mainProp.startDate});
          obj.maindiv.append(obj.inpstartdate);
          obj.inpenddate = $("<input />").attr({type:"hidden", value:mainProp.endDate});
          obj.maindiv.append(obj.inpenddate);
        }

        if (obj.hasPermission.isSysAdmin) {
          obj.permdiv = $("<div />").addClass("ajaxPermissions").css({ "background-color":"#fff", "width":settings.width, "height":settings.height });
          obj.maindiv.append(obj.permdiv);

          obj.permdiv.append(
            $("<div />").addClass("ajaxHeadDiv").append(
              $("<a />").attr({ href:"javascript:void(0)" }).focus(function(){obj.blur();}).click(function(e) {obj.stopPropagation(e);obj.permdiv.css({"display":"none"});}).append(
                $("<img />").attr({ src:"admin/gfx/closewind.gif", alt:obj.translate("Stäng"), border:"0" } )
              )
            )
          );

          obj.permroles = $("<div />").addClass("ajaxRolesDiv" );
          obj.permdiv.append(obj.permroles);
          obj.permsettings = $("<div />").addClass("ajaxPermissionDiv");
          obj.permdiv.append(obj.permsettings);
        }

        obj.viewdiv = $("<div />").addClass("ajaxToolbarStatic").mouseover(function(){obj.highlight(true)}).mouseout(function(){obj.highlight(false)}).css({"z-index":"10"});
        obj.maindiv.append(obj.viewdiv);

        obj.viewdiv.append(
          $("<table />").append(
            $("<tbody />").append(
              $("<tr />").append(
                $("<td />").append(
                  $("<img />").attr({ src:"admin/gfx/hidden.gif", alt:obj.translate("Elementet visas inte på den publika sidan"), title:obj.translate("Elementet visas inte på den publika sidan") }).css({ "display":"none" })
        )))));

        var atr = obj.viewdiv.find("tr");
        obj.editlink = $("<a />").attr({ href:"javascript:void(0)", title:atitle}).focus(function(){obj.blur();}).click(function(e){obj.edit(e);});
        var atitle = obj.translate("Redigera elementet") + " " + tinyId.substring(5) + "(" + mainProp.id + ")\n\r" + obj.translate("Senast redigerat av") + " " + mainProp.modBy + " " + mainProp.modDate + "\n\r" + obj.translate("Senast publicerat av") + " " + mainProp.publishedBy + " " + mainProp.publishedDate;
        atr.append(
          $("<td />").append(
            $("<a />").attr({ href:"javascript:void(0)", title:atitle}).focus(function(){obj.blur();}).click(function(e){obj.edit(e);}).append(
              $("<img />").attr({ src:"admin/gfx/edit.gif", alt:obj.translate("Redigera elementet"), border:"0" })
        )));

        if (parentList && parentList.hasPermission.del) {
          atr.append(
            $("<td />").append(
              $("<a />").attr({ href:"javascript:void(0)", title:obj.translate("Ta bort") }).focus(function(){obj.blur();}).click(function(e){obj.deleteMe(e);}).mouseover(function(){obj.highlight(true);}).mouseout(function(){obj.highlight(false);}).append(
                $("<img />").attr({ src:"admin/gfx/delete.gif", alt:obj.translate("Ta bort"), border:"0" })
          )));
        }

        if (obj.hasPermission.isSysAdmin) {
          atr.append(
            $("<td />").append(
              $("<a />").attr({ href:"javascript:void(0)", title:obj.translate("Redigera behörigheter")}).focus(function(){obj.blur();}).click(function(e){obj.showPermissions(e);}).mouseover(function(){obj.highlight(true);}).mouseout(function(){obj.highlight(false);}).append(
                $("<img />").attr({ src:"admin/gfx/permission.gif", alt:obj.translate("Redigera behörigheter"), border:"0" })
          )));
        }

        if (obj.hasPermission.publish) {
          obj.publishbtn = $("<a />").attr({ href:"javascript:void(0)", title:obj.translate("Publicera ändringar") }).focus(function(){obj.blur();}).click(function(e){obj.publish(e);}).mouseover(function(){obj.highlight(true);}).mouseout(function(){obj.highlight(false);}).css({'display':(mainProp.isPublished ? "none" : "inline")});
          atr.append(
            $("<td />").append(
              obj.publishbtn.append(
                $("<img />").attr({ src:"admin/gfx/publish.gif", alt:obj.translate("Publicera ändringar"), border:"0" })
          )));
          obj.unpublishbtn = $("<a />").attr({ href:"javascript:void(0)", title:obj.translate("Ångra till senast publicerat")}).focus(function(){obj.blur();}).click(function(e){obj.unpublish(e);}).mouseover(function(){obj.highlight(true);}).mouseout(function(){obj.highlight(false);}).css({'display':(mainProp.isPublished ? "none" : "inline")});
          atr.append(
            $("<td />").append(
              obj.unpublishbtn.append(
                $("<img />").attr({ src:"admin/gfx/unpublish.gif", alt:obj.translate("Ångra till senast publicerat"), border:"0" })
          )));
        }
        else {
          obj.publishinfo = $("<span />").css({ "display":(mainProp.isPublished ? "none" : "inline") });
          atr.append(
            $("<td />").append(
              obj.publishinfo.append(
                $("<img />").attr({ src:"admin/gfx/publish.gif", alt:obj.translate("Elementets innehåll är ändrat men inte publicerat"), border:"0" })
          )));
        }
      }

      obj.statdiv = $("<div />").attr({ id:tinyId + "_static" });
      obj.maindiv.append(obj.statdiv);
      obj.setStaticContent(mainProp.value);

      if (obj.hasPermission.edit) {
        obj.statdiv.mouseover(function() {obj.highlight(true);});
        obj.statdiv.mouseout(function() {obj.highlight(false);});

        obj.editdiv = $("<div />").css({ "display":"none", "position":"relative", "left":"-1px", "top":"-1px" });
        obj.editdiv.append($("<div />").attr({ id:tinyId + "_mce" }).html(mainProp.value ));
        obj.maindiv.append(obj.editdiv);
      }

      obj.setDimControl();

      setTimeout(function(){obj.whenDomLoaded(callback);}, 500);

    },

    obj.whenDomLoaded = function(callback) {
      obj.empty();
      obj.append(obj.maindiv);
      if (callback) callback();
    }

    obj.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];
    },

    obj.setStaticContent = function(cont) {
      var res = obj.replaceScripts(cont);
      obj.statdiv.html(res[0]);
      if (res[1].length > 0)
        eval(res[1]);
    },

    obj.setProperty = function(propertyName, propertyId, callback) {
      obj.propertyIsSet = false;
      mainProp.id = propertyId;
      mainProp.name = propertyName;
      obj.getControlInfo(true, function() {obj.setProperty2(callback);});
    },

    obj.setProperty2 = function(callback) {
      obj.setStaticContent(mainProp.value);
      if (obj.hasPermission.edit)
        obj.setTinyContent(mainProp.value);
      obj.showPublishButtons(!mainProp.isPublished);
      var atitle = obj.translate("Redigera elementet") + " " + tinyId.substring(5) + "(" + mainProp.id + ")\n\r" + obj.translate("Senast redigerat av") + " " + mainProp.modBy + " " + mainProp.modDate + "\n\r" + obj.translate("Senast publicerat av") + " " + mainProp.publishedBy + " " + mainProp.publishedDate;
      if (obj.editlink)
        obj.editlink.attr({title:atitle});
      obj.propertyIsSet = true;
      if (callback) callback();
    },

    obj.tinyInstance = function() {
      return tinyMCE.editors[tinyId + "_mce"];
    }

    obj.getToolbars = function() {
      var res = null;
      if (settings.toolbarItems.length == 0) {
        if (settings.toolbarConfig == "empty") {
          settings.toolbarItems = "";
          if (obj.hasPermission.isSysAdmin) settings.toolbarItems += "Advanced";
        }
        else if (settings.toolbarConfig == "simple") {
          settings.toolbarItems = "Character;Link;Undo;DocumentBank";
          if (obj.hasPermission.isSysAdmin) settings.toolbarItems += ";Advanced";
        }
        else if (settings.toolbarConfig == "standard") {
          settings.toolbarItems = "Paragraph;Character;Css;Justify;Paste;Undo;Link;DocumentBank;HtmlTemplates";
          if (obj.hasPermission.isSysAdmin) settings.toolbarItems += ";Advanced";
        }
        else if (settings.toolbarConfig == "extended") {
          settings.toolbarItems = "Paragraph;Css;Character;Justify;Paste;Undo;Link;DocumentBank;Media;HtmlTemplates;List;TableExtended;Layer;Style;Advanced";
        }
        else if (settings.toolbarConfig == "advanced") {
          settings.toolbarItems = "Paragraph;Font;Css;CharacterExtended;Color;Justify;Paste;Undo;Link;DocumentBank;Media;HtmlTemplates;List;Indent;TableExtended;Style;Layer;Zoom;Special;Advanced";
        }
        else if (settings.toolbarConfig == "full") {
          settings.toolbarItems = "Paragraph;Font;Css;CharacterExtended;Color;Justify;Paste;Undo;Search;Link;DocumentBank;Media;HtmlTemplates;List;Indent;TableExtended;Style;Layer;Zoom;SpecialExtended;Advanced";
        }
      }
      return settings.toolbarItems;
    },


    obj.getTools = function() {

      function addItem(s, item) {
        if (s.length > 0) s += ",separator,";
        s += item;
        return s;
      }

      var showShare = obj.hasPermission.share && mainProp.canBeShared;
      var showCommon = obj.hasPermission.share && mainProp.canBeCommon;
      var s = "save";
      if (obj.hasPermission.publish) s += ",savepublish";
      s += ",cancel";
      if (obj.hasPermission.show || showShare || showCommon) {
        s += ",separator";
        if (obj.hasPermission.show) s += ",showhide";
        if (showShare) s += ",share";
        if (showCommon) s += ",common";
      }
      if (settings.dateControlled)
        s += ",startdate,enddate";
      if (obj.hasPermission.restore)
        s += ",restore";

      var tbstr = obj.getToolbars();
      var tb = tbstr.split(';');;
      for (var i=0; i < tb.length; i++) {
        if (tb[i] == "Paragraph" && obj.hasPermission.Paragraph) s = addItem(s, "formatselect");
        else if (tb[i] == "Font" && obj.hasPermission.Font) s = addItem(s, "fontselect,fontsizeselect");
        else if (tb[i] == "Css" && obj.hasPermission.Css && styles.length > 0 ) s = addItem(s, "styleselect");
        else if (tb[i] == "Character" && tbstr.indexOf("CharacterExtended") < 0 && obj.hasPermission.Character) s = addItem(s, "bold,italic");
        else if (tb[i] == "CharacterExtended" && obj.hasPermission.CharacterExtended) s = addItem(s, "bold,italic,underline,strikethrough,sub,sup");
        else if (tb[i] == "Color" && obj.hasPermission.Color) s = addItem(s, "forecolor,backcolor");
        else if (tb[i] == "Justify" && obj.hasPermission.Justify) s = addItem(s, "justifyleft,justifycenter,justifyright,justifyfull");
        else if (tb[i] == "Paste" && tbstr.indexOf("PasteExtended") < 0 && obj.hasPermission.Paste) s = addItem(s, "cut,copy,paste");
        else if (tb[i] == "PasteExtended" && obj.hasPermission.PasteExtended) s = addItem(s, "cut,copy,paste,pastetext,pasteword,selectall");
        else if (tb[i] == "Undo" && obj.hasPermission.Undo) s = addItem(s, "undo,redo");
        else if (tb[i] == "Search" && obj.hasPermission.Search) s = addItem(s, "search,replace");
        else if (tb[i] == "Link" && obj.hasPermission.Link) s = addItem(s, "link,unlink,anchor");
        else if (tb[i] == "DocumentBank" && obj.hasPermission.DocumentBank) s = addItem(s, "docbank,image");
        else if (tb[i] == "Media" && obj.hasPermission.Media) s = addItem(s, "media");
        else if (tb[i] == "HtmlTemplates" && obj.hasPermission.HtmlTemplates && hasTemplates) s = addItem(s, "template");
        else if (tb[i] == "List" && obj.hasPermission.List) s = addItem(s, "bullist,numlist");
        else if (tb[i] == "Indent" && obj.hasPermission.Indent) s = addItem(s, "outdent,indent");
        else if (tb[i] == "Table" && tbstr.indexOf("TableExtended") < 0 && obj.hasPermission.Table) s = addItem(s, "table,delete_col,delete_row,col_after,col_before,row_after,row_before");
        else if (tb[i] == "TableExtended" && obj.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" && obj.hasPermission.Style) s = addItem(s, "styleprops,removeformat");
        else if (tb[i] == "Layer" && obj.hasPermission.Layer) s = addItem(s, "insertlayer,moveforward,movebackward,absolute");
        else if (tb[i] == "Zoom" && obj.hasPermission.Zoom) s = addItem(s, "zoom");
        else if (tb[i] == "Special" && tbstr.indexOf("SpecialExtended") < 0 && obj.hasPermission.Special) s = addItem(s, "hr,charmap");
        else if (tb[i] == "SpecialExtended" && obj.hasPermission.SpecialExtended) s = addItem(s, "hr,charmap,emotions,insertdate,insterttime,nonbreaking");
        else if (tb[i] == "Advanced" && obj.hasPermission.Advanced) s = addItem(s, "cleanup,code");
      }
      return s;
    },


    obj.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;
    },

    obj.initTiny = function(callback) {
      var tools = obj.getTools();
      var plugins = obj.getPlugins(tools);

      if (settings.useZipTiny) {
        tinyMCE_GZ.init({
          plugins : plugins,
          themes : 'advanced',
          languages : 'en',
          disk_cache : true,
          debug : false
        });
      }

      obj.tinyConfigs = {
        mode:'exact',
        relative_urls:settings.relativeUrls,
        remove_script_host : false,
        document_base_url : settings.baseUrl,
        convert_urls:settings.convertUrls,
        theme:'advanced',
        language:language,
        onchange_callback: function() { obj.onChange() },
        init_instance_callback : function(inst) { obj.initTinyDone(callback); },
        content_css:settings.css,
        width:settings.width,
        height:settings.height,
        plugins:plugins,
        debug:settings.debug,
        media_use_script:false,
        extended_valid_elements:settings.validElements,
        strict_loading_mode : false,
        theme_advanced_toolbar_location: settings.toolbarLocation,
        theme_advanced_containers_default_align:'left',
        theme_advanced_buttons1:tools,
        theme_advanced_buttons2:"",
        theme_advanced_buttons3:"",
        theme_advanced_styles:styles,
        template_templates: obj.getHtmlTemplates(),
        file_browser_callback:function(field_name, url, type, win) { obj.openDocumentBank(field_name, url, type, win); },
        setup : function(ed) {
          ed.addButton('save', {
            title:obj.translate("Spara ändringar"),
            image:'admin/tinymce/gfx/save.gif',
            onclick:function(e){ obj.save(e,false); }
          });
          ed.addButton('savepublish', {
            title:obj.translate("Spara och publicera ändringar"),
            image:'admin/tinymce/gfx/savepublish.gif',
            onclick:function(e){ obj.save(e,true); }
          });
          ed.addButton('cancel', {
            title:obj.translate("Ångra ändringar"),
            image:'admin/tinymce/gfx/cancel.gif',
            onclick:function(e){ obj.undo(e); }
          });
          ed.addButton('showhide', {
            title:(mainProp.isVisible ? obj.translate("Dölj elementet på den publika sidan") : obj.translate("Visa elementet på den publika sidan")),
            image:(mainProp.isVisible ? "admin/tinymce/gfx/hide.gif" : "admin/tinymce/gfx/show.gif"),
            onclick:function(e){ obj.showHide(e); }
          });
          ed.addButton('share', {
            title:(mainProp.isShared ? obj.translate("Ångra delning av elementets egenskaper med andra webbsidor") : obj.translate("Dela elementets egenskaper med andra webbsidor")),
            image:(mainProp.isShared ? "admin/tinymce/gfx/unshare.gif" : "admin/tinymce/gfx/share.gif"),
            onclick:function(e){ obj.share(e); }
          });
          ed.addButton('common', {
            title:(mainProp.isShared ? obj.translate("Ångra delning av elementets egenskaper med hela sajten") : obj.translate("Dela elementets egenskaper med hela sajten")),
            image:(mainProp.isCommon ? "admin/tinymce/gfx/uncommon.gif" : "admin/tinymce/gfx/common.gif"),
            onclick:function(e){ obj.common(e); }
          });
          ed.addButton('startdate', {
            title:obj.translate("Sätt startdatum för visning"),
            image:"admin/tinymce/gfx/starttime.gif",
            onclick:function(e){ obj.setStartDate(e); }
          });
          ed.addButton('enddate', {
            title:obj.translate("Sätt slutdatum för visning"),
            image:"admin/tinymce/gfx/endtime.gif",
            onclick:function(e){ obj.setEndDate(e); }
          });
          ed.addButton('restore', {
            title:obj.translate("Återställ kontrollen"),
            image:"admin/tinymce/gfx/restore.gif",
            onclick:function(e){ obj.openRestore(e); }
          });
          ed.onPaste.add(function(ed, e, o) {
            ed.execCommand('mcePasteText', true);
            return tinymce.dom.Event.cancel(e);
          });
        }
      }
      $("#" + tinyId + "_mce").tinymce(obj.tinyConfigs);
    },


    obj.initTinyDone = function(callback) {
      var atable = $("#" + tinyId + "_mce_toolbar1");
      var tds = atable.children().children().children("td");
      //var adiv = $("<div />").css({"width":settings.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 (settings.toolbarLocation == "external" && settings.draggableToolbar) {
        $('#' + tinyId + "_mce_external").bind('drag',function( event ){
          $( this ).css({
            top: event.offsetY,
            left: event.offsetX
          });
        });
      }

      tinyIsReady = true;
      callback();
    }

    obj.setStartDate = function(e) {
      obj.stopPropagation(e);
      var inp = obj.inpstartdate.get(0);
      var icon = $("#" + tinyId + '_mce_startdate').get(0);
      showCalendar(inp, icon, false, function(cal, adate){inp.value=adate;mainProp.startDate=adate;obj.setDimControl();});
    }

    obj.setEndDate = function(e) {
      obj.stopPropagation(e);
      var inp = obj.inpenddate.get(0);
      var icon = $("#" + tinyId + '_mce_enddate').get(0);
      showCalendar(inp, icon, false, function(cal, adate){inp.value=adate;mainProp.endDate = adate;obj.setDimControl();});
    }

    obj.openRestore = function(e) {
      obj.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}));
      obj.getRestoreTimes(0);
    }

    obj.getRestoreTimes = function(idx) {
      NFN.BasePage.GetRestoreTimes(mainProp.id, idx, function(r){obj.showRestoreTimes(idx, r);});
    }

    obj.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(obj.translate("Välj tidpunkt")));
      if (up) adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)"}).click(function(){obj.getRestoreTimes(idx-10);}).html(obj.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(){obj.doRestore(obj);}).html(vals[1]));
      }
      if (down) adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)"}).click(function(){obj.getRestoreTimes(idx+10);}).html(obj.translate("Äldre")));
      adiv.append("<div />").append($("<a />").attr({href:"javascript:void(0)"}).click(function(){obj.closeRestore();}).html(obj.translate("Avbryt")));
      adiv.show();
    }

    obj.doRestore = function(a) {
      var rid = parseInt(a.id.substring(3));
      var adate = a.innerHTML;
      if (confirm(obj.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){obj.doRestore2(r);});
    }
    obj.doRestore2 = function(response) {
      obj.closeRestore();
      obj.setTinyContent(response.value);
      obj.setStaticContent(response.value);
      obj.lockProperty(false);
      obj.showEditor(false);
      obj.isChanged = false;
    }

    obj.closeRestore = function() {
      $("#" + tinyId + "_drestore").remove();
    }

    obj.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;
    }

    obj.resize = function(w, h) {
      if (!tinyIsReady) {
        obj.initTiny(function(){obj.resize(w, h);});
        return;
      }
      if (obj.tinyInstance()) {
        var docFrame = obj.tinyInstance().contentAreaContainer.firstChild;
        docFrame.style.width = w + "px";
        docFrame.style.height = h + "px";
      }
    }

    obj.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;
    },

    obj.openDocumentBank = function(field_name, url, type, win) {
      tinyMCE.activeEditor.windowManager.open({
        file : "/admin/DocumentBank/DocumentBank.aspx?fromtiny=y&maxwidth=" + String(settings.width-4),
        title : obj.translate('Mediabank'),
        width : 900,
        height : 600,
        resizable : "yes",
        inline : "yes",
        close_previous : "yes"
      },
      {
        window : win,
        input : field_name,
        allowedtype : type
      });
      return false;
    },

    obj.onChange = function() {
      obj.isChanged = true;
    },

    obj.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);
    },

    obj.setTinyContent = function(html) {
      if (!tinyIsReady) {
        obj.initTiny(function(){obj.setTinyContent(html);});
        return;
      }
      obj.tinyInstance().setContent(html);
    },

    obj.checkLoggedIn = function() {
      var response = NFN.BasePage.CheckLoggedIn();
      if (!response.value) {
        obj.lockProperty(false);
        window.location.reload();
      }
    },

    obj.lockProperty = function(lock) {
      if (lock) NFN.BasePage.LockProperty(mainProp.id);
      else NFN.BasePage.UnlockProperty(mainProp.id);
    },

    obj.stopPropagation = function(e) {
      if (e && e.stopPropagation) e.stopPropagation();
      else if (window.event && window.event.cancelBubble)
      window.event.cancelBubble = true;
    }

    obj.edit = function(e) {
      obj.checkLoggedIn();
      obj.stopPropagation(e);
      var response = NFN.BasePage.IsLockedProperty(mainProp.id);
      if (response.value)
        alert(obj.translate("Posten redigeras av en annan användare. Försök senare") + ".");
      else {
        obj.lockProperty(true);
        obj.showEditor(true);
      }
    },

    obj.fixParentOverflow = function(show) {
      if (show) {
        obj.parentelems = new Array();
        var elem = $("#" + tinyId + "_main").parent();
        while (elem.length > 0 && elem.get()[0].tagName != "HTML") {
          if (elem.css("overflow") == "hidden") {
            obj.parentelems.push({elem: elem, overflow: elem.css("overflow") });
            elem.css({"overflow":"visible"});
          }
          elem = elem.parent();
        }
      }
      else if (obj.parentelems.length > 0) {
        for (var i=0; i < obj.parentelems.length; i++)
          obj.parentelems[i].elem.css({"overflow" : obj.parentelems[i].overflow});
        obj.parentelems.clear();
      }
    },

    obj.showEditor = function(show) {
      if (show && settings.beforeShowEditor) settings.beforeShowEditor(obj);
      if (!show && settings.beforeHideEditor) settings.beforeHideEditor(obj);
      if (show && !tinyIsReady) {
        obj.initTiny(function(){obj.showEditor(true);});
        return;
      }
      if (settings.fixParentOverflow) obj.fixParentOverflow(show);
      obj.viewdiv.css({"display":(show ? "none" : "block")});
      obj.statdiv.css({"display":(show ? "none" : "block")});
      obj.editdiv.css({"display":(show ? "block" : "none")});
      if (show && settings.afterShowEditor) settings.afterShowEditor(obj);
      if (!show && settings.afterHideEditor) settings.afterHideEditor(obj);
      $("#" + tinyId + "_drestore").remove();
    },

    obj.showPublishButtons = function(show) {
      var disp = (show ? "inline" : "none");
      if (obj.publishbtn != null) obj.publishbtn.css({"display":disp});
      if (obj.unpublishbtn != null) obj.unpublishbtn.css({"display":disp});
      if (obj.publishinfo != null) obj.publishinfo.css({"display":disp});
    }

    obj.publish = function(e) {
      obj.checkLoggedIn();
      obj.stopPropagation(e);
      NFN.BasePage.PublishPropertyValue(mainProp.id, "text");
      obj.showPublishButtons(false);
    },

    obj.unpublish = function(e) {
      obj.checkLoggedIn();
      obj.stopPropagation(e);
      if (confirm(obj.translate("Är du säker på att du vill ångra ändringar och återgå till det senast publicerade värdet") + "?")) {
        NFN.BasePage.UnpublishPropertyValue(mainProp.id, "text");
        var textProp = (language == "sv" || !settings.languageDependent ? "text" : "text_" + language);
        var response = NFN.BasePage.GetPropVal(mainProp.id, textProp);
        obj.setTinyContent(response.value);
        obj.setStaticContent(response.value);
        obj.showPublishButtons(false);
      }
    },

    obj.save = function(e, publish) {
      obj.stopPropagation(e);
      obj.checkLoggedIn();
      //if (obj.isChanged) {
        var html = obj.tinyInstance().getContent();
        var sd = (settings.dateControlled ? mainProp.startDate : null);
        var ed = (settings.dateControlled ? mainProp.endDate : null);
        NFN.BasePage.SaveTiny(mainProp.id, "text", html, publish, mainProp.isVisible, sd, ed);

        obj.setStaticContent(html);
        obj.showPublishButtons(!publish);
      //}
      obj.lockProperty(false);
      obj.showEditor(false);
      obj.isChanged = false;
    },

    obj.undo = function(e) {
      obj.stopPropagation(e);
      obj.checkLoggedIn();
      if (obj.isChanged) {
        obj.setTinyContent(obj.statdiv.html());
      }
      obj.lockProperty(false);
      obj.showEditor(false);
      obj.isChanged = false;
    },

    obj.setDimControl = function() {
      var dim = !obj.showControl();
      $("#" + tinyId + "_mce_tbl").css({"filter":(dim ? "alpha(opacity:40)" : ""), "KHTMLOpacity":(dim ? "0.4" : ""), "MozOpacity":(dim ? "0.4" : ""), "opacity":(dim ? "0.4" : "")});
      obj.statdiv.css({"filter":(dim ? "alpha(opacity:40)" : ""), "KHTMLOpacity":(dim ? "0.4" : ""), "MozOpacity":(dim ? "0.4" : ""), "opacity":(dim ? "0.4" : "")});
    },

    obj.showHide = function(e) {
      obj.stopPropagation(e);
      obj.checkLoggedIn();
      var show = !mainProp.isVisible;
      NFN.BasePage.ShowHideProperty(mainProp.id, show);
      mainProp.isVisible = !mainProp.isVisible;

      obj.setDimControl();
      $("#" + tinyId + "_mce_showhide").attr({title:(show ? obj.translate("Dölj elementet på den publika sidan") : obj.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")});
    },

    obj.share = function(e) {
      obj.stopPropagation(e);
      obj.checkLoggedIn();

      var share = !mainProp.isShared;
      var ok = true;
      if (share) {
        var response = NFN.BasePage.ShareWillLooseData(_pageId, mainProp.name);
        if (response.value)
          ok = confirm(obj.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 ? obj.translate("Ångra delning av elementets egenskaper med andra webbsidor") : obj.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$") {
            obj.setTinyContent(html);
            obj.setStaticContent(html);
          }

          obj.showPublishButtons(!published);
        }
      }
    },


    obj.common = function(e) {
      obj.stopPropagation(e);
      obj.checkLoggedIn();
      var share = !mainProp.isCommon;
      var ok;
      if (share) ok = confirm(obj.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(obj.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];

          obj.setTinyContent(html);
          obj.setStaticContent(html);

          $("#" + tinyId + "_mce_common").attr({title:(share ? obj.translate("Ångra delning av elementets egenskaper med hela sajten") : obj.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" : "")});

          obj.showPublishButtons(!published);
        }
      }
    },

    obj.showPermissions = function(e) {
      obj.stopPropagation(e);
      var response = NFN.BasePage.GetRoles("dummy");
      var res = response.value.split(';');
      var roles = res[1].split('|');

      obj.permroles.empty();

      obj.permroles.append($("<p />").addClass("ajaxHeadline").html(obj.translate("Roller")));
      var aselect = $("<select />").attr({ id:tinyId + "_rolelist"}).change(function() {obj.tinyRoleChanged(obj);});
      obj.permroles.append(aselect);
      aselect.append($("<option />").html("--" + obj.translate("Välj roll") + "--" ));
      for (var i=0; i < roles.length; i++)
        aselect.append($("<option />").html(roles[i]));

      obj.permroles.append(
        $("<a />").attr({href:"javascript:void(0)", title:obj.translate("Sätt standardbehörigheter för rollen")}).focus(function(){obj.blur();}).click(function(e) {obj.tinyDefaultPermissions();}).css({"margin-left":"20px" }).append(
          $("<img />").attr({src:"admin/gfx/default.gif", alt:obj.translate("Sätt standardbehörigheter för rollen"), border:"0" })
        )
      )

      obj.permsettings.empty();
      obj.permdiv.css({"display":"block"});
    },

    obj.highlight = function(hl) {
      obj.statdiv.removeClass().addClass((hl ? "highlightEdit" : ""));
      obj.viewdiv.css({"display":(hl ? "block" : "none")});
    },

    obj.tinyDefaultPermissions = function(e) {
      obj.stopPropagation(e);
      var idx = $("#" + tinyId + "_rolelist").get(0).selectedIndex;
      if (idx == 0)
        alert(obj.translate("Välj roll"));
      else {
        var role = $("#" + tinyId + "_rolelist option:selected").val();
        var response = NFN.BasePage.SetDefaultPermissions(mainProp.id, role);
        obj.tinyRoleChanged($("#" + tinyId + "_rolelist").get(0));
      }
    },

    obj.tinyRoleChanged = function(list) {
      if (list.selectedIndex == 0) {
        obj.permsettings.empty();
      }
      else {
        var role = $(list).find("option:selected").val();
        var response = NFN.BasePage.GetPermissionInfo(role, mainProp.id);

        obj.permsettings.empty();
        obj.permsettings.append($("<p />").addClass("ajaxHeadline").html(obj.translate("Behörigheter")));
        obj.permsettings.append(
          $("<table />").attr({cellSpacing:"0", cellPadding:"0"}).append(
            $("<tbody />")
          )
        );
        var atbody = obj.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){obj.permClicked(e, role, help[1], obj.checked);})));
        }
      }
    },

    obj.permClicked = function(e, role, actiontype, permission) {
      obj.stopPropagation(e);
      NFN.BasePage.SetRichTextPermission(mainProp.id, role, actiontype, permission);
    }

    obj.init();

  });
}


jQuery.fn.ajaxtiny.defaults = {
  width : null,
  height : null,
  defwidth : 300,
  defheight : 150,
  dateControlled : false,
  relativeUrls : true,
  baseUrl : "/",
  convertUrls : true,
  css : '/css/base.css, /css/tiny.css',
  toolbarItems : "",
  languageDependent : true,
  toolbarLocation : "external",
  toolbarConfig : "extended",
  toolbarItems : "",
  draggableToolbar : false,
  contentByAjax : false,
  fixParentOverflow : true,
  useZipTiny : false,
  onInitDone : null,
  beforeShowEditor : null,
  beforeHideEditor : null,
  afterShowEditor : null,
  afterHideEditor : null,
  validElements : "script[charset|defer|language|src|type]",
  debug : false
};


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;
}
