

function MaillistSendInitSelectList(wizard, properties)
{
  db.SearchNodes({ "type" : "maillist" }, function(transaction_id, result_code, node_list)
  {
    var container = $("#template-maillist-lists").tmpl(node_list); 
    
    container.find(".popup-list-item-container").bind("click", function(event)
    {
      var element = $(event.currentTarget);
      
      properties["node_maillist"] = node_list[element.attr("data")]; 
      properties["node_newsletter"] = { "name" : "", "attributes" : { "HtmlBody" : "", "TextBody" : "", } };
      
      wizard.Next();
    });
    
    wizard.Show(container);
  });
}

function MaillistSendInitSelectTemplate(wizard, properties)
{
  db.SearchNodes({ "type" : "newsletter" }, function(transaction_id, result_code, node_list)
  {
    var container = $("#template-maillist-letters").tmpl(node_list); 
  
    container.find(".popup-list-item-container").bind("click", function(event)
    {
      var element = $(event.currentTarget);
      
      properties["node_newsletter"] = node_list[element.attr("data")]; 
      
      wizard.Next();
    });
    
    wizard.Show(container);
  });
}

function MaillistSendValidateSelectTemplate()
{
  return true;
}

function MaillistSendInitWrite(wizard, properties)
{
  var link_ids        = [];

  properties["data"] = {};
  
  properties["data"]["To"]   = [];
  properties["data"]["From"] = properties["node_maillist"]["attributes"]["From"];

  jQuery.each(properties["node_maillist"]["links_up"], function(n, link)
  {
    if ("subscriber" == link["role"])
    {
      link_ids.push(link["node_id"]);
    }
  });
  
  properties["number_of_subscribers"] = link_ids.length;
  
  db.FetchNodes(link_ids, function(transaction_id, result_code, node_list)
  {
    jQuery.each(node_list, function(n, node)
    {
      properties["data"]["To"].push(node["attributes"]["Email"]);
    });
    
    var container = $("#template-maillist-send-form").tmpl(properties["node_newsletter"]); 
  
    container.find("form").bind("submit", function(event)
    {
      event.preventDefault();
      wizard.Next();
    });
    
    wizard.Show(container);
  });
}

function MaillistSendValidateWrite(wizard, properties)
{
  var subject   = "";
  var text_body = "";
  var html_body = "";
  
  jQuery.each($(".popup-form-input"), function(n, element)
  {
    element = $(element);

    if (element.attr("name") == "subject")
    {
      subject = element.val();
    }
    else if (element.attr("name") == "text")
    {
      text_body = element.val();
    }
    else if (element.attr("name") == "html")
    {
      html_body = element.val();
    }
  });

  if ("" == subject || "" == text_body || "" == html_body)
  {
    return false;
  }


  properties["data"]["Subject"] = subject;
  properties["data"]["TextBody"] = text_body;
  properties["data"]["HtmlBody"] = html_body;

  return true;
}

function MaillistSendInitSend(wizard, properties)
{
  db.CallServer("SendMail", properties["data"], function(transaction_id, result_code, response_data)
  {
    if (MURRIX_RESULT_CODE_OK == result_code)
    {
      var node_newsletter = { 
        "type" : "newsletter", 
        "name" : properties["data"]["Subject"],
        "attributes" : { 
          "TextBody" : properties["data"]["TextBody"],
          "HtmlBody" : properties["data"]["HtmlBody"]
        }
      };
     
      db.CreateNode(node_newsletter, function(transaction_id, result_code, out_node)
      {
        if (MURRIX_RESULT_CODE_OK == result_code)
        {
          wizard.Show($("#template-maillist-send-done").tmpl({ "maillist" : properties["node_maillist"], "letter" : out_node, "number_of_subscribers" : properties["number_of_subscribers"] }));
        }
        else
        {
          wizard.Show($("#template-maillist-send-error").tmpl({ "maillist" : properties["node_maillist"], "result_code" : result_code }));
        }
      });
    }
    else
    {
      wizard.Show($("#template-maillist-send-error").tmpl({ "maillist" : properties["node_maillist"], "result_code" : result_code }));
    }
  });  
}

var maillist_send_wizard = [
  { "init" : MaillistSendInitSelectList,      "validate" : null },
  { "init" : MaillistSendInitSelectTemplate,  "validate" : MaillistSendValidateSelectTemplate },
  { "init" : MaillistSendInitWrite,           "validate" : MaillistSendValidateWrite },
  { "init" : MaillistSendInitSend,            "validate" : null }
];


