var AWS = new Object();
var XScache = new Object();

AWS.checkLoadStatus = function (lso) {
  var url = lso.savedURL ; if (!url) throw("AWS.checkLoadStatus expects loadFromServer object") ;
  var xr  = lso.request ;
  
  if (xr.status != 200) {
    alert (url + " failed: "+xr.statusText) ; return false ;
  }
  try {
    var de = xr.responseXML.documentElement;
    if (!de) { alert (url + ": response is not a valid XML document") ; return false ; }
  } catch(err) {
    alert (url + ": response is not a valid XML document") ; return false;
  }
  try {
    if (de.nodeName == "status") {
      var ec = de.getAttribute("errorCode") ;
      if (ec) { alert (url + ": returned error code " + ec) ; return false ; }
    }
    if (de.nodeName == "login") { alert (url + ": requires logged-in user, please login") ; return false; }
  } catch(err) {
    alert (url + ": XML response does not make sense") ; return false;
  }
  return true ;
}

AWS.returnHTMLResponse = function (lso) {
  var url = lso.savedURL ; if (!url) throw("AWS.checkLoadStatus expects loadFromServer object") ;
  var xr  = lso.request ;
  
  if (xr.status != 200) {
    alert (url + " failed: "+xr.statusText) ; return false ;
  }
  
  try {
    if (xr.responseXML.documentElement) return (xr.responseXML);
  } catch(err) {}
  try {
    var doc = Sarissa.getDomDocument();
    doc = (new DOMParser()).parseFromString(xr.responseText,"text/xml");
    if (Sarissa.getParseErrorText(doc) == Sarissa.PARSED_OK){ return doc; }
    alert(url + ": response did not parse ("+Sarissa.getParseErrorText(doc)+")");
    return false;
  } catch(err) {
    alert (url + ": response is not a valid XHTML document ("+err+")") ; return false;
  }
}

function showProperties(e) {
  var i,s ;
  
  for (i in e) {
    try { s += " "+i+": "+e[i]; }
    catch(yae) {}
  }
  return s;
}

function showError(e) {
  try { return e.message; }
  catch (x) { return showProperties(e); }
}

AWS.transformAjaxResponse = function (xr,xsp) {
  if (!XScache[xsp]) {
    var xsDom ;
    try {
      xsDom = Sarissa.getDomDocument();
      xsDom.async = false ;
      xsDom.load(xsp) ;
      if(xsDom.parseError != 0) { alert(xsp + ": not well formed XML document - " + Sarissa.getParseErrorText(xsDom)); return false; }
      XScache[xsp] = new XSLTProcessor();
      XScache[xsp].importStylesheet(xsDom) ;
    } catch (err) {
      alert (xsp + ": failed to load XSL stylesheet - "+showError(err)) ; return false ;
    }
  }
  
  try {
    var htDoc = XScache[xsp].transformToDocument(xr);
    return htDoc ;
  } catch (err) {
    alert(xsp + ": XSLT transformation failed") ; return false ;
  }
}

AWS.copyAjaxResponse = function (lso,xsl,tid) {
  var rsp = lso.request; if (!rsp) throw ("AWS.copyAjaxResponse expects loadFromServer object") ;
  var rsx = rsp.responseXML ? rsp.responseXML : rsp ;
  var rsf = AWS.transformAjaxResponse(rsx,xsl) ; if (!rsf) return ;
  var te  = getCheckElement(tid) ; if (!te) return ;
  var de  = Sarissa.serialize(rsf.documentElement) ;
  
  te.innerHTML = de;
}

AWS.loadFromServer = function (url) {
  var lso = new Object() ;
  lso.savedURL = url ;
  lso.request  = new XMLHttpRequest() ;
  if (!lso.request) return false;
  
  lso.request.open("GET", lso.savedURL, false);
  lso.request.send(null);
  return lso;
}