var engine_messages_process = "webcpms/proc_messages.php";


var ajaxLoadEMailTemplates,
    ajaxSaveEMailCategory,
    ajaxDeleteEMailCategory,
    ajaxSaveEMailTemplate,
    ajaxSendEMailMessage,
    ajaxLoadMessagesPosted = new Array();

function EMailCategory(id, titles, templates) {
   this.id = id;
   this.titles = titles;
   this.templates = templates;

   var i = 0;

   this.title = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.titles.length && this.titles[i][0] != lang) i++;
      return (i < this.titles.length ? this.titles[i][1] : "");
   }
}

function EMailTemplate(category_id, id, autoresponse, subjects, bodies) {
   this.category_id = category_id;
   this.id = id;
   this.autoresponse = autoresponse;
   this.subjects = subjects;
   this.bodies = bodies;

   var i = 0;

   this.subject = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.subjects.length && this.subjects[i][0] != lang) i++;
      return (i < this.subjects.length ? this.subjects[i][1] : "");
   }

   this.body = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.bodies.length && this.bodies[i][0] != lang) i++;
      return (i < this.bodies.length ? this.bodies[i][1] : "");
   }
}


var email_categories;



function getEMailCategory(id, category_arr) {
   if (category_arr == null || id == null || id == "") return null;
   var i = 0;
   while (i < category_arr.length && category_arr[i].id != id) i++;
   if (i < category_arr.length) return category_arr[i];
   return null;
}


function getEMailTemplate(category_id, template_id, category_arr) {
   if (template_id == 0) {
      var ct = category_id.split(".");
      category_id = ct[0];
      template_id = ct[1];
   }

   var c = getEMailCategory(category_id, category_arr);
   if (c == null) return null;

   var i = 0;
   while (i < c.templates.length && c.templates[i].id != template_id) i++;
   if (i < c.templates.length) return c.templates[i];
   return null;
}



function loadEMailTemplates(prefix, callback, refpanel, force) {
   if (force || document.getElementById(prefix + 'CategoriesUpdated').value == 0) {
      startIndicator(prefix + "TemplateIndicator", "Loading categories", refpanel);
      var cmd = "cmd=cmdLoadEMailTemplates&sid=" + document.getElementById('SessionID').value;
      load(ajaxLoadEMailTemplates = GetXmlHttpObject(), engine_messages_process, cmd, callback);
      return true;
   }
   return false;
}

function loadedEMailTemplates() {
   if (ajaxLoadEMailTemplates.readyState == 4 || ajaxLoadEMailTemplates.readyState == "complete") {
      stopIndicator("EMailTemplateIndicator");
      updateEMailCategories(ajaxLoadEMailTemplates.responseText);
   }
}


function parseEMailTemplates(xml_text, email_categories_arr) {
   var new_category = 0, sel_category = 0, new_template = 0;

   var xml_doc = createXmlDoc(xml_text);

   var cats = xml_doc.getElementsByTagName("category");
   var i, j;
   for (i = 0; i < cats.length; i++) {
      var id = getElemAttributeValue(cats[i], "id");
      if (getElemAttributeValue(cats[i], "new") == "true") new_category = id;
      if (getElemAttributeValue(cats[i], "sel") == "true") sel_category = id;
      var titles = collectTagsByAttribute(cats[i], "title", "lang");

      var templates = new Array();

      var temps = cats[i].getElementsByTagName("template");
      for (j = 0; j < temps.length; j++) {
         var t_id = getElemAttributeValue(temps[j], "id");
         var t_autoresponse = findTagByName(temps[j], "autoresponse") ? findTagByName(temps[j], "autoresponse").childNodes[0].nodeValue : "";
         if (getElemAttributeValue(temps[j], "new") == "true") new_template = t_id;
         var subjects = collectTagsByAttribute(temps[j], "subject", "lang");
         var bodies = collectTagsByAttribute(temps[j], "body", "lang");
         templates[templates.length] = new EMailTemplate(id, t_id, t_autoresponse, subjects, bodies);
      }

      email_categories_arr[email_categories_arr.length] = new EMailCategory(id, titles, templates);
   }

   return new Array(new_category, new_template, sel_category);
}


function updateEMailCategories(xml_text) {

   email_categories = new Array();

   cts = parseEMailTemplates(xml_text, email_categories);

   if (cts[0] > 0) document.getElementById('EMailCategoryModify').value = cts[0];
   if (cts[1] > 0) document.getElementById('EMailTemplateModify').value = cts[1];

   document.getElementById('EMailCategoriesUpdated').value = 1;

   printEMailCategoryList();
   printEMailCategorySelector('EMailEditTemplateCategorySelector', cts[2]);
}


function printEMailCategoryList() {
   var host = document.getElementById('EMailListCategoriesHost');

   if (email_categories.length == 0) {
      host.innerHTML = "<div class='note'>No categories</div>\r\n";
      return;
   }

   var i, j;

   var list = "";

   list += "<table class='width100'>";
   for (i = 0; i < email_categories.length; i++) {
//      list += "<tr><td><div><span class='email_category' onmouseover=\"toggle('EMailCategoryControls_" + email_categories[i].id + "', true, 'inline');\" onmouseout=\"toggle('EMailCategoryControls_" + email_categories[i].id + "', false, 'none');\" onclick=\"editEMailCategory(" + email_categories[i].id + ");\">" + email_categories[i].title() + "&nbsp;<span id='EMailCategoryControls_" + email_categories[i].id + "' style='display: none;'><img src='webcpms/icons/icon_edit_big.gif' title='Edit category' class='rte_dropdn' onclick=\"editEMailCategory(" + email_categories[i].id + ");\" />&nbsp;<img src='webcpms/icons/icon_delete_big.gif' title='Delete category' class='rte_dropdn' onclick=\"deleteEMailCategory(" + email_categories[i].id + ");\" /></span></span></div>";
      list += "<tr><td><div><span class='email_category' onmouseover=\"toggle('EMailCategoryControls_" + email_categories[i].id + "', true, 'inline');\" onmouseout=\"toggle('EMailCategoryControls_" + email_categories[i].id + "', false, 'none');\">" + email_categories[i].title() + "&nbsp;<span id='EMailCategoryControls_" + email_categories[i].id + "' style='display: none;'><img src='webcpms/icons/icon_edit_big.gif' title='Edit category' class='rte_dropdn' onclick=\"editEMailCategory(" + email_categories[i].id + ");\" />&nbsp;<img src='webcpms/icons/icon_delete_big.gif' title='Delete category' class='rte_dropdn' onclick=\"deleteEMailCategory(" + email_categories[i].id + ");\" /></span></span></div>";
      for (j = 0; j < email_categories[i].templates.length; j++) {
//         list += "<div><span class='email_template" + (email_categories[i].templates[j].autoresponse.length > 0 ? "_autoresponse" : "") + "' onmouseover=\"toggle('EMailTemplateControls_" + email_categories[i].templates[j].id + "', true, 'inline');\" onmouseout=\"toggle('EMailTemplateControls_" + email_categories[i].templates[j].id + "', false, 'none');\" onclick=\"editEMailTemplate(" + email_categories[i].id + ", " + email_categories[i].templates[j].id + ");\">" + email_categories[i].templates[j].subject() + "&nbsp;<span id='EMailTemplateControls_" + email_categories[i].templates[j].id + "' style='display: none;'><img src='webcpms/icons/icon_edit_big.gif' title='Edit template' class='rte_dropdn' onclick=\"editEMailTemplate(" + email_categories[i].id + ", " + email_categories[i].templates[j].id + ");return false;\" />&nbsp;<img src='webcpms/icons/icon_delete_big.gif' title='Delete template' class='rte_dropdn' onclick=\"deleteEMailTemplate(" + email_categories[i].id + ", " + email_categories[i].templates[j].id + ");return false;\" /></span></span></div>";
         list += "<div><span class='email_template" + (email_categories[i].templates[j].autoresponse.length > 0 ? "_autoresponse" : "") + "' onmouseover=\"toggle('EMailTemplateControls_" + email_categories[i].templates[j].id + "', true, 'inline');\" onmouseout=\"toggle('EMailTemplateControls_" + email_categories[i].templates[j].id + "', false, 'none');\">" + email_categories[i].templates[j].subject() + "&nbsp;<span id='EMailTemplateControls_" + email_categories[i].templates[j].id + "' style='display: none;'><img src='webcpms/icons/icon_edit_big.gif' title='Edit template' class='rte_dropdn' onclick=\"editEMailTemplate(" + email_categories[i].id + ", " + email_categories[i].templates[j].id + ");return false;\" />&nbsp;<img src='webcpms/icons/icon_delete_big.gif' title='Delete template' class='rte_dropdn' onclick=\"deleteEMailTemplate(" + email_categories[i].id + ", " + email_categories[i].templates[j].id + ");return false;\" /></span></span></div>";
      }
      list += "</td></tr>\r\n";
   }
   list += "</table>";

   host.innerHTML = list;
}





function printEMailCategorySelector(prefix, sel_category) {

   var host = document.getElementById(prefix + "Host");

   if (email_categories.length == 0) {
      host.innerHTML = "<input type='hidden' id='" + prefix + "' value='-1' /><div class='note'>No categories</div>\r\n";
      return;
   }

   var i;
   var s = "";

   s += "<select id='" + prefix + "' onchange=\"checkEMailCategory();\">";
   s += "<option value='0'>- Select a category -</option>";
   for (i = 0; i < email_categories.length; i++) {
      var sel = sel_category == email_categories[i].id ? " selected='selected'" : "";
      s += "<option value='" + email_categories[i].id + "'" + sel + ">" + email_categories[i].title() + "</option>";
   }
   s += "</select>";

   host.innerHTML = s;

   if (sel_category > 0) document.getElementById('EMailCategorySelectionOrig').value = sel_category;
}


function checkEMailCategory() {
   if (document.getElementById('EMailTemplateModify').value != "") {
      toggle("EMailCategoryActionHost", document.getElementById('EMailCategorySelectionOrig').value != document.getElementById('EMailEditTemplateCategorySelector').value);
   }
}


function resetEMailCategoryEditor() {
   var i;
   for (i = 0; i < languages.length; i++) {
      document.getElementById('EMailCategoryTitle_' + languages[i].descr).value = "";
   }

   document.getElementById('EMailCategoryModify').value = "";
}


function saveEMailCategory() {

   var title = checkTitle("EMailCategory", true);

   if (title.length == 0) return;

   startIndicator("EMailTemplateIndicator", "Saving category", "EMailMainPanel");

   document.getElementById('EMailCategoriesUpdated').value = 0;

   var modify = document.getElementById('EMailCategoryModify').value;
   var cmd = "cmd=cmdSaveEMailCategory&sid=" + document.getElementById('SessionID').value + (modify == "" ? "" : "&modify=" + modify) + title;
   load(ajaxSaveEMailCategory = GetXmlHttpObject(), engine_messages_process, cmd, savedEMailCategory);
}

function savedEMailCategory() {
   if (ajaxSaveEMailCategory.readyState == 4 || ajaxSaveEMailCategory.readyState == "complete") {
      stopIndicator("EMailTemplateIndicator");
      updateEMailCategories(ajaxSaveEMailCategory.responseText);
   }
}


function editEMailCategory(category_id) {
   switchTab('EMail', 'EMailEditCategoryTab');

   var c = getEMailCategory(category_id, email_categories);
   if (!c) {
      return;
   }

   var i;
   for (i = 0; i < languages.length; i++) {
      document.getElementById('EMailCategoryTitle_' + languages[i].descr).value = c.title(languages[i].descr);
   }

   document.getElementById('EMailCategoryModify').value = c.id;
}

function deleteEMailCategory(category_id) {
   var c = getEMailCategory(category_id, email_categories);
   if (!c) {
      return;
   }
   if (!confirm("Do you really want to delete this category?\n   " + c.title() + "\nAll templates in this category will also be deleted.\n\nTHIS CANNOT BE UNDONE!\n\nContinue?")) {
      return;
   }

   startIndicator("EMailTemplateIndicator", "Deleting category", "EMailMainPanel");

   var cmd = "cmd=cmdDeleteEMailCategory&sid=" + document.getElementById('SessionID').value + "&category=" + c.id;
   load(ajaxDeleteEMailCategory = GetXmlHttpObject(), engine_messages_process, cmd, deletedEMailCategory);
}

function deletedEMailCategory() {
   if (ajaxDeleteEMailCategory.readyState == 4 || ajaxDeleteEMailCategory.readyState == "complete") {
      stopIndicator("EMailTemplateIndicator");
      updateEMailCategories(ajaxDeleteEMailCategory.responseText);
   }
}




function resetEMailTemplateEditor() {
   var sel = document.getElementById('EMailEditTemplateCategorySelector');
   if (sel.type.toLowerCase().indexOf("select") > -1) {
      document.getElementById('EMailEditTemplateCategorySelector').value = 0;
   }

   var i;
   wreEMailTemplateDescr.setText();
   for (i = 0; i < languages.length; i++) {
      wreEMailTemplateDescr.setDocument(languages[i].descr);
      document.getElementById('EMailTemplateTitle_' + languages[i].descr).value = "";
   }

   toggle('EMailAutoResponseFor', false);
   toggle('EMailAutoResponseLabel', false);
   document.getElementById('EMailAutoResponseFor').innerHTML = "";

   document.getElementById('EMailCategorySelectionOrig').value = "";
   document.getElementById('EMailTemplateModify').value = "";
}


function editEMailTemplate(category_id, template_id) {
   switchTab('EMail', 'EMailEditTemplateTab');

   var t = getEMailTemplate(category_id, template_id, email_categories);
   if (!t) {
      return;
   }

   document.getElementById('EMailEditTemplateCategorySelector').value = t.category_id;

   var i;
   for (i = 0; i < languages.length; i++) {
      document.getElementById('EMailTemplateTitle_' + languages[i].descr).value = t.subject(languages[i].descr);
      wreEMailTemplateDescr.setDocument(languages[i].descr, t.body(languages[i].descr));
      if (document.getElementById('lang').value == languages[i].descr) {
         wreEMailTemplateDescr.setText(t.body(languages[i].descr));
      }
   }

   if (t.autoresponse.length > 0) {
      toggle('EMailAutoResponseFor', true);
      toggle('EMailAutoResponseLabel', true);
      document.getElementById('EMailAutoResponseFor').innerHTML = t.autoresponse;
   } else {
      toggle('EMailAutoResponseFor', false);
      toggle('EMailAutoResponseLabel', false);
      document.getElementById('EMailAutoResponseFor').innerHTML = "";
   }

   document.getElementById('EMailCategorySelectionOrig').value = t.category_id;
   document.getElementById('EMailTemplateModify').value = t.id;
}


function saveEMailTemplate() {

   var category = document.getElementById('EMailEditTemplateCategorySelector').value;
   if (category == -1) {
      alert("Please create a category first");
      return;
   } else if (category == 0) {
      alert("Please select a category for the template");
      return;
   }

   var title_descr = checkTitleDescr("EMailTemplate", TITLE_ONLY);

   if (title_descr.length == 0) return;

   document.getElementById('EMailCategoriesUpdated').value = 0;

   var action = "";
   var modify = document.getElementById('EMailTemplateModify').value;
   if (document.getElementById('EMailCategorySelectionOrig').value != document.getElementById('EMailEditTemplateCategorySelector').value) {
      action = document.getElementById('EMailCategoryActionCopy').checked ? "copy" : "move";
   }

   toggle("EMailCategoryActionHost", false);

   startIndicator("EMailTemplateIndicator", "Saving template", "EMailMainPanel");

   var cmd = "cmd=cmdSaveEMailTemplate&sid=" + document.getElementById('SessionID').value + (modify == "" ? "" : "&modify=" + modify) + "&category=" + category + "&action=" + action + title_descr;
   load(ajaxSaveEMailTemplate = GetXmlHttpObject(), engine_messages_process, cmd, savedEMailTemplate);
}

function savedEMailTemplate() {
   if (ajaxSaveEMailTemplate.readyState == 4 || ajaxSaveEMailTemplate.readyState == "complete") {
      stopIndicator("EMailTemplateIndicator");
      updateEMailCategories(ajaxSaveEMailTemplate.responseText);
   }
}




function deleteEMailTemplate(category_id, template_id) {
   var t = getEMailTemplate(category_id, template_id, email_categories);
   if (!t) {
      return;
   }
   if (!confirm("Do you really want to delete this template?\n   " + t.subject() + "\n\nTHIS CANNOT BE UNDONE!\n\nContinue?")) {
      return;
   }

   startIndicator("EMailTemplateIndicator", "Deleting template", "EMailMainPanel");

   var cmd = "cmd=cmdDeleteEMailTemplate&sid=" + document.getElementById('SessionID').value + "&template=" + t.id;
   load(ajaxDeleteEMailTemplate = GetXmlHttpObject(), engine_messages_process, cmd, deletedEMailTemplate);
}

function deletedEMailTemplate() {
   if (ajaxDeleteEMailTemplate.readyState == 4 || ajaxDeleteEMailTemplate.readyState == "complete") {
      stopIndicator("EMailTemplateIndicator");
      updateEMailCategories(ajaxDeleteEMailTemplate.responseText);
   }
}







function printEMailTemplateSelector(prefix, email_categories_arr, onchange, sel_category, sel_template, print_autoresponses) {
   if (onchange == null) onchange = "";
   if (sel_category == null) sel_category = 0;
   if (sel_template == null) sel_template = 0;
   if (print_autoresponses == null) print_autoresponses = false;

   var host = document.getElementById(prefix + "TemplateSelectorHost");

   if (email_categories_arr.length == 0) {
      host.innerHTML = "<input type='hidden' id='" + prefix + "TemplateSelector' value='-1' /><div class='note'>No categories</div>\r\n";
      return;
   }

   var i, j;
   var s = "";

   var cs = new Array();

   for (i = 0; i < email_categories_arr.length; i++) {
      var c = "";
      if ( sel_category > 0 && email_categories_arr[i].id == sel_category ? true : (sel_category == 0 ? true : false) ) {
         var ts = new Array();
         for (j = 0; j < email_categories_arr[i].templates.length; j++) {
            if (!print_autoresponses && email_categories_arr[i].templates[j].autoresponse.length > 0) continue;
            var tc = email_categories_arr[i].id + "." + email_categories_arr[i].templates[j].id;
            var sel = sel_template == tc ? " selected='selected'" : "";
            ts[ts.length] = "<option value='" + tc + "'" + sel + ">" + email_categories_arr[i].templates[j].subject() + "</option>";
         }
         if (ts.length > 0) {
            c += "<optgroup label='" + email_categories_arr[i].title() + "'>\r\n";
            c += ts.join("\r\n");
            c += "</optgroup>";
            cs[cs.length] = c;
         }
      }
   }
   if (cs.length > 0) {
      s += "<select id='" + prefix + "TemplateSelector'" + (onchange.length > 0 ? " onchange=\"" + onchange + "\"" : "") + ">\r\n";
      s += "<option value='0'>- Select a template -</option>\r\n";
      s += cs.join("\r\n");
      s += "</select>\r\n";
   } else {
      s += "<input type='hidden' id='" + prefix + "TemplateSelector' value='-1' /><div class='note'>No user templates</div>\r\n";
   }

//   s += "&nbsp;[&nbsp;<span class='menuitem'>Edit</span>&nbsp;|&nbsp;<span class='menuitem' onclick=\"toggle('" + prefix + "PreviewHost');\">Preview</span>&nbsp;]";
//
//   s += "<div id='" + prefix + "PreviewHost' class='innerpanel' style='display: none; width: 400px; height: 300px; overflow: auto;'></div>";

   host.innerHTML = s;

   document.getElementById(prefix + "CategoriesUpdated").value = 1;
}







function sendEMailMessage(prefix, parent_panel, host_panel, onready) {

   if (onready == null) onready = "";

   var from_name = encodeURIComponent(document.getElementById(prefix + 'FromName').value);
   var from_email = document.getElementById(prefix + 'FromEMail').value;
   if (from_name.length == 0 || !validateEMail(from_email)) {
      alert("Please specify a sender name and a valid sender e-mail address");
      return;
   }

   var to_id_list = document.getElementById(prefix + 'ToID').value;
   var to_name_list = document.getElementById(prefix + 'ToName').value;
   var to_email_list = document.getElementById(prefix + 'ToEMail').value;

   var to_ids = to_id_list.split("|");
   var to_names = to_name_list.split("|");
   var to_emails = to_email_list.split("|");

   var i, err = false;
   for (i = 0; i < to_names.length && !err; i++) {
//      var chk = true;
//      if (document.getElementById(prefix + 'ToCheck_' + i)) {
//         if (!document.getElementById(prefix + 'ToCheck_' + i).checked) chk = false;
//      }
//      if (chk) {
         var to_name = to_names[i];
         var to_email = decodeURIComponent(to_emails[i]);
         if (to_name.length == 0 || !validateEMail(to_email)) {
            err = true;
         }
//      }
   }
   if (err) {
      alert("Please specify a recipient name and a valid recipient e-mail address");
      return;
   }

   var subject = encodeURIComponent(document.getElementById(prefix + 'Subject').value);
   if (subject.length == 0) {
      alert("Please write a subject for the message");
      return;
   }

   var body = "";
   var e = eval("wre" + prefix + "Text");
   var p = e.getPlugIn(prefix + "MessageScroller");
   if (p == null) {
      var e = eval("wre" + prefix + "Text");
      body = encodeURIComponent(e.getText(false, document.getElementById('lang').value));
   } else {
////      for (i = 0; i < to_ids.length && document.getElementById(prefix + 'ToCheck_' + i).checked; i++) {
      for (i = 0; i < p.data.length; i++) p.data[i] = encodeURIComponent(p.data[i]);
      body = p.data.join("|");
   }
   if (body.length == 0) {
      alert("Please write a body for the message");
      return;
   }

   document.getElementById(prefix + 'SendMessageButton').disabled = true;
   startIndicator(prefix + "SendMessageIndicator", "Sending");

   var cmd = "cmd=cmdSendEMailMessage&sid=" + document.getElementById('SessionID').value + "&from_id=" + document.getElementById(prefix + 'FromID').value + "&from_name=" + from_name + "&from_email=" + encodeURIComponent(from_email) + "&to_id=" + document.getElementById(prefix + 'ToID').value + "&to_name=" + to_name_list + "&to_email=" + to_email_list + "&subject=" + subject + "&body=" + body + "&prefix=" + prefix + "&parent_panel=" + parent_panel + "&host_panel=" + host_panel + (onready.length > 0 ? "&onready=" + onready : "");
   load(ajaxSendEMailMessage = GetXmlHttpObject(), engine_messages_process, cmd, sentEMailMessage);
}



function sentEMailMessage() {
   if (ajaxSendEMailMessage.readyState == 4 || ajaxSendEMailMessage.readyState == "complete") {
      var res = ajaxSendEMailMessage.responseText;
      var prefix = getProperty("Prefix", res);
      stopIndicator(prefix + "SendMessageIndicator");
      document.getElementById(prefix + 'SendMessageButton').disabled = false;
      var to_ids = getProperty("ToIDs", res);
      var parent_panel = getProperty("ParentPanel", res);
      var host_panel = getProperty("HostPanel", res);
      toggle(parent_panel, true);
      toggle(host_panel, false);
      var onready = getProperty("OnReady", res);
      if (onready.length > 0) {
         eval(onready + "('" + to_ids + "')");
      }
   }
}


var email_repository = new Array();

function EMailMessage(id, user, from, to, subject, body, posted, opened) {
   this.id = id;
   this.user = user;
   this.from = from;
   this.to = to;
   this.subject = decodeURIComponent(subject);
   this.body = decodeURIComponent(body);
   this.posted = (posted instanceof Date ? posted : parseSqlDate(posted));
   this.opened = (opened instanceof Date ? opened : parseSqlDate(opened));
}



function getEMailMessage(id, email_messages_arr) {
   if (email_messages_arr == null || id == null || id == "") return null;
   var i = 0;
   while (i < email_messages_arr.length && email_messages_arr[i].id != id) i++;
   if (i < email_messages_arr.length) return email_messages_arr[i];
   return null;
}


function getMessageList(prefix) {
   var i = 0;
   while (i < email_repository.length && email_repository[i][0] != prefix) i++;
   if (i < email_repository.length) return email_repository[i][1];
   return null;
}


function addMessageList(prefix, msg_list) {
   var i = 0;
   while (i < email_repository.length && email_repository[i][0] != prefix) i++;
   if (i < email_repository.length) {
      email_repository[i][1] = msg_list;
   } else {
      email_repository[email_repository.length] = new Array(prefix, msg_list);
   }
}



function loadMessagesPosted(prefix, refpanel, force, sel_param_list) {
   if (force || document.getElementById(prefix + 'MessagesPostedUpdated').value == 0) {
      var sp = "";
      if (sel_param_list) {
         var sel_params = (sel_param_list instanceof Array ? sel_param_list : sel_param_list.split("|"));
         for (i = 0; i < sel_params.length; i++) {
            var nv = sel_params[i].split("=");
            sp += "&sel_param_name_" + i + "=" + nv[0];
            sp += "&sel_param_value_" + i + "=" + nv[1];
         }
      }
      startIndicator(prefix + "TemplateIndicator", "Loading messages", refpanel);
      var cmd = "cmd=cmdLoadMessagesPosted&sid=" + document.getElementById('SessionID').value + "&prefix=" + prefix + sp;
      load(GetXmlHttpObject(ajaxLoadMessagesPosted, prefix), engine_messages_process, cmd, loadedMessagesPosted);
      return true;
   }
   printEMailMessageList(prefix, prefix == "EMail" ? -1 : 3);
   return false;
}


function loadedMessagesPosted() {
   var messages_elem = getXmlHttpResponse(ajaxLoadMessagesPosted, "messages", "prefix");
   if (messages_elem == null) return;

   var email_messages = new Array();

   var prefix = parseMessagesPosted(messages_elem, email_messages);
   stopIndicator(prefix + "TemplateIndicator");

   addMessageList(prefix, email_messages);

   document.getElementById(prefix + 'MessagesPostedUpdated').value = 1;

   printEMailMessageList(prefix, prefix == "EMail" ? -1 : 3);
}


function parseMessagesPosted(messages_elem, email_messages_arr) {

   var prefix = getElemAttributeValue(messages_elem, "prefix");

   var msgs = messages_elem.getElementsByTagName("message");
   var i, j;
   for (i = 0; i < msgs.length; i++) {
      var id = getElemAttributeValue(msgs[i], "id");
      var posted = getElemAttributeValue(msgs[i], "posted");
      var user = parsePersonXML(msgs[i].getElementsByTagName("user"), null, true);
      var from = parsePersonXML(msgs[i].getElementsByTagName("from"));
      var tos = msgs[i].getElementsByTagName("to");
      var to = parsePersonXML(tos);
      var opened = getElemAttributeValue(tos[0], "opened");
      var subject = findTagByName(msgs[i], "subject").childNodes[0].nodeValue;
      var body = findTagByName(msgs[i], "body").childNodes[0].nodeValue;
      email_messages_arr[email_messages_arr.length] = new EMailMessage(id, user.length > 0 ? user[0] : null, from[0], to, subject, body, posted, opened);
   }

   return prefix;
}




function loadMsgPosted(prefix, id, refpanel, force) {
   if (force || document.getElementById(prefix + 'MsgPostedUpdated_' + id).value == 0) {
      startIndicator(prefix + "TemplateIndicator", "Loading message", refpanel);
      var cmd = "cmd=cmdLoadMessagesPosted&sid=" + document.getElementById('SessionID').value + "&prefix=" + prefix + "&sel_param_name_0=id&sel_param_value_0=" + id + "&sel_param_name_1=body&sel_param_value_1=true";
      load(GetXmlHttpObject(ajaxLoadMessagesPosted, prefix), engine_messages_process, cmd, loadedMsgPosted);
      return true;
   }
   toggle(prefix + 'MessagePreviewHost', true);
   var d = document.getElementById(prefix + 'MsgData_' + id).value.split("|");
   document.getElementById(prefix + 'MessageSubjectHost').innerHTML = decodeURIComponent(d[0]);
   document.getElementById(prefix + 'MessageInfoHost').innerHTML = decodeURIComponent(d[1]);
   document.getElementById(prefix + 'MessageBodyHost').innerHTML = decodeURIComponent(d[2]);
   document.getElementById(prefix + 'MessageBodyHost').style.height = (document.getElementById(prefix + 'MessagePreviewHost').offsetHeight - document.getElementById(prefix + 'MessageSubjectHost').offsetHeight - document.getElementById(prefix + 'MessageInfoHost').offsetHeight - 30) + "px";
   return false;
}



function loadedMsgPosted() {
   var message_elem = getXmlHttpResponse(ajaxLoadMessagesPosted, "messages", "prefix");
   if (message_elem == null) return;

   var email_message = new Array();

   var prefix = parseMessagesPosted(message_elem, email_message);
   stopIndicator(prefix + "TemplateIndicator");

   document.getElementById(prefix + 'MsgPostedUpdated_' + email_message[0].id).value = 1;

   toggle(prefix + 'MessagePreviewHost', true);

   var rs = getMessageRealSender(email_message[0]);

   var subject = email_message[0].subject;
   var fromto = "From: " + rs[0] + " &lt;" + rs[1] + "&gt;, To: " + email_message[0].to[0].getName() + " &lt;" + email_message[0].to[0].email + "&gt;";
   var body = email_message[0].body;

   document.getElementById(prefix + 'MessageSubjectHost').innerHTML = subject;
   document.getElementById(prefix + 'MessageInfoHost').innerHTML = fromto;
   document.getElementById(prefix + 'MessageBodyHost').innerHTML = body;
   document.getElementById(prefix + 'MessageBodyHost').style.height = (document.getElementById(prefix + 'MessagePreviewHost').offsetHeight - document.getElementById(prefix + 'MessageSubjectHost').offsetHeight - document.getElementById(prefix + 'MessageInfoHost').offsetHeight - 30) + "px";

   document.getElementById(prefix + 'MsgData_' + email_message[0].id).value = encodeURIComponent(subject) + "|" + encodeURIComponent(fromto) + "|" + encodeURIComponent(body);
}



function getMessageRealSender(msg) {
   var real_from = "<i>Auto-response</i>";
   var real_email = decodeURIComponent(document.getElementById('CompanyEMail').value);
   if (msg.user) {
      if (msg.user.id != msg.to[0].id) {
         real_from = msg.user.getName(NAMEFORMAT_NORMAL);
         real_email = msg.user.email;
      }
   }
   return new Array(real_from, real_email);
}



function printEMailMessageList(prefix, maxlen) {

   var email_messages_arr = getMessageList(prefix);
   if (!email_messages_arr) return;

   var msglist_ordering = document.getElementById(prefix + 'Ordering').value;
   var msglist_ordering_dir = document.getElementById(prefix + 'OrderingDir').value;

   if (msglist_ordering == "") msglist_ordering = document.getElementById(prefix + 'Ordering').value = "date";
   if (msglist_ordering_dir == "") msglist_ordering_dir = document.getElementById(prefix + 'OrderingDir').value = "desc";

   if (maxlen == null) maxlen = 3;

   var host = document.getElementById(prefix + 'ListMessagesHost');
   if (!host) return;

   var i;

   if (email_messages_arr.length == 0) {
      host.innerHTML = "<div style='border: solid 1px #a5acb2; text-align: center; padding: 5px; font-style: italic;'>No messages</div>";
      return;
   }

   setMessageListOrdering(prefix);

   var list = "<div style='border: solid 1px #a5acb2;'><div" + (maxlen != -1 && email_messages_arr.length > maxlen ? " style='height: 120px; overflow: auto;'" : "") + "><table cellpadding=0 cellspacing=0 class='width100'>";
   list += "<tr>";
   list += "<td id='" + prefix + "MessageFromHead' class='msg_head' onmouseover=\"msgHeadOverOut(this.id, '" + prefix + "', 'from', true);\" onmouseout=\"msgHeadOverOut(this.id, '" + prefix + "', 'from', false);\" onclick=\"setMessageListOrdering('" + prefix + "', 'from', true, " + maxlen + ");\" title='Order by sender in " + ("from" == msglist_ordering ? (msglist_ordering_dir == "asc" ? "descending" : "ascending") : (msglist_ordering_dir == "asc" ? "ascending" : "descending")) + " order'>From</td>";
   list += "<td id='" + prefix + "MessageToHead' class='msg_head' onmouseover=\"msgHeadOverOut(this.id, '" + prefix + "', 'to', true);\" onmouseout=\"msgHeadOverOut(this.id, '" + prefix + "', 'to', false);\" onclick=\"setMessageListOrdering('" + prefix + "', 'to', true, " + maxlen + ");\" title='Order by recipient in " + ("to" == msglist_ordering ? (msglist_ordering_dir == "asc" ? "descending" : "ascending") : (msglist_ordering_dir == "asc" ? "ascending" : "descending")) + " order'>To</td>";
   list += "<td id='" + prefix + "MessageSubjectHead' class='msg_head' onmouseover=\"msgHeadOverOut(this.id, '" + prefix + "', 'subject', true);\" onmouseout=\"msgHeadOverOut(this.id, '" + prefix + "', 'subject', false);\" onclick=\"setMessageListOrdering('" + prefix + "', 'subject', true, " + maxlen + ");\" title='Order by subject in " + ("from" == msglist_ordering ? (msglist_ordering_dir == "asc" ? "descending" : "ascending") : (msglist_ordering_dir == "asc" ? "ascending" : "descending")) + " order'>Subject</td>";
   list += "<td id='" + prefix + "MessageDateHead' class='msg_head' onmouseover=\"msgHeadOverOut(this.id, '" + prefix + "', 'date', true);\" onmouseout=\"msgHeadOverOut(this.id, '" + prefix + "', 'date', false);\" onclick=\"setMessageListOrdering('" + prefix + "', 'date', true, " + maxlen + ");\" title='Order by date in " + ("from" == msglist_ordering ? (msglist_ordering_dir == "asc" ? "descending" : "ascending") : (msglist_ordering_dir == "asc" ? "ascending" : "descending")) + " order'>Date</td>";
   list += "</tr>";

   for (i = 0; i < email_messages_arr.length; i++) {
      var real_sender = getMessageRealSender(email_messages_arr[i]);
      list += "<tr><td id='" + prefix + "MessageFrom_" + email_messages_arr[i].id + "' onmouseover=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", true);\" onmouseout=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", false);\" onclick=\"loadMsgPosted('" + prefix + "', " + email_messages_arr[i].id + ", '" + prefix + "ListMessagesHost');\" class='msg_item'><input type='hidden' id='" + prefix + "MsgPostedUpdated_" + email_messages_arr[i].id + "' value='0' /><input type='hidden' id='" + prefix + "MsgData_" + email_messages_arr[i].id + "' value='' />" + email_messages_arr[i].from.getName(NAMEFORMAT_NORMAL) + "<br />(" + real_sender[0] + ")</td><td id='" + prefix + "MessageTo_" + email_messages_arr[i].id + "' onmouseover=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", true);\" onmouseout=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ");\" onclick=\"loadMsgPosted('" + prefix + "', " + email_messages_arr[i].id + ", '" + prefix + "ListMessagesHost');\" class='msg_" + (email_messages_arr[i].opened ? "opened" : "not_opened") + "'>" + email_messages_arr[i].to[0].getName(NAMEFORMAT_NORMAL) + "</td><td id='" + prefix + "MessageSubject_" + email_messages_arr[i].id + "' onmouseover=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", true);\" onmouseout=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", false);\" onclick=\"loadMsgPosted('" + prefix + "', " + email_messages_arr[i].id + ", '" + prefix + "ListMessagesHost');\" class='msg_item' style='white-space: normal;'>" + email_messages_arr[i].subject + "</td><td id='" + prefix + "MessageDate_" + email_messages_arr[i].id + "' onmouseover=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", true);\" onmouseout=\"msgOverOut('" + prefix + "', " + email_messages_arr[i].id + ", false);\" onclick=\"loadMsgPosted('" + prefix + "', " + email_messages_arr[i].id + ", '" + prefix + "ListMessagesHost', true);\" class='msg_item'>" + formatDateTime(email_messages_arr[i].posted, "D, m/d/Y h:i A") + "</td></tr>";
   }

   list += "</table></div><div id='" + prefix + "MessagePreviewHost' class='msg_preview' style='display: none;'><span class='menuitem' style='float: right; text-align: right; font-weight: bold;' onclick=\"toggle('" + prefix + "MessagePreviewHost');\" title='Close message'>X</span><div id='" + prefix + "MessageSubjectHost' class='msg_subject'></div><div id='" + prefix + "MessageInfoHost' class='msg_info'></div><div id='" + prefix + "MessageBodyHost' class='msg_body'></div></div></div>";

   host.innerHTML = list;

   msgHeadOverOut(prefix + "MessageFromHead", prefix, msglist_ordering == "from" ? msglist_ordering : "");
   msgHeadOverOut(prefix + "MessageToHead", prefix, msglist_ordering == "to" ? msglist_ordering : "");
   msgHeadOverOut(prefix + "MessageSubjectHead", prefix, msglist_ordering == "subject" ? msglist_ordering : "");
   msgHeadOverOut(prefix + "MessageDateHead", prefix, msglist_ordering == "date" ? msglist_ordering : "");
}



function msgHeadOverOut(host_id, prefix, new_ordering, over) {
   var msglist_ordering = document.getElementById(prefix + 'Ordering').value;
   var msglist_ordering_dir = document.getElementById(prefix + 'OrderingDir').value;

   var host = document.getElementById(host_id);

   host.style.background = over ? ("url('webcpms/icons/scroll_" + (new_ordering == msglist_ordering ? (msglist_ordering_dir == "asc" ? "down" : "up") : (msglist_ordering_dir == "asc" ? "up" : "down")) + "_" + (new_ordering == msglist_ordering ? "more" : "1") + (new_ordering != msglist_ordering ? "" : "_on") + ".gif') right center no-repeat") : (new_ordering == msglist_ordering ? "url('webcpms/icons/scroll_" + (msglist_ordering_dir == "asc" ? "up" : "down") + "_more.gif') right center no-repeat" : "none");
}


function msgOverOut(prefix, msg_id, over) {
   var c = "msg_item" + (over ? "_hover" : "");
   document.getElementById(prefix + "MessageFrom_" + msg_id).className = c;
   document.getElementById(prefix + "MessageSubject_" + msg_id).className = c;
   document.getElementById(prefix + "MessageDate_" + msg_id).className = c;

   var c = document.getElementById(prefix + "MessageTo_" + msg_id).className;
   document.getElementById(prefix + "MessageTo_" + msg_id).className = over ? (c.indexOf("msg_opened") > -1 ? "msg_opened_hover" : "msg_not_opened_hover") : (c.indexOf("msg_opened") > -1 ? "msg_opened" : "msg_not_opened");
}




function sortByFromA(m1, m2) {
   var name1 = m1.from.getName(NAMEFORMAT_NORMAL),
       name2 = m2.from.getName(NAMEFORMAT_NORMAL);
   if (name1 == name2) return 0;
   return name1 > name2 ? 1 : -1;
}
function sortByFromD(m1, m2) {
   var name1 = m1.from.getName(NAMEFORMAT_NORMAL),
       name2 = m2.from.getName(NAMEFORMAT_NORMAL);
   if (name1 == name2) return 0;
   return name2 > name1 ? 1 : -1;
}

function sortByToA(m1, m2) {
   var name1 = m1.to[0].getName(NAMEFORMAT_NORMAL),
       name2 = m2.to[0].getName(NAMEFORMAT_NORMAL);
   if (name1 == name2) return 0;
   return name1 > name2 ? 1 : -1;
}
function sortByToD(m1, m2) {
   var name1 = m1.to[0].getName(NAMEFORMAT_NORMAL),
       name2 = m2.to[0].getName(NAMEFORMAT_NORMAL);
   if (name1 == name2) return 0;
   return name2 > name1 ? 1 : -1;
}

function sortBySubjectA(m1, m2) {
   var name1 = m1.subject,
       name2 = m2.subject;
   if (name1 == name2) return 0;
   return name1 > name2 ? 1 : -1;
}
function sortBySubjectD(m1, m2) {
   var name1 = m1.subject,
       name2 = m2.subject;
   if (name1 == name2) return 0;
   return name2 > name1 ? 1 : -1;
}

function sortByDateA(m1, m2) {
   var dt1 = m1.posted,
       dt2 = m2.posted;
   if (dt1 == dt2) return 0;
   return dt1 > dt2 ? 1 : -1;
}
function sortByDateD(m1, m2) {
   var dt1 = m1.posted,
       dt2 = m2.posted;
   if (dt1 == dt2) return 0;
   return dt2 > dt1 ? 1 : -1;
}


function setMessageListOrdering(prefix, new_ordering, print_list, maxlen, indicator, callback) {

   var email_messages_arr = getMessageList(prefix);
   if (!email_messages_arr) return;

   var msglist_ordering = document.getElementById(prefix + 'Ordering').value;
   var msglist_ordering_dir = document.getElementById(prefix + 'OrderingDir').value;

   if (msglist_ordering == new_ordering) {
      msglist_ordering_dir = msglist_ordering_dir == "asc" ? "desc" : "asc";
   } else if (new_ordering != null) {
      msglist_ordering = new_ordering;
   }
   if (new_ordering != null) {
      document.getElementById(prefix + 'Ordering').value = msglist_ordering;
      document.getElementById(prefix + 'OrderingDir').value = msglist_ordering_dir;
   }

   sortMessageList(prefix, email_messages_arr);

   if (print_list) {
      printEMailMessageList(prefix, maxlen);
   }

   if (callback) eval(callback);

   if (new_ordering != null) {
      var settings = new Array();
      settings[0] = prefix.toLowerCase() + "_ordering=" + msglist_ordering;
      settings[1] = prefix.toLowerCase() + "_ordering_dir=" + msglist_ordering_dir;
      saveSystemSettings(settings, false, indicator);
   }
}


function sortMessageList(prefix, email_messages_arr) {
   var msglist_ordering = document.getElementById(prefix + 'Ordering').value;
   var msglist_ordering_dir = document.getElementById(prefix + 'OrderingDir').value;

   var sorter = null;
   switch (msglist_ordering) {
      case "from":
         sorter = msglist_ordering_dir == "asc" ? sortByFromA : sortByFromD;
         break;
      case "to":
         sorter = msglist_ordering_dir == "asc" ? sortByToA : sortByToD;
         break;
      case "subject":
         sorter = msglist_ordering_dir == "asc" ? sortBySubjectA : sortBySubjectD;
         break;
      case "date":
         sorter = msglist_ordering_dir == "asc" ? sortByDateA : sortByDateD;
         break;
   }
   if (sorter) email_messages_arr.sort(sorter);
}




/*************************/


function getFieldValues(prefix, fields) {
   var fld_val = '';

   var flds = document.getElementById(prefix + 'Fields').value.split(",");
   var i;
   for (i = 0; i < flds.length; i++) {
      var f = flds[i].split("|");
      var fld = f[0];
      if (f[0].charAt(f[0].length - 1) == "*" || f[0].charAt(f[0].length - 1) == "-") {
         fld = f[0].substr(0, f[0].length - 1);
      }
      fields.push(prefix + fld);
      fld_val += "&" + prefix + fld + "=" + encodeURIComponent(document.getElementById(prefix + fld).value);
   }

   fld_val += "&captcha=" + document.getElementById(prefix + 'CaptchaCode').value;
   fld_val += "&nl=" + (document.getElementById(prefix + 'NewsletterSignUp').checked ? true : false)

   return fld_val;
}


function submitSignUp(prefix, reload) {
   var fields = [];
   var fld_val = getFieldValues(prefix, fields);
   resetMissingFields(prefix, fields.join(","));

   startIndicator(prefix + "SignUpIndicator", "Signing you up");
   var cmd = "cmd=cmdSignUp&prefix=" + prefix + fld_val + "&reload=" + (reload ? reload : "");
   WebCPMSAjax.load(engine_messages_process, cmd, signedUp, false, "prefix=" + prefix);
}



function signedUp(response, extra) {
   var prefix = getProperty("prefix", extra);
   stopIndicator(prefix + "SignUpIndicator");

   var res = getProperty("Res", response);
   var m = getProperty("Msg", response);
   if (res == "OK") {
      var reload = getProperty("Reload", response);
      if (reload.length == 0) {
         msg("Successfully signed up", prefix + "SignUpIndicator", "OK");
      } else {
         location.href = decodeURIComponent(reload);
      }
   } else {
      if (m == "access") {
         msg("You don't have permission to perform this operation", prefix + "SignUpIndicator", "Err");
      } else if (m == "fields") {
         msg("Please fill in the form!", prefix + "SignUpIndicator", "Err");
         highlightMissingFields(prefix, getProperty("Required", response) + "," + getProperty("Invalid", response));
      } else if (m == "exists" || m == "signed_up") {
         msg("A user already exists with the specified e-mail address", prefix + "SignUpIndicator", "Err");
         highlightMissingFields(prefix, prefix + "EMail");
      } else if (m == "captcha") {
         msg("The letter combination and the entered code do not match. Please read the image carefully and enter the code into the check field.", prefix + "SignUpIndicator", "Err");
         reloadCaptcha(prefix);
      }
   }

}



function highlightMissingFields(prefix, fields) {
   var i;
   var r = fields.split(",");
   for (i = 0; i < r.length; i++) {
      var e = document.getElementById(r[i]);
      if (e) {
         var bg = document.getElementById(r[i] + "BGClass");
         if (!bg) {
            bg = document.createElement("input");
            bg.type = "hidden";
            bg.id = r[i] + "BGClass";
            e.parentNode.appendChild(bg);
         }
         bg.value = e.parentNode.className;
         e.parentNode.className += " missing_field";
      }
   }
}


function resetMissingFields(prefix, fields) {
   var i;
   var r = fields.split(",");
   for (i = 0; i < r.length; i++) {
      var e = document.getElementById(r[i]);
      if (e) {
         var bg = document.getElementById(r[i] + "BGClass");
         if (bg) {
            e.parentNode.className = bg.value;
            bg.value = "";
         }
      }
   }
}





/*************************/

//var nl_campaigns = [];
var nl_entries = [];
var nl_order = "";

//function NewsletterCamapign(id, name, created, author, total, posted, opened) {
//   this.id = id;
//   this.name = name;
//}


function getNewsLetterEntryIndex(num) {
   var i = 0;
   while (i < nl_entries.length && nl_entries[i][0] != num) i++;
   if (i < nl_entries.length) {
      return i;
   }
   return -1;
}


function addNewsletterEntry(prefix, topic, item, link, params) {


   var host = document.getElementById('NewsletterArticles');

   var num = document.getElementById('NewsletterNumArticles').value * 1;

   nl_entries.push([num, params]);

   var na = document.createElement("div");
   na.setAttribute("id", "NewsletterArticles_" + num);
   na.style.padding = "10px;";

   var title = document.getElementById('Newsletter' + prefix + '_' + topic + (item ? '_' + item : '')).value;

   var nl = "<h4 style='margin-bottom: 0px;'><span style='float: right;'><img src='webcpms/icons/collapse_dbl.gif' style='cursor: pointer;' onmouseover=\"this.src='webcpms/icons/collapse_dbl_on.gif';\" onmouseout=\"this.src='webcpms/icons/collapse_dbl.gif';\" alt='Move up' title='Move up' onclick=\"moveElementUp('NewsletterArticles', '" + num + "');\" /><img src='webcpms/icons/expand_wide_dbl.gif' style='cursor: pointer;' onmouseover=\"this.src='webcpms/icons/expand_wide_dbl_on.gif';\" onmouseout=\"this.src='webcpms/icons/expand_wide_dbl.gif';\" alt='Move down' title='Move down' onclick=\"moveElementDown('NewsletterArticles', '" + num + "');\" /><img src='webcpms/icons/icon_delete_big.gif' style='cursor: pointer;' alt='Remove from list' title='Remove from list' onclick=\"removeNewsletterEntry(" + num + ");\" /></span>" + title + "</h4>";
   nl += "<div class='small_note'>" + getWebAddress() + "/" + link + "</div>";
   nl += "<div>";
   nl += "<input type='checkbox' id='NewsletterArticle_" + num + "_KeepFormatting' checked='checked' onclick=\"if (this.checked) document.getElementById('NewsletterArticle_" + num + "_PreviewOnly').checked = false;\" /><label for='NewsletterArticle_" + num + "_KeepFormatting'>Keep original formatting</label><br />";
   nl += "<input type='checkbox' id='NewsletterArticle_" + num + "_PreviewOnly' onclick=\"if (this.checked) document.getElementById('NewsletterArticle_" + num + "_KeepFormatting').checked = false;\" /><label for='NewsletterArticle_" + num + "_PreviewOnly'>Preview only, first</label> <input type='text' id='NewsletterArticle_" + num + "_PreviewLength' name='NewsletterArticle_" + num + "_PreviewLength' size='3' value='50' /> words<br />";
   nl += "<input type='checkbox' id='NewsletterArticle_" + num + "_IncludeLink' checked='checked' /><label for='NewsletterArticle_" + num + "_IncludeLink'>Include link to full article</label>";
   nl += "</div>";

   na.innerHTML = nl;

   host.appendChild(na);

   document.getElementById('NewsletterNumArticles').value = ++num;
}


function removeNewsletterEntry(num) {
   var idx = getNewsLetterEntryIndex(num);
   if (idx > -1) {
      nl_entries.splice(idx, 1);
   }
   removeElement('NewsletterArticles', num);
}


function setNewsletterArticleOrder() {
   var host = document.getElementById('NewsletterArticles');

   if (host.hasChildNodes()) {
      var order = new Array();
      var i;
      for (i = 0; i < host.childNodes.length; i++) {
         var n = host.childNodes[i];
         if (n.nodeType == 1) {
            var id = n.id.substr(n.id.lastIndexOf("_") + 1) * 1;
            var idx = getNewsLetterEntryIndex(id);
            var params = nl_entries[idx][1];
            params += "|keepformatting=" + (document.getElementById('NewsletterArticle_' + id + '_KeepFormatting').checked ? "true" : "false");
            params += "|preview=" + (document.getElementById('NewsletterArticle_' + id + '_PreviewOnly').checked ? document.getElementById('NewsletterArticle_' + id + '_PreviewLength').value : 0);
            params += "|link=" + (document.getElementById('NewsletterArticle_' + id + '_IncludeLink').checked ? "true" : "false");
            nl_entries[idx][1] = params;
            order[order.length] = id;
         }
      }
      nl_order = order.join(",");
   }
}


function updateTargetGroup(num) {
   if (document.getElementById('NewsletterTarget_' + num).checked) {
      var cmd = "cmd=cmdLoadNewsLetterTargetGroup&target=" + num;
      WebCPMSAjax.load(engine_messages_process, cmd, loadedTargetGroup, false, "group=" + num);
   } else {
      document.getElementById('NewsletterTargetGroup_' + num).innerHTML = "";
   }
}

function loadedTargetGroup(response, extra) {
   if (getProperty("Res", response) == "OK") {
      var group = getProperty("group", extra);
      var lt = "", l2 = "", lu = [], lm = "";
      var num = getProperty("Num", response);
      var maxnum = getProperty("MaxNum", response);
      lt = "<div style='margin-bottom: 5px;'>Total: " + num + " user" + (num == 1 ? "" : "s") + "</div>";
      var i = 0, usr;
      var max = 5;
      while ( (usr = getProperty("User_" + i, response)).length > 0 ) {
         if (i == max) {
            lm = "<span id='NewsletterMoreTargetUsersBtn_" + group + "' class='menuitem' onclick=\"toggle('NewsletterMoreTargetUsersBtn_" + group + "', false);toggle('NewsletterMoreTargetUsers_" + group + "', true, 'inline');\"> More...</span><span id='NewsletterMoreTargetUsers_" + group + "' style='display: none;'>";
         }
         lu.push(usr);
         i++;
      }
      if (i > max) {
         l2 = (" and " + (num - maxnum) + " more...") + " <span class='menuitem' onclick=\"toggle('NewsletterMoreTargetUsersBtn_" + group + "', true, 'inline');toggle('NewsletterMoreTargetUsers_" + group + "', false);\">Less</span></span>";
      }
      document.getElementById('NewsletterTargetGroup_' + group).innerHTML = lt + "<span style='font-size: 8pt;'>" + lu.slice(0, max).join(", ") + lm + (lu.length > max ? ", " + lu.slice(max, lu.length).join(", ") : "") + l2 + "</span>";
   }
}



function getTargetGroups() {
   var i = 0;

   var tg = [];
   while ( document.getElementById('NewsletterTarget_' + i) ) {
      if (document.getElementById('NewsletterTarget_' + i).checked) tg.push(i);
      i++;
   }

   return tg;
}


function loadNewsLetterArticles() {

   toggle("NewsletterStartCampaignButtons", false);
   toggle("PageNewsletterTemplatesHost", false);
   toggle("PageNewsletterHost", false);
   toggle("PageNewsletterPreviewHost", false);
   toggle("NewsletterEditButton", false);
   toggle("NewsletterPreviewButton", true, "inline");
   document.getElementById('PageNewsletterPreviewHost').innerHTML = "";

   startIndicator("NewsletterArticleIndicator", "Loading articles");

   var cmd = "cmd=cmdLoadNewsLetterArticles&order=" + nl_order;

   var i;
   for (i = 0; i < nl_entries.length; i++) {
      cmd += "&article_" + nl_entries[i][0] + "=" + encodeURIComponent(nl_entries[i][1]);
   }

   WebCPMSAjax.load(engine_messages_process, cmd, updateNewsLetterArticles, false);
}


function updateNewsLetterArticles(response, extra) {
   stopIndicator("NewsletterArticleIndicator");
   if (getProperty("Res", response) == "OK") {
      document.getElementById('NewsletterLetterTOC').value = getProperty("TOC", response, false);
      document.getElementById('NewsletterLetterContent').value = getProperty("Content", response, false);
      toggle("PageNewsletterTemplatesHost", true);
   }
}


function pickNewsletterTemplate(template_id) {
   toggle("PageNewsletterTemplatesHost", false);
   toggle("PageNewsletterHost", true);
   toggle("NewsletterStartCampaignButtons", true, "inline");

   toggle("NewsletterEditButton", false);
   toggle("NewsletterPreviewButton", true, "inline");

   wrePageNewsletter.setText();

   loadStaticPage('newsletter_template' + template_id, 'PageNewsletter', 'PageNewsletterIndicator', 'Newsletter');
}


function checkNewsletterMacros(errors) {
   var d = "";
   d += "<input type='hidden' id='NewsletterUserID' value='" + document.getElementById('NewsletterPreviewUserID').value + "' />\r\n";
   d += "<input type='hidden' id='NewsletterUserName' value='" + document.getElementById('NewsletterPreviewUserName').value + "' />\r\n";
   d += "<input type='hidden' id='NewsletterFirstName' value='" + document.getElementById('NewsletterPreviewFirstName').value + "' />\r\n";
   d += "<input type='hidden' id='NewsletterLastName' value='" + document.getElementById('NewsletterPreviewLastName').value + "' />\r\n";
   d += "<input type='hidden' id='NewsletterEMail' value='" + document.getElementById('NewsletterPreviewEMail').value + "' />\r\n";
   d += "<input type='hidden' id='NewsletterMessageTracker' value='" + document.getElementById('NewsletterPreviewMessageTracker').value + "' />\r\n";
   document.getElementById('PageNewsletterPreviewHost').innerHTML = d;
   
   var text = evaluateVariables(wrePageNewsletter.getText(), "Newsletter", null, errors);

   document.getElementById('PageNewsletterPreviewHost').innerHTML = "";

   return text;
}


function previewNewsletter() {

   var errors = [];
   var text = checkNewsletterMacros(errors);

   toggle("NewsletterEditButton", true, "inline");
   toggle("NewsletterPreviewButton", false);

   toggle("PageNewsletterHost", false);
   toggle("PageNewsletterPreviewHost", true);
   document.getElementById('PageNewsletterPreviewHost').innerHTML = text;
}


function editNewsletter() {
   toggle("PageNewsletterHost", true);
   toggle("PageNewsletterPreviewHost", false);
   toggle("NewsletterEditButton", false);
   toggle("NewsletterPreviewButton", true, "inline");
   document.getElementById('PageNewsletterPreviewHost').innerHTML = "";
}



function startNewsletterCampaign() {

   var tg = getTargetGroups();

   if (tg.length == 0) {
      msg("Please specify at least one target group", "StartNewsletterCampaignInfo", "Err");
      return;
   }

   var errors = [];
   var text = checkNewsletterMacros(errors);

   if (errors.length > 0) {
      msg("<div style='margin-top: 15px;'>This message contains special fields that will not be evaluated: " + errors.join(", ") + "</div>", "StartNewsletterCampaignInfo", "Err");
      return;
   }

   var cmd = "cmd=cmdStartNewsLetterCampaign&order=" + nl_order + "&name=" + encodeURIComponent(document.getElementById('NewsletterCampaignName').value) + "&letter=" + encodeURIComponent(wrePageNewsletter.getText());
   cmd += "&targets=" + tg.join(",");

   for (i = 0; i < nl_entries.length; i++) {
      cmd += "&params_" + nl_entries[i][0] + "=" + encodeURIComponent(nl_entries[i][1]);
   }


   startIndicator("StartNewsletterCampaignInfo", "Saving newsletter");
   WebCPMSAjax.load(engine_messages_process, cmd, startedNewsletterCampaign, false);
}


function startedNewsletterCampaign(response, extra) {
   if (getProperty("Res", response) == "OK") {
      stopIndicator("StartNewsletterCampaignInfo");
      switchTab('NewsLetter', 'NewsLetterCampaignsTab');
      loadNewsletterCampaigns();
   }
}


//function parseNewsletterCampaigns(response, nlc) {
//   var i = 0;
//
//   while ( getProperty("ID_" + i) * 1 >= 0) {
//      Person
//   }
//}

function loadNewsletterCampaigns() {
   startIndicator("NewsletterCampaignsIndicator", "Loading", "NewsletterCampaignsHost");
   var cmd = "cmd=cmdLoadNewsLetterCampaigns";
   WebCPMSAjax.load(engine_messages_process, cmd, loadedNewsletterCampaigns, false);
}

function loadedNewsletterCampaigns(response, extra) {
   stopIndicator("NewsletterCampaignsIndicator");
   var nl = "";

//   nl_campaigns.splice(0, nl_campaigns.length)
//   parseNewsletterCampaigns(response, nl_campaigns);

   nl += "<table>";
   nl += "<tr><td class='itemtitle'>Name / Subject</td><td class='itemtitle'>Created</td><td class='itemtitle'>Status</td><td class='itemtitle'>Opened</td></tr>";

   var i = 0;
   while ( getProperty("ID_" + i, response).length > 0 ) {
      nl += "<tr>";
      nl += "<td class='item vtop'>" + getProperty("Name_" + i, response) + "</td>";
      nl += "<td class='item vtop'>" + formatDateTime(getProperty("Created_" + i, response), "M d, Y") + "<br /><span class='small_note'>By " + formatName(getProperty("AuthorFirstName_" + i, response), getProperty("AuthorLastName" + i, response), NAMEFORMAT_NORMAL) + "</span></td>";
      nl += "<td class='item vtop'>" + (getProperty("Total_" + i, response) == getProperty("Posted_" + i, response) ? "Complete<br /><span class='small_note'>Posted: " + getProperty("Posted_" + i, response) + "</span>" : "Running<br /><span class='small_note'>Posted: " + getProperty("Posted_" + i, response) + " of " + getProperty("Total_" + i, response) + "</span>") + "</td>";
      nl += "<td class='item vtop'>" + (getProperty("Opened_" + i, response) / getProperty("Total_" + i, response) * 100).toFixed(2) + "%<br /><span class='small_note'>" + (getProperty("Posted_" + i, response) > 0 ? getProperty("Opened_" + i, response) + " of " + getProperty("Posted_" + i, response) : "-") + "</span></td>";
      nl += "</tr>";
      i++;
   }   

   nl += "</table>";

   document.getElementById('NewsletterCampaignsHost').innerHTML = nl;
}


/*************************/


function getEMailMessagePanel(prefix, parent_panel, host_panel, onready, email_categories_arr) {
   var p = "";
   if (parent_panel == null) parent_panel = "";
   if (host_panel == null) host_panel = "";

   p += "<div id='" + prefix + "RecipientHost'><h2>Message to <span id='" + prefix + "Recipient'></span></h2></div>";

   p += "<table>";
   p += "<tr><td class='label'>Template:</td><td class='item'><input type='hidden' id='" + prefix + "CategoriesUpdated' value='0' /><div id='" + prefix + "TemplateSelectorHost'></div><span id='" + prefix + "TemplateIndicator'></span></td></tr>";
   p += "<tr><td class='label'>From:<input type='hidden' id='" + prefix + "FromID' value='0' /><input type='hidden' id='" + prefix + "FromName' value='' /><input type='hidden' id='" + prefix + "FromEMail' value='' /></td><td class='item' id='" + prefix + "FromHost'></td></tr>";
   p += "<tr><td class='label'>To:<input type='hidden' id='" + prefix + "FirstName' name='" + prefix + "FirstName' value='' /><input type='hidden' id='" + prefix + "LastName' name='" + prefix + "LastName' value='' /><input type='hidden' id='" + prefix + "EMail' name='" + prefix + "EMail' value='' /><input type='hidden' id='" + prefix + "Phone' name='" + prefix + "Phone' value='' /><input type='hidden' id='" + prefix + "RegUserName' name='" + prefix + "RegUserName' value='' /><input type='hidden' id='" + prefix + "ToID' value='0' /><input type='hidden' id='" + prefix + "ToName' value='' /><input type='hidden' id='" + prefix + "ToEMail' value='' /></td><td class='item' id='" + prefix + "ToHost'></td></tr>";
   p += "<tr><td class='label'>Subject:<input type='hidden' id='" + prefix + "SubjectOrig' value='' /></td><td class='item'><input type='text' id='" + prefix + "Subject' name='" + prefix + "Subject' size='60' value='' /></td></tr>";
   p += "<tr><td colspan=2>";
   p += getRichEdit(prefix + "Text");
   p += "</td></tr>";
   p += "</table>";
   p += "<div id='" + prefix + "MessageInfo' style='display: none; color: red; width: 500px; padding: 5px;'></div>";
   p += "<div><span class='bignavig menuitem' onclick=\"toggle('" + parent_panel + "', true);toggle('" + host_panel + "', false);\">&lt;&lt; Back</span><span style='padding: 0px 10px;'>&nbsp;</span><input type='button' class='button' id='" + prefix + "SendMessageButton' value='Send &gt;&gt;' onclick=\"sendEMailMessage('" + prefix + "', '" + parent_panel + "', '" + host_panel + "', '" + onready + "', '" + email_categories_arr + "');\" /> <span id='" + prefix + "SendMessageIndicator'></span></div>\r\n";

   return p;
}



function getEMailMessageList(prefix, ordering, ordering_dir) {
   if (ordering == null) ordering = "date";
   if (ordering_dir == null) ordering_dir = "desc";
   var res = "";
   res += "<input type='hidden' id='" + prefix + "Ordering' value='" + ordering + "' /><input type='hidden' id='" + prefix + "OrderingDir' value='" + ordering_dir + "' />";
   res += "<span id='" + prefix + "TemplateIndicator'></span><input type='hidden' id='" + prefix + "MessagesPostedUpdated' value='0' /><div id='" + prefix + "ListMessagesHost' style='display: none;'></div>";
   return res;
}




function setEMailMessageInfo(prefix, errors, allow_regcode) {
   var host = document.getElementById(prefix + 'MessageInfo');
   document.getElementById(prefix + 'SendMessageButton').disabled = false;
   toggle(host.id, false);

   if (errors == null) return;
   if (errors.length == 0) return;

   var i = 0;
   while (i < errors.length && errors[i] != "%MessageTracker%") i++;
   if (i < errors.length) {
      errors.splice(i, 1);
   }

   if (errors.length == 0) return;

   var regcode = false;
   if (!allow_regcode) {
      var i = 0;
      while (i < errors.length && errors[i] != "%RegCode%") i++;
      if (i < errors.length) regcode = true;
   }

   host.innerHTML = (regcode ? "<b>Warning!</b><br />This message contains an activation link but it will not be evaluated. Please select another message from the Repository." : "<b>Warning!</b><br />This message contains special fields that will not be evaluated. Please delete those fields or select another message from the Repository.") + errors.join(", ");

   document.getElementById(prefix + 'SendMessageButton').disabled = true;
   toggle(host.id, true);
}


function resetEMailMessageInfo(prefix) {
   var host = document.getElementById(prefix + 'MessageInfo');
   host.innerHTML = "";
   toggle(host.id, false);
}



function printMessagePanel(prefix, from_pos, tos, subject) {
   if (subject == null) subject = "";

   var to = null;

   if (tos instanceof Array) {
      to = tos[0];
      toggle(prefix + 'RecipientHost', false);
   } else {
      to = tos;
      toggle(prefix + 'RecipientHost', true);
      document.getElementById(prefix + 'Recipient').innerHTML = to.getName(NAMEFORMAT_NORMAL);
   }

   var from_id = document.getElementById('CurrentUser').value;
//   var from_name = trim(document.getElementById('CurrentUserFullName').value);
   var from_name = trim(document.getElementById('CompanyName').value);
//   var from_email = decodeURIComponent(document.getElementById('CurrentUserEMail').value);
   var from_email = decodeURIComponent(document.getElementById('CompanyEMail').value);

   document.getElementById(prefix + 'Subject').value = subject;
   document.getElementById(prefix + 'SubjectOrig').value = subject;

   setMessageFrom(prefix, from_id, from_name, from_email, from_pos);
   if (tos instanceof Array) {
      setMessageTos(prefix, tos);
   } else {
      setMessageTo(prefix, to.id, to.getName(NAMEFORMAT_NORMAL), to.email);
   }

   document.getElementById(prefix + 'FirstName').value = to.firstname;
   document.getElementById(prefix + 'LastName').value = to.lastname;
   document.getElementById(prefix + 'EMail').value = to.email;
   document.getElementById(prefix + 'Phone').value = to.phone;
   document.getElementById(prefix + 'RegUserName').value = to.username;
}



function setMessageFrom(prefix, id, name, email, pos) {
   if (pos == null) pos = "";

   var host = document.getElementById(prefix + "FromHost");

   var c_id = 0;
   var c_name = decodeURIComponent(document.getElementById('CompanyName').value);
   var c_email = decodeURIComponent(document.getElementById('CompanyEMail').value);

   var mf = "";

   var p_addr = name.length > 0 && email.length > 0 ? name + (pos.length > 0 ? ", " + pos : "") + "&nbsp;&lt;" + email + "&gt;" : "";
   var c_addr = c_name + "&nbsp;&lt;" + c_email + "&gt;";


//   if (p_addr.length > 0) {
////      var a = email.indexOf("@");
////      var h = getWebAddress();
////      var ds = h.indexOf("//");
////      var w = h.indexOf("www");
////      var d = w == -1 ? (ds == -1 ? h : h.substr(ds + 2)) : h.substr(w + 4);
////      if (email.substr(a + 1).toLowerCase() == d.toLowerCase()) {
//         mf += "<input type='radio' id='" + prefix + "FromPrivate' name='" + prefix + "FromType' onclick=\"document.getElementById('" + prefix + "FromID').value='" + id + "';document.getElementById('" + prefix + "FromName').value='" + name + (pos.length > 0 ? ", " + pos : "") + "';document.getElementById('" + prefix + "FromEMail').value='" + email + "';\"  checked='checked'/><label for='" + prefix + "FromPrivate'>" + p_addr + "</label><br />";
//         mf += "<input type='radio' id='" + prefix + "FromCompany' name='" + prefix + "FromType' onclick=\"document.getElementById('" + prefix + "FromID').value='0';document.getElementById('" + prefix + "FromName').value='" + c_name + "';document.getElementById('" + prefix + "FromEMail').value='" + c_email + "';\" /><label for='" + prefix + "FromCompany'>" + c_addr + "</label>";
////      } else {
////         mf += c_addr;
////      }
//
//      document.getElementById(prefix + 'FromID').value = id;
//      document.getElementById(prefix + 'FromName').value = name;
//      document.getElementById(prefix + 'FromEMail').value = email;
//   } else {
      mf += p_addr;

      document.getElementById(prefix + 'FromID').value = id;
      document.getElementById(prefix + 'FromName').value = name;
      document.getElementById(prefix + 'FromEMail').value = email;
//   }

   host.innerHTML = mf;
}


function setMessageTo(prefix, id, name, email) {
   var host = document.getElementById(prefix + "ToHost");

   host.innerHTML = name + "&nbsp;&lt;" + email + "&gt;";

   document.getElementById(prefix + 'ToID').value = id;
   document.getElementById(prefix + 'ToName').value = name;
   document.getElementById(prefix + 'ToEMail').value = email;
}



function setMessageTos(prefix, tos) {
   var host = document.getElementById(prefix + "ToHost");

   var ids = new Array(),
       names = new Array(),
       emails = new Array(),
       addrs = new Array();

   var i;

   var mt = "";

   for (i = 0; i < tos.length; i++) {
      ids[ids.length] = tos[i].id;
      names[names.length] = encodeURIComponent(tos[i].getName(NAMEFORMAT_NORMAL));
      emails[emails.length] = encodeURIComponent(tos[i].email);
//      addrs[addrs.length] = "<input type='checkbox' id='" + prefix + "ToCheck_" + i + "' name='" + prefix + "ToCheck_" + i + "' checked='checked' /><label for='" + prefix + "ToCheck_" + i + "'>" + tos[i].getName(NAMEFORMAT_NORMAL) + "&nbsp;&lt;" + tos[i].email + "&gt;</label>";
      addrs[addrs.length] = "<img src='webcpms/icons/scroll_left_1.gif' />&nbsp;" + tos[i].getName(NAMEFORMAT_NORMAL) + "&nbsp;&lt;" + tos[i].email + "&gt;";
   }

   host.innerHTML = addrs.join("<br />");

   document.getElementById(prefix + 'ToID').value = ids.join("|");
   document.getElementById(prefix + 'ToName').value = names.join("|");
   document.getElementById(prefix + 'ToEMail').value = emails.join("|");
}




/********/

function getMessageScrollerRTEPlugIn(prefix) {

   var p = new RTEPlugIn(prefix + "MessageScroller");

   p.toolbar.style.cssFloat = "right";
   p.toolbar.style.styleFloat = "right";
   p.invalidate = setMessageScrollerNames;
   p.run = setMessageScrollerValue;

   p.data = new Array();

   return p;
}


function setMessageScrollerNames(email_category_arr, default_text) {
   var prefix = this.id.substr(0, this.id.indexOf("MessageScroller"));

   this.data = new Array();

   var ids = document.getElementById(prefix + 'ToID').value.split("|");
   if (!(email_category_arr instanceof Array)) {
      email_category_arr = eval(email_category_arr);
   }
   var template = null;
   if (document.getElementById(prefix + "TemplateSelector")) {
      template = getEMailTemplate(document.getElementById(prefix + "TemplateSelector").value, 0, email_category_arr);
   }
   if (template) {
//      this.data[this.data.length] = template.body();
      for (i = 0; i < ids.length; i++) {
         this.data[this.data.length] = evaluateVariables(template.body(), prefix + '_' + ids[i]);
      }
   } else {
//      this.data[this.data.length] = default_text;
      for (i = 0; i < ids.length; i++) {
         this.data[this.data.length] = evaluateVariables(default_text, prefix + '_' + ids[i]);
      }
   }

   var s = "";

   s += "<img src='webcpms/icons/left_dbl.gif' class='rte_dropdn' onmouseover=\"this.src='webcpms/icons/left_dbl_on.gif';\" onmouseout=\"this.src='webcpms/icons/left_dbl.gif';\" onclick=\"if(document.getElementById('" + prefix + "MessageScrollerSelector').selectedIndex > 0){document.getElementById('" + prefix + "MessageScrollerSelector').selectedIndex--;wre" + prefix + "Text.launchPlugIn('" + prefix + "MessageScroller', document.getElementById('" + prefix + "MessageScrollerSelector').value);}\" /><select id='" + prefix + "MessageScrollerSelector' class='select_small' onchange=\"wre" + prefix + "Text.launchPlugIn('" + prefix + "MessageScroller', this.value);\">";
//   s += "<option value='0'>-Template-</option>";
   var names = document.getElementById(prefix + 'ToName').value.split("|");
   var i;
   for (i = 0; i < names.length; i++) {
      s += "<option value='" + i + "'>" + decodeURIComponent(names[i]) + "</option>";
   }
   s += "</select><img src='webcpms/icons/right_dbl.gif' class='rte_dropdn' onmouseover=\"this.src='webcpms/icons/right_dbl_on.gif';\" onmouseout=\"this.src='webcpms/icons/right_dbl.gif';\" onclick=\"if(document.getElementById('" + prefix + "MessageScrollerSelector').selectedIndex < document.getElementById('" + prefix + "MessageScrollerSelector').options.length - 1){document.getElementById('" + prefix + "MessageScrollerSelector').selectedIndex++;wre" + prefix + "Text.launchPlugIn('" + prefix + "MessageScroller', document.getElementById('" + prefix + "MessageScrollerSelector').value);}\" />";

   this.toolbar.innerHTML = s;

}


function setMessageScrollerValue(idx) {

   this.editor.setDocument(document.getElementById('lang').value, this.data[idx]);
   this.editor.setText(this.data[idx]);

}







function saveMessageScrollerText(prefix) {

   var e = eval("wre" + prefix + "Text");

   var p = e.getPlugIn(prefix + "MessageScroller");

   var lang = document.getElementById('lang').value;

   var text = e.getText(false, lang) + "";

   p.data[document.getElementById(prefix + "MessageScrollerSelector").value] = text;



   var host = document.getElementById(prefix + 'MessageInfo');
   document.getElementById(prefix + 'SendMessageButton').disabled = false;
   toggle(host.id, false);

   var rec_errors = new Array();
   var i;
   var ids = document.getElementById(prefix + 'ToID').value.split("|");
   for (i = 0; i < ids.length; i++) {
      var errors = new Array();
      evaluateVariables(p.data[i], prefix + "_" + ids[i], null, errors);
      var j = 0;
      while (j < errors.length && errors[j] != "%MessageTracker%") j++;
      if (j < errors.length) errors.splice(j, 1);
      if (errors.length > 0) rec_errors[rec_errors.length] = new Array(i, errors);
   }

   if (rec_errors.length > 0) {
      var sel = document.getElementById(prefix + "MessageScrollerSelector");
      var usrs = new Array();
      for (i = 0; i < rec_errors.length; i++) {
         usrs[usrs.length] = "<span class='menuitem' onclick=\"document.getElementById('" + prefix + "MessageScrollerSelector').selectedIndex=" + rec_errors[i][0] + ";wre" + prefix + "Text.launchPlugIn('" + prefix + "MessageScroller', " + rec_errors[i][0] + ");\">" + sel.options[rec_errors[i][0]].text + "</span>";
      }
      host.innerHTML = "<b>Warning!</b><br />The message" + (rec_errors.length == 1 ? "" : "s") + " addressed to " + join(usrs, ", ", " and ") + " contain" + (rec_errors.length == 1 ? "s" : "") + " special fields that will not be evaluated. Please delete those fields or select another message from the Repository.";

      document.getElementById(prefix + 'SendMessageButton').disabled = true;
      toggle(host.id, true);
   }
}


function evaluateMessageScrollerVariables(prefix, text, errors) {
   var idx = document.getElementById(prefix + "MessageScrollerSelector").value;
   var ids = document.getElementById(prefix + 'ToID').value.split("|");

   return evaluateVariables(text, prefix + "_" + ids[idx], null, errors);
}






/*
var user_email_categories;


function setUserSendMessageList(prefix, id) {
   var chk = document.getElementById(prefix + "_" + id + "Sel");
   var asm = document.getElementById(prefix + 'SendMessage');

   var list = asm.value.split(",");

   var i = 0;
   while (i < list.length && list[i] != id) i++;
   var found = i < list.length ? true : false;

   if (chk.checked) {
      if (!found) {
         if (list.length == 1 && list[0] == 0) {
            list[0] = id;
         } else {
            list[list.length] = id;
         }
      }
   } else {
      if (found) {
         list.splice(i, 1);
      }
   }

   asm.value = list.join(",");

   toggle("ApplicantSendMessages", list.length > 0 ? true : false);

   if (list.length > 0) printApplicantsMessagePanel();

   var p = wreApplicantsText.getPlugIn("ApplicantsMessageScroller");
   if (p) p.invalidate(applicants_email_categories, "Dear %FirstName%,<br /><br /><br />The Staff");
}




function printApplicantsMessagePanel() {
   var list = document.getElementById('ApplicantSendMessage').value.split(",");

   var i;
   var tos = new Array();
   for (i = 0; i < list.length; i++) {
      tos[tos.length] = new Person(list[i], document.getElementById('Applicants_' + list[i] + 'RegUserName').value, document.getElementById('Applicants_' + list[i] + 'FirstName').value, document.getElementById('Applicants_' + list[i] + 'LastName').value, "", document.getElementById('Applicants_' + list[i] + 'EMail').value);
   }

   printMessagePanel('Applicants', "", tos);

   if (!loadEMailTemplates('Applicants', loadedApplicantsEMailTemplates)) {
      setApplicantsMsgTemplate();
   }
}





function loadedApplicantsEMailTemplates() {
   if (ajaxLoadEMailTemplates.readyState == 4 || ajaxLoadEMailTemplates.readyState == "complete") {
      stopIndicator("ApplicantsTemplateIndicator");

      var sel_category = 0, sel_template = 0;

      applicants_email_categories = new Array();

      parseEMailTemplates(ajaxLoadEMailTemplates.responseText, applicants_email_categories);

      printEMailTemplateSelector("Applicants", applicants_email_categories, "setApplicantsMsgTemplate();", sel_category, sel_template);
      setApplicantsMsgTemplate();
   }
}


function setApplicantsMsgTemplate() {
   resetEMailMessageInfo('Applicants');

   var tc = document.getElementById('ApplicantsTemplateSelector').value.split(".");

   var category_id = tc[0];
   var template_id = tc[1];

   var template = getEMailTemplate(category_id, template_id, applicants_email_categories);
   var lang = document.getElementById('lang').value;

   var errors = new Array();

   var body = "";
   if (template) {

      document.getElementById('ApplicantsSubject').value = template.subject();

      body = evaluateVariables(template.body(), 'Applicants', null, errors);
   } else {

      document.getElementById('ApplicantsSubject').value = document.getElementById('ApplicantsSubjectOrig').value;

      body = evaluateVariables("Dear %FirstName%,<br /><br /><br />The Staff", 'Applicants', null, errors);
   }

   var e = eval("wreApplicantsText");

   e.setDocument(lang, body);
   e.setText(body);

   setEMailMessageInfo('Applicants', errors, false);

   var p = wreApplicantsText.getPlugIn("ApplicantsMessageScroller");
   if (p) p.invalidate(applicants_email_categories, "Dear %FirstName%,<br /><br /><br />The Staff");
}




function updateApplicantMessages(applicant_id_list) {
   var applicant_ids = applicant_id_list.split(",");

   var i;
   for (i = 0; i < applicant_ids.length; i++) {
      document.getElementById('Applicants_' + applicant_ids[i] + 'SendMessage').checked = false;
      if (document.getElementById('Applicants_' + applicant_ids[i] + 'ListMessagesHost').style.display == "none") {
         document.getElementById('Applicants_' + applicant_ids[i] + 'MessagesPostedUpdated').value = 0;
      } else {
         loadMessagesPosted('Applicants_' + applicant_ids[i], 'Applicants_' + applicant_ids[i] + 'ListMessagesHost', true, 'to=' + applicant_ids[i]);
      }
   }
   document.getElementById('ApplicantSendMessage').value = "";

}
*/