var ajaxtiny = new Array();

function AjaxTiny(targetdiv, param) {

  var tinyId = "";
  var mainProp = null;
  var styles = "";
  var hasTemplates = false;
  var language = "sv";
  var tl = null;
  var thisref = this;
  var setPropertyDone = null;
  var controlInfoDone = null;
  var isIE6 = /MSIE 6/.test(navigator.userAgent);

  this.arrindex = 0;
  this.hasPermission = null;
  this.isChanged = false;
  this.setupDone = false;
  this.useZipTiny = false;

  this.param = param;
  if (typeof(targetdiv) != "object")
    targetdiv = document.getElementById(targetdiv);

  this.maindiv = targetdiv;

  this.setParameters = function(newparam) {
    this.param = newparam;
  },

  this.setup = function(propertyName, propertyId) {
    if (!targetdiv) return;
    if (this.param == null) this.param = new Object();
    if (this.param["width"] == null) this.param["width"] = "300px";
    if (this.param["height"] == null) this.param["height"] = "100px";
    if (this.param["relativeUrls"] == null) this.param["relativeUrls"] = true;
    if (this.param["convertUrls"] == null) this.param["convertUrls"] = true;
    if (this.param["css"] == null) this.param["css"] = "";
    if (this.param["toolbarConfig"] == null) this.param["toolbarConfig"] = "extended";
    if (this.param["toolbarItems"] == null) this.param["toolbarItems"] = "";
    if (this.param["languageDependent"] == null) this.param["languageDependent"] = true;
    if (this.param["toolbarLocation"] == null) this.param["toolbarLocation"] = "external";
    if (this.param["contentByAjax"] == null) this.param["contentByAjax"] = false;
    if (this.param["fixParentOverflow"] == null) this.param["fixParentOverflow"] = true;

    this.getControlInfo(propertyName, propertyId, function(){thisref.setup2();} );
  },

  this.setup2 = function() {
    if (this.param["contentByAjax"] || this.hasPermission.edit) {
      tinyId = "tiny_" + mainProp.id;
      var res = this.replaceScripts(mainProp.value);
      var d = document.createElement("div");
      d.innerHTML = this.generateHtml(res[0], mainProp.value);
      targetdiv.innerHTML = "";
      targetdiv.appendChild(d);
      if (res[1].length > 0)
        eval(res[1]);

      if (this.hasPermission.edit) {
        var h = document.getElementsByTagName("head")[0];
        if (h.innerHTML.indexOf("ajaxtiny.css") < 0) {
          var lnk = document.createElement('link');
          lnk.type='text/css';
          lnk.media='screen';
          lnk.rel='stylesheet';
          lnk.href='admin/jstools/ajaxtiny/ajaxtiny.css';
          h.appendChild(lnk);
        }
        this.initTiny();
      }
      else
        this.initDone(false);
    }
    else this.initDone(false);
    this.setupDone = true;
  },


  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(div, cont) {
    var res = this.replaceScripts(cont);
    div.innerHTML = res[0];
    if (res[1].length > 0)
      eval(res[1]);
  },

  this.setProperty = function(propertyName, propertyId, callback) {
    setPropertyDone = callback;
    this.getControlInfo(propertyName, propertyId, function() {thisref.setProperty2();});
  },

  this.setProperty2 = function() {
    var div = $(tinyId + "_static");
    if (!div) div = targetdiv;
    this.setStaticContent(div, mainProp.value);
    if (this.hasPermission.edit)
      this.setTinyContent(mainProp.value);
    if (setPropertyDone) setPropertyDone();
  },

  this.getControlInfo = function(propertyName, propertyId, callback) {
    if (!propertyId) propertyId = 0;
    controlInfoDone = callback;
    if (!propertyName || propertyName.length == 0) propertyName = targetdiv.id;

/*    var r = Brand.DB.BWPage.GetControlInfo(_pageId, propertyName, propertyId, this.param["languageDependent"]);
    this.gotControlInfo(r);*/
    if (isIE6) {
      var r = Brand.DB.BWPage.GetControlInfo(_pageId, propertyName, propertyId, this.param["languageDependent"]);
      this.gotControlInfo(r);
    }
    else
      Brand.DB.BWPage.GetControlInfo(_pageId, propertyName, propertyId, this.param["languageDependent"], function(r) {thisref.gotControlInfo(r)});
  },

  this.gotControlInfo = function(response) {
    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;
    }
    mainProp = new Object();
    mainProp.id = response.value[0];
    mainProp.name = response.value[1];
    mainProp.modDate = response.value[2];
    mainProp.modBy = response.value[3];
    mainProp.publishedDate = response.value[4];
    mainProp.publishedBy = response.value[5];
    mainProp.isPublished = response.value[6] == "y";
    mainProp.isVisible = response.value[7] == "y";
    mainProp.isShared = response.value[8] == "y";
    mainProp.canBeShared = response.value[9] == "y";
    mainProp.isCommon = response.value[10] == "y";
    mainProp.canBeCommon = response.value[11] == "y";
    mainProp.value = response.value[12];

    this.hasPermission = new Object();
    this.hasPermission.isSysAdmin = response.value[13] == "y";
    this.hasPermission.edit = response.value[14] == "y";
    this.hasPermission.publish = response.value[15] == "y";
    this.hasPermission.show = response.value[16] == "y";
    this.hasPermission.share = response.value[17] == "y";
    this.hasPermission.Paragraph = response.value[18] == "y";
    this.hasPermission.Font = response.value[19] == "y";
    this.hasPermission.Css = response.value[20] == "y";
    this.hasPermission.Character = response.value[21] == "y";
    this.hasPermission.CharacterExtended = response.value[22] == "y";
    this.hasPermission.Color = response.value[23] == "y";
    this.hasPermission.Justify = response.value[24] == "y";
    this.hasPermission.Paste = response.value[25] == "y";
    this.hasPermission.PasteExtended = response.value[26] == "y";
    this.hasPermission.Undo = response.value[27] == "y";
    this.hasPermission.Search = response.value[28] == "y";
    this.hasPermission.Link = response.value[29] == "y";
    this.hasPermission.DocumentBank = response.value[30] == "y";
    this.hasPermission.Media = response.value[31] == "y";
    this.hasPermission.HtmlTemplates = response.value[32] == "y";
    this.hasPermission.List = response.value[33] == "y";
    this.hasPermission.Indent = response.value[34] == "y";
    this.hasPermission.Table = response.value[35] == "y";
    this.hasPermission.TableExtended = response.value[36] == "y";
    this.hasPermission.Style = response.value[37] == "y";
    this.hasPermission.Layer = response.value[38] == "y";
    this.hasPermission.Zoom = response.value[39] == "y";
    this.hasPermission.Special = response.value[40] == "y";
    this.hasPermission.SpecialExtended = response.value[41] == "y";
    this.hasPermission.Advanced = response.value[42] == "y";

    styles = response.value[43];
    hasTemplates = response.value[44] == "y";
    language = response.value[45];

    if (controlInfoDone) controlInfoDone();
  },

  this.obj = function() {
    return "ajaxtiny[" + this.arrindex + "]";
  },

  this.instId = function() { return tinyId + "_mce"; },

  this.generateHtml = function(statval, editval) {
    var html = "";
    var help = "";
    if (this.hasPermission.edit) {
      help = "<div id='x1x_main'>" +
        "<div id='x1x_permissiondiv' class='ajaxPermissions' style='background-color:#fff;width:x2x;height:x3x'>" +
        "<div class='ajaxHeadDiv'><a href='javascript:x5x.hidePermissions()'><img src='admin/gfx/closewind.gif' alt='x4x' border=0 /></a></div>" +
        "<div id='x1x_permissionroles' class='ajaxRolesDiv'></div>" +
        "<div id='x1x_permissions' class='ajaxPermissionDiv' style='background-color:#fff'></div>" +
        "</div>" +
        "<div  class='ajaxToolbarStatic' id='x1x_viewcontrols' onmouseover=x5x.highlight(true) onmouseout=x5x.highlight(false) style='z-index:10'>";
      html += help.replace(/x0x/g, mainProp.id).replace(/x1x/g, tinyId).replace(/x2x/g, this.param["width"]).replace(/x3x/g, this.param["height"]).replace(/x4x/g, this.TL("StÃ¤ng")).replace(/x5x/g, this.obj());

      html += "<table><tr>";
      html += "<td><img src='admin/gfx/hidden.gif' width='21' height='20' style='display:none' alt='" + this.TL("Elementet visas inte pÃ¥ den publika sidan") + "' title='" + this.TL("Elementet visas inte pÃ¥ den publika sidan") + "' /></td>";
      help = "<td><a href=\"javascript:x6x.edit()\" onfocus='this.blur()' title='" + this.TL("Redigera elementet") + " x1x (x0x)\n" + this.TL("Senast redigerat av") + " x2x x3x\n" + this.TL("Senast publicerat av") + " x4x x5x' onmouseover=x6x.highlight(true) onmouseout=x6x.highlight(false)><img src='admin/gfx/edit.gif' width='10' height='10' alt='" + this.TL("Redigera elementet") + " x1x (x0x)\n" + this.TL("Senast redigerat av") + " x2x x3x\n" + this.TL("Senast publicerat av") + " x4x x5x' border=0 /></a></td>";
      html += help.replace(/x0x/g, mainProp.id).replace(/x1x/g, tinyId).replace(/x2x/g, mainProp.modBy).replace(/x3x/g, mainProp.modDate).replace(/x4x/g, mainProp.publishedBy).replace(/x5x/g, mainProp.publishedDate).replace(/x6x/g, this.obj());

      if (this.hasPermission.isSysAdmin) {
        help = "<td><a href='javascript:x1x.showPermissions()' onfocus='this.blur()' onmouseover=x1x.highlight(true) onmouseout=x1x.highlight(false) title='" + this.TL("Redigera behÃ¶righeter") + "'><img src='admin/gfx/permission.gif' width='10' height='12' alt='" + this.TL("Redigera behÃ¶righeter") + "' border=0 /></a></td>";
        html += help.replace(/x0x/g, tinyId).replace(/x1x/g, this.obj());
      }
      if (this.hasPermission.publish) {
        help = "<td><span id='x0x_publish' style='display:x1x'><a href='javascript:x2x.publish()' onfocus='this.blur()' onmouseover=x2x.highlight(true) onmouseout=x2x.highlight(false) title='" + this.TL("Publicera Ã¤ndringar") + "'><img src='admin/gfx/publish.gif' width='20' height='15' alt='" + this.TL("Publicera Ã¤ndringar") + "' border=0 /></a></span></td>";
        html += help.replace(/x0x/g, tinyId).replace(/x1x/g, (mainProp.isPublished ? "none" : "inline")).replace(/x2x/g, this.obj());
        help = "<td><span id='x0x_unpublish' style='display:x1x'><a href='javascript:x2x.unpublish()' onfocus='this.blur()' onmouseover=x2x.highlight(true) onmouseout=x2x.highlight(false) title='" + this.TL("Ã…ngra till senast publicerat") + "'><img src='admin/gfx/unpublish.gif' width='14' height='16' alt='" + this.TL("Ã…ngra till senast publicerat") + "' border=0 /></a></span></td>";
        html += help.replace(/x0x/g, tinyId).replace(/x1x/g, (mainProp.isPublished ? "none" : "inline")).replace(/x2x/g, this.obj());
      }
      else {
        help = "<td><span id='x0x_publishinfo' style='display:x1x'><img src='admin/gfx/publish.gif' width='15' height='15' onmouseover=x2x.highlight(true) onmouseout=x2x.highlight(false) alt='" + this.TL("Elementets innehÃ¥ll Ã¤r Ã¤ndrat men inte publicerat") + "' border=0 /></span></td>";
        html += help.replace(/x0x/g, tinyId).replace(/x1x/g, (mainProp.isPublished ? "none" : "inline")).replace(/x2x/g, this.obj());
      }
      html += "</tr></table></div>";

      help = "<div id='x0x_static' onmouseover=x2x.highlight(true) onmouseout=x2x.highlight(false)>x1x</div>";
      html += help.replace(/x0x/g, tinyId).replace(/x1x/g, statval).replace(/x2x/g, this.obj());

      help = "<div id='x0x_edit' style='display:none'><div id='x0x_mce'>x3x</div></div>" +
        "</div>";
      html += help.replace(/x0x/g, tinyId).replace(/x1x/g, this.TL("Spara Ã¤ndringar i elementet")).replace(/x2x/g, this.TL("Ã…ngra Ã¤ndringar")).replace(/x3x/g, editval).replace(/x4x/g, this.obj());
    }
    else if (mainProp.isVisible) {
      html = "<div id='" + tinyId + "_static'>" + statval + "</div>";;
    }

    return html;
  },

  this.getToolbars = function() {
    var res = null;
    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;PasteExtended;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;PasteExtended;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;PasteExtended;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";
    }

    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("docbank") >= 0) plugins += ",docbank";
    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() {
    var tools = this.getTools();
    var plugins = this.getPlugins(tools);

    if (this.useZipTiny) {
      tinyMCE_GZ.init({
        plugins : plugins,
        themes : 'advanced',
        languages : 'en',
        disk_cache : true,
        debug : false
      });
    }

    this.tinyConfigs = {
      mode:'exact',
      elements:tinyId + '_mce',
      relative_urls:this.param["relativeUrls"],
      convert_urls:this.param["convertUrls"],
      theme:'advanced',
      language:language,
      onchange_callback: function() { thisref.onChange() },
      init_instance_callback : function(inst) { thisref.initDone(true); },
      content_css:this.param["css"],
      width:this.param["width"],
      height:this.param["height"],
      plugins:plugins,
      media_use_script:false,
      extended_valid_elements:'script[charset|defer|language|src|type],iframe[src|width|height|name|align|frameborder|allowfullscreen]',
      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.TL("Spara Ã¤ndringar"), image:'admin/tiny_mce3/gfx/save.gif', onclick:function(){ thisref.save(false); }});
        ed.addButton('savepublish', { title:thisref.TL("Spara och publicera Ã¤ndringar"), image:'admin/tiny_mce3/gfx/savepublish.gif', onclick:function(){ thisref.save(true); }});
        ed.addButton('cancel', { title:thisref.TL("Ã…ngra Ã¤ndringar"), image:'admin/tiny_mce3/gfx/cancel.gif', onclick:function(){ thisref.undo(); }});
        ed.addButton('showhide', { title:(mainProp.isVisible ? thisref.TL("DÃ¶lj elementet pÃ¥ den publika sidan") : thisref.TL("Visa elementet pÃ¥ den publika sidan")), image:(mainProp.isVisible ? "admin/tiny_mce3/gfx/hide.gif" : "admin/tiny_mce3/gfx/show.gif"), onclick:function(){ thisref.showHide(); }});
        ed.addButton('share', { title:(mainProp.isShared ? thisref.TL("Ã…ngra delning av elementets egenskaper med andra webbsidor") : thisref.TL("Dela elementets egenskaper med andra webbsidor")), image:(mainProp.isShared ? "admin/tiny_mce3/gfx/unshare.gif" : "admin/tiny_mce3/gfx/share.gif"), onclick:function(){ thisref.share(); }});
        ed.addButton('common', { title:(mainProp.isShared ? thisref.TL("Ã…ngra delning av elementets egenskaper med hela sajten") : thisref.TL("Dela elementets egenskaper med hela sajten")), image:(mainProp.isCommon ? "admin/tiny_mce3/gfx/uncommon.gif" : "admin/tiny_mce3/gfx/common.gif"), onclick:function(){ thisref.common(); }});
      }
    }
    tinyMCE.init(this.tinyConfigs);
  },

  this.resize = function(w, h) {
    var ed = tinyMCE.editors[tinyId + "_mce"];
    if (ed) {
      var docFrame = ed.contentAreaContainer.firstChild;
      docFrame.style.width = w + "px";
      docFrame.style.height = h + "px";
    }
/*    var div = $(tinyId + "_static");
    if (!div) div = targetdiv;
    div.style.width = w + "px";
    div.style.height = h + "px";*/
  }

  this.getHtmlTemplates = function() {
    var response = Brand.DB.BWPage.GetHtmlTemplates();
    var res = new Array(response.value.length);
    for (var i=0; i < response.value.length; i++) {
      var vals = response.value[i].split('|');
      var d = (vals.length > 2 ? vals[1] : vals[0]);
      var v = (vals.length > 2 ? vals[2] : vals[1]);
      res[i] = {title:vals[0], value:v, description:d};
    }
    return res;
  },

  this.openDocumentBank = function(field_name, url, type, win) {
    tinyMCE.activeEditor.windowManager.open({
      file : "/admin/DocumentBank/DocumentBank.aspx?fromtiny=y&maxwidth=" + String(parseInt(this.param["width"])-2),
      title : this.TL('Mediabank'),
      width : 900,
      height : 600,
      resizable : "yes",
      inline : "yes",
      close_previous : "yes"
    },
    {
      window : win,
      input : field_name,
      allowedtype : type
    });
    return false;
  },

  this.initDone = function(hastiny) {
    if (hastiny) {
      var tt = $(tinyId + "_mce_toolbar1");
      var tr = tt.firstChild;
      if (tr.tagName != "TR") tr = tr.firstChild;

      var tdiv = document.createElement("div");
      for (var i=0; i < tr.childNodes.length; i++) {
        var adiv = document.createElement("div");
        if (document.all) adiv.style.styleFloat = "left";
        else adiv.style.cssFloat = "left";
        adiv.style.width = "auto";
        var elem = tr.childNodes[i].firstChild;
        tr.childNodes[i].removeChild(elem);
        adiv.appendChild(elem);
        tt.parentNode.appendChild(adiv);
      }
      var cdiv = document.createElement("div");
      cdiv.className = "clearfloat";
      tt.parentNode.appendChild(cdiv);
      tt.parentNode.removeChild(tt);
      tr.firstChild.style.width = this.param["width"];;
    }

    this.isInitialized = true;
    if (this.param.onInitDone) this.param.onInitDone(this);
  },

  this.onChange = function() {
    this.isChanged = true;
  },

  this.TL = function(txt) {
    if (language == "sv") return txt;
    if (tl == null) tl = new Object();
    if (!tl[language]) {
      var s = "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 Ã¥tgÃ¤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 = Brand.DB.BWPage.TLArr(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) {
    tinyMCE.editors[tinyId + "_mce"].setContent(html);
  },

  this.showElem = function(id, show) {
    var elem = $(id);
    if (elem != null) elem.style.display = show;
  },

  this.checkLoggedIn = function() {
    var response = Brand.DB.BWPage.CheckLoggedIn();
    if (!response.value) {
      this.lockProperty(false);
      window.location.reload();
    }
  },

  this.lockProperty = function(lock) {
    if (lock) Brand.DB.BWPage.LockProperty(mainProp.id);
    else Brand.DB.BWPage.UnlockProperty(mainProp.id);
  },

  this.edit = function() {
    this.checkLoggedIn();
    var response = Brand.DB.BWPage.IsLockedProperty(mainProp.id);
    if (response.value)
      alert(this.TL("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").parentNode;
      while (elem) {
        if (elem.style) {
          this.parentelems.push({
            elem: elem,
            overflow: elem.style.overflow
          });
          elem.style.overflow = "visible";
        }
        elem = elem.parentNode;
      }
    }
    else if (this.parentelems) {
      for (var i=0; i < this.parentelems.length; i++)
        this.parentelems[i].elem.style.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 (this.param.fixParentOverflow) this.fixParentOverflow(show);
    $S(tinyId + "_viewcontrols").display = (show ? "none" : "block");
    var e = $(tinyId + "_static");
    if (e != null) e.style.display = (show ? "none" : "block");
    e = $(tinyId + "_edit");
    if (e != null) e.style.display = (show ? "block" : "none");
    if (this.param["showEditorCallback"] && typeof(this.param["showEditorCallback"]) == "function")
      this.param.showEditorCallback(show);
    if (show && this.param.afterShowEditor) this.param.afterShowEditor(this);
    if (!show && this.param.afterHideEditor) this.param.afterHideEditor(this);
  },

  this.publish = function() {
    this.checkLoggedIn();
    var response = Brand.DB.BWPage.PublishProperty(mainProp.id);
    this.showElem(tinyId + "_publish", "none");
    this.showElem(tinyId + "_unpublish", "none");
    this.showElem(tinyId + "_publishinfo", "none");
  },

  this.unpublish = function() {
    this.checkLoggedIn();
    if (confirm(this.TL("Ã„r du sÃ¤ker pÃ¥ att du vill Ã¥ngra Ã¤ndringar och Ã¥tergÃ¥ till det senast publicerade vÃ¤rdet") + "?")) {
      Brand.DB.BWPage.UnpublishProperty(mainProp.id);
      var textProp = (language == "sv" || !this.param["languageDependent"] ? "text" : "text_" + language);
      var response = Brand.DB.BWPage.GetPropVal(mainProp.id, textProp);
      this.setTinyContent(response.value);
      this.setStaticContent($(tinyId + "_static"), response.value);

      this.showElem(tinyId + "_publish", "none");
      this.showElem(tinyId + "_unpublish", "none");
      this.showElem(tinyId + "_publishinfo", "none");
    }
  },

  this.save = function(publish) {
    this.checkLoggedIn();
    //if (this.isChanged) {
      var html = tinyMCE.editors[tinyId + "_mce"].getContent();
      Brand.DB.BWPage.SavePropVal(mainProp.id, "text", html, publish);

      this.setStaticContent($(tinyId + "_static"), html);
      this.showElem(tinyId + "_publish", (publish ? "none" : "inline"));
      this.showElem(tinyId + "_unpublish", (publish ? "none" : "inline"));
      this.showElem(tinyId + "_publishinfo", (publish ? "none" : "inline"));
    //}
    this.lockProperty(false);
    this.showEditor(false);
    this.isChanged = false;
  },

  this.undo = function() {
    this.checkLoggedIn();
    if (this.isChanged) {
      var html = $(tinyId + "_static").innerHTML;
      this.setTinyContent(html);
    }
    this.lockProperty(false);
    this.showEditor(false);
    this.isChanged = false;
  },

  this.showHide = function() {
    this.checkLoggedIn();
    var show = !mainProp.isVisible;
    Brand.DB.BWPage.ShowHideProperty(mainProp.id, show);
    mainProp.isVisible = !mainProp.isVisible;

    $(tinyId + "_mce_showhide").title = (show ? this.TL("DÃ¶lj elementet pÃ¥ den publika sidan") : this.TL("Visa elementet pÃ¥ den publika sidan"));
    $(tinyId + "_mce_showhide").firstChild.src = (show ? "admin/tiny_mce3/gfx/hide.gif" : "admin/tiny_mce3/gfx/show.gif");
  },

  this.share = function() {
    this.checkLoggedIn();

    var share = !mainProp.isShared;
    var ok = true;
    if (share) {
      var response = Brand.DB.BWPage.ShareWillLooseData(_pageId, mainProp.name);
      if (response.value)
        ok = confirm(this.TL("Denna Ã¥tgÃ¤rd medfÃ¶r att nuvarande information i kontrollen ersÃ¤tts med delad information. Vill du fortsÃ¤tta") + "?");
    }
    if (ok) {
      var response = Brand.DB.BWPage.SetSharing(_pageId, mainProp.id, "", share);

      if (response.value.length > 0) {
        mainProp.isShared = !mainProp.isShared;
        $(tinyId + "_mce_share").title = (share ? this.TL("Ã…ngra delning av elementets egenskaper med andra webbsidor") : this.TL("Dela elementets egenskaper med andra webbsidor"));
        $(tinyId + "_mce_share").firstChild.src = (share ? "admin/tiny_mce3/gfx/unshare.gif" : "admin/tiny_mce3/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($(tinyId + "_static"), html);
        }

        if (published.length > 0) {
          this.showElem(tinyId + "_publish", (published ? "none" : "inline"));
          this.showElem(tinyId + "_unpublish", (published ? "none" : "inline"));
          this.showElem(tinyId + "_publishinfo", (published ? "none" : "inline"));
        }
      }
    }
  },


  this.common = function() {
    this.checkLoggedIn();
    var share = !mainProp.isCommon;
    var ok;
    if (share) ok = confirm(this.TL("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.TL("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 = Brand.DB.BWPage.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($(tinyId + "_static"), html);

        $(tinyId + "_mce_common").title = (share ? this.TL("Ã…ngra delning av elementets egenskaper med hela sajten") : this.TL("Dela elementets egenskaper med hela sajten"));
        $(tinyId + "_mce_common").firstChild.src = (share ? "admin/tiny_mce3/gfx/uncommon.gif" : "admin/tiny_mce3/gfx/common.gif");
        $S(tinyId + "_mce_share").display = (shared ? "none" : "");

        if (published.length > 0) {
          this.showElem(tinyId + "_publish", (published ? "none" : "inline"));
          this.showElem(tinyId + "_unpublish", (published ? "none" : "inline"));
          this.showElem(tinyId + "_publishinfo", (published ? "none" : "inline"));
        }
      }
    }
  },

  this.showPermissions = function() {
    var response = Brand.DB.BWPage.GetRoles("dummy");
    var res = response.value.split(';');
    var roles = res[1].split('|');
    var html = "<p class='ajaxHeadline'>" + this.TL("Roller") + "</p><select id='" + tinyId + "_rolelist' onChange=" + this.obj() + ".tinyRoleChanged(this)><option>--" + this.TL("VÃ¤lj roll") + "--</option>";
    for (var i=0; i < roles.length; i++)
      html += "<option>" + roles[i] + "</option>";
    html += "</select><a href='javascript:" + this.obj() + ".tinyDefaultPermissions()' style='margin-left:20px' onfocus='this.blur()' title='" + this.TL("SÃ¤tt standardbehÃ¶righeter fÃ¶r rollen") + "'><img src='admin/gfx/default.gif' alt='" + this.TL("SÃ¤tt standardbehÃ¶righeter fÃ¶r rollen") + "' border=0 /></a>";
    $(tinyId + "_permissionroles").innerHTML = html;
    $S(tinyId + "_permissions").innerHTML = "";
    $S(tinyId + "_permissiondiv").display = "block";
  },

  this.hidePermissions = function() {
    $S(tinyId + "_permissiondiv").display = "none";
  },

  this.highlight = function(hl) {
    $(tinyId + "_static").className = (hl ? "highlightEdit" : "");
    $S(tinyId + "_viewcontrols").display = (hl ? "block" : "none");
  },

  this.tinyDefaultPermissions = function() {
    var list = $(tinyId + "_rolelist");
    if (list.selectedIndex == 0)
      alert(this.TL("VÃ¤lj roll"));
    else {
      var role = list.options[list.selectedIndex].innerHTML;
      var response = Brand.DB.BWPage.SetDefaultPermissions(mainProp.id, role);
      this.tinyRoleChanged(list);
    }
  },

  this.tinyRoleChanged = function(list) {
    if (list.selectedIndex == 0) {
      $(tinyId + "_permissions").innerHTML = "";
    }
    else {
      var role = list.options[list.selectedIndex].innerHTML;
      var response = Brand.DB.BWPage.GetPermissionInfo(role, mainProp.id);
      var html = "<p class='ajaxHeadline'>" + this.TL("BehÃ¶righeter") + "</p><table cellspacing=0 cellpadding=0>";
      for (var i=0; i < response.value.length; i++) {
        var help = response.value[i].split('|');
        html += "<tr><td>" + help[0] + "</td><td><input type='checkbox' " + (help[2] == "y" ? "checked" : "") + " onclick='" + this.obj() + ".permClicked(\"" + role + "\", \"" + help[1] + "\", this.checked)' /></td></tr>";
      }
      html += "</table>";
      $(tinyId + "_permissions").innerHTML = html;
    }
  },

  this.permClicked = function(role, actiontype, permission) {
    Brand.DB.BWPage.SetRichTextPermission(mainProp.id, role, actiontype, permission);
  },

  this.arrindex = ajaxtiny.length;
  ajaxtiny.push(this);
}


function showEditControls() {
  var divs = document.getElementsByTagName("DIV");
  for (var i=0; i < divs.length; i++) {
    if (divs[i].className == "ajaxToolbarStatic")
      divs[i].style.display = "block";
  }
}

var setupTinyControlsDone = null;

function setupTinyControls(f) {
  setupTinyControlsDone = f;
  setupNextTiny();
}

function setupNextTiny(tiny) {
  var idx = (tiny ? tiny.arrindex + 1 : 0);
  while (ajaxtiny.length > idx && ajaxtiny[idx].setupDone)
    idx++;
  if (ajaxtiny.length > idx) {
    if (ajaxtiny[idx].param["onInitDone"] == null)
      ajaxtiny[idx].param["onInitDone"] = setupNextTiny;
    ajaxtiny[idx].setup();
  }
  else if (setupTinyControlsDone)
    setupTinyControlsDone();
}

function writeFlash(id, p) {
  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 ($(id)) $(id).innerHTML = h;
}

