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 = "";

   s += "<select id='" + prefix + "TemplateSelector'" + (onchange.length > 0 ? " onchange=\"" + onchange + "\"" : "") + ">\r\n";
   s += "<option value='0'>- Select a template -</option>\r\n";
   for (i = 0; i < email_categories_arr.length; i++) {
      if ( sel_category > 0 && email_categories_arr[i].id == sel_category ? true : (sel_category == 0 ? true : false) ) {
         s += "<optgroup label='" + email_categories_arr[i].title() + "'>\r\n";
         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'" : "";
            s += "<option value='" + tc + "'" + sel + ">" + email_categories_arr[i].templates[j].subject() + "</option>\r\n";
         }
         s += "</optgroup>\r\n";
      }
   }
   s += "</select>\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);
}




/*************************/
var ajaxSignUp,
    ajaxSubmitQuestion;



function submitSignUp(prefix, reload) {
   var inf = document.getElementById(prefix + 'Info');
   inf.innerHTML = "";

   var fn = document.getElementById(prefix + 'FirstName').value;
   var em = document.getElementById(prefix + 'EMail').value;
   if (fn.length == 0 || !validateEMail(em)) {
      inf.innerHTML = "Please specify your first name and your e-mail address";
      inf.style.color = "red";
      return;
   }

   var captcha = document.getElementById(prefix + "CaptchaCode").value;
   if (document.getElementById(prefix + "CaptchaHost").style.display == "none") {
      toggle(prefix + "CaptchaHost", true);
      toggle(prefix + "SignUpFieldsHost", false);
      document.getElementById(prefix + "SignUpButton").innerHTML = "Continue";
      return;
   } else {
      if (captcha.length != 5) {
         alert("Please enter the letters into the verification field");
         return;
      }
   }

   document.getElementById(prefix + 'Info').style.color = "";
   startIndicator(prefix + "Info", "Signing you up");
   var cmd = "cmd=cmdSignUp&firstname=" + document.getElementById(prefix + 'FirstName').value + "&email=" + document.getElementById(prefix + 'EMail').value + "&prefix=" + prefix + "&reload=" + (reload ? "true" : "false") + "&captcha=" + captcha;
   load(ajaxSignUp = GetXmlHttpObject(), engine_messages_process, cmd, signedUp);
}

function signedUp() {
   if (ajaxSignUp.readyState == 4 || ajaxSignUp.readyState == "complete") {
      var res = ajaxSignUp.responseText;
      var prefix = getProperty("Prefix", res);
      var msg = getProperty("Msg", res);
      if (msg == "OK") {
         setCookie("NewsletterSignupEMail", getProperty("EMail", res));
         if ("true" == getProperty("Reload", res)) {
            loadPage("index.php?page=signup");
         } else {
            stopIndicator(prefix + "Info");
            toggle(prefix + "FinishSignUp", true);
         }
      } else if (msg == "UserSignedUp") {
         stopIndicator(prefix + "Info");
         var inf = document.getElementById(prefix + 'Info');
         inf.innerHTML = "This e-mail address is already signed up";
         inf.style.color = "red";
      } else if (msg == "UserError") {
         stopIndicator(prefix + "Info");
         var inf = document.getElementById(prefix + 'Info');
         inf.innerHTML = "An error occured while registering the new user";
         inf.style.color = "red";
      } else if (msg == "Captcha") {
         stopIndicator(prefix + "Info");
         var inf = document.getElementById(prefix + 'Info');
         inf.innerHTML = "The letter combination and the entered code do not match. Please read the image carefully and enter the code into the check field.";
         inf.style.color = "red";
         reloadCaptcha(prefix);
      }
   }
}


function submitQuestion(prefix, onready) {
   var fn = document.getElementById(prefix + 'FirstName').value;
   var em = document.getElementById(prefix + 'EMail').value;
   var q = document.getElementById(prefix + 'Question').value;
   if (fn.length == 0 || !validateEMail(em) || q.length  == 0) {
      if (fn.length == 0) toggle('Err' + prefix + 'FirstName');
      if (!validateEMail(em)) toggle('Err' + prefix + 'EMail');
      if (q.length == 0) toggle('Err' + prefix + 'Question');
      return;
   }
   var captchacode = document.getElementById(prefix + 'CaptchaCode').value;
   if (captchacode.length == 0) {
      alert("Please read the image carefully and enter the letters\ninto the check field labeled 'Letters'");
      return;
   }

   var cmd = "cmd=cmdSubmitQuestion&firstname=" + fn + "&email=" + em + "&prefix=" + prefix + "&refpage=" + document.getElementById(prefix + 'RefPageTitle').value + "&question=" + encodeURIComponent(q) + "&onready=" + (onready ? onready : "") + "&captcha=" + captchacode;
   startIndicator(prefix + "SubmitQuestionIndicator", "Submitting");
   load(ajaxSubmitQuestion = GetXmlHttpObject(), engine_messages_process, cmd, submittedQuestion);
}

function submittedQuestion() {
   if (ajaxSubmitQuestion.readyState == 4 || ajaxSubmitQuestion.readyState == "complete") {
      var res = ajaxSubmitQuestion.responseText;
      var prefix = getProperty("Prefix", res);
      stopIndicator(prefix + "SubmitQuestionIndicator");
      var msg = getProperty("Msg", res);
      if (msg == "ErrCaptcha") {
         alert("An error has occured: the letter combination and the entered code do not match.\nPlease read the image carefully and enter the code into the check field.");
         reloadCaptcha(prefix);
         return;
      }
      var onready = getProperty("OnReady", res);
      if (onready.length > 0) {
         eval(onready + "('" + prefix + "');");
      }
      toggle("Page" + prefix + "Host", false);
      toggle(prefix + "QuestionPanel", false);
      toggle(prefix + "ThankYouPanel", true);
      if (document.getElementById(prefix + 'NewsletterSignup').checked) {
         submitSignUp(prefix);
         toggle(prefix + "Info", true);
      }
   }
}





function validateSignUp(prefix, reload) {
   var fn = document.getElementById(prefix + 'FirstName').value;
   var em = document.getElementById(prefix + 'EMail').value;
   if (fn.length == 0 || !validateEMail(em)) {
      var inf = document.getElementById(prefix + 'Info');
      inf.innerHTML = "Please specify your first name and your e-mail address";
      inf.style.color = "red";
      return false;
   }
   setCookie("SignUpFirstName", fn);
   setCookie("SignUpEMail", em);
   return true;
}






/*************************/






function addNewsletterEntry(title, link, params) {


   var host = document.getElementById('NewsletterArticles');

   var num = document.getElementById('NewsletterNumArticles').value * 1;

   setCookie("NewsletterArticles_" + num, params);

   var na = document.createElement("div");
   na.setAttribute("id", "NewsletterArticles_" + num);
   na.setAttribute("class", "editorpanel");
   na.setAttribute("style", "padding: 10px;");

   var nl = "<h3 style='margin: 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=\"deleteCookie('NewsletterArticles_" + num + "');removeElement('NewsletterArticles', '" + num + "');\" /></span>" + title + "</h3>";
   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' /><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 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 params = getCookie('NewsletterArticles_' + id);
            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");
            setCookie("NewsletterArticles_" + id, params);
            order[order.length] = id;
         }
      }
      setCookie('NewsletterArticleOrder', order.join(","));
   }
}



/*************************/


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_email = decodeURIComponent(document.getElementById('CurrentUserEMail').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 += c_addr;

      document.getElementById(prefix + 'FromID').value = c_id;
      document.getElementById(prefix + 'FromName').value = c_name;
      document.getElementById(prefix + 'FromEMail').value = c_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);
}





