function postJSON(url, data) {
  var req=getXMLHttpRequest();
  req.open('POST', url, true);
  req.setRequestHeader('Content-Type', 'text/json; charset=utf-8');
  var payload=serializeJSON(data);
  var df=sendXMLHttpRequest(req, payload);
  return df;
}

function trimstring(s) {
  return s.replace(/\s*(.*)\s*/, "$1");
}

function form_to_obj(data) {
 var obj={};
 forEach(izip(data[0], data[1]), function(thing) {
    var k=thing[0];
    var v=thing[1];
    if (isUndefinedOrNull(v)) {
       v="";
    }
    obj[k]=v;
 });
 return obj;
}

function get_error_field(formid, fieldname) {
   var t= "error_"+fieldname+formid;
   if (! getElement(t)) {
     logDebug("not found: ", t);
   }
   return t;
}

function send_email(formid, url, title, itemid) {
  logDebug("in send_email");	
  var data=formContents(formid);
  var formcode = formid.slice(9);
  var error_div = "emailthis_error"+formcode;
  var wrapper_div = "emailthis_wrapper"+formcode;
  var ind=findValue(data[0], 'addressees');
  data[1][ind] = filter(null, map(trimstring, filter(null, data[1][ind].split(/[,\s]+/))));
  if (itemid) {
     data[0].push('item_id');
     data[1].push(itemid);
  }
  logDebug("survived: ", data);
  var obj=form_to_obj(data);
  obj.url=url;
  obj.page_title=title;
  var df=postJSON('/api/emailthis/send', obj);
  df.addCallback(function(req) {
      $('emailthis_wrapper').innerHTML="<br /><div class='emailthis_notice'>Your email has been sent.</div>";
    });
  df.addErrback(function(err) {
    var data;
    var head_check = err.req.getResponseHeader("Content-Type");
    if (head_check && head_check.match(/^text\/json(;.*)?$/)) {
        data = evalJSONRequest(err.req);
    } else {
        data={"top" : err.req.responseText};
    }
    switch(err.number) {
    case 400:
       var message="There was a problem submitting your email.";
       if (data.top) {
          message+="<br />"+data.top;
       }
       for (var field in data) {
        if (field != 'top') {
          var place=$(get_error_field(formcode, field));
          if (place) {
            
            var msg=data[field] || '';
        
            if (isArrayLike(msg)) {
              msg=reduce(function(x,y) {return x+"<br /> "+y;}, filter(null, msg));
            }
            place.innerHTML=msg;
          }
        }
       }
       $(error_div).innerHTML=message;
       break;
    default:
      $(error_div).innerHTML="<br /><div class='emailthis_notice'>There was a problem submitting your email. Please try again.</div>";
     }
   });
  return false;
}

function ET() {
  window.open('/emailthiswindow.html', 'emailthis', 'width=450,height=400,status=no,resizable=yes,toolbar=no,menubar=no');
  return false;
}

var ETMouseOver=function() { return true; }
var ETMouseOut=ETMouseOver;

function PT() {
  window.print();
  return false;
}

var PTMouseOver=function() { return true; }
var PTMouseOut=PTMouseOver;

function ST() {
  return false;
}

var STMouseOver=function() {return true;}
var STMouseOut=STMouseOver;

var MP=ST;
var MPMouseOver=function() {return true;}
var MPMouseOut=MPMouseOver;
  
