/*
 * Smallbox CMS http://www.smallboxsoftware.net
 *
 * Copyright (C) 2000-2008 Kenneth Spencer
 *
 * This file is intended only for use withing Smallbox CMS.
 * Unauthorized use is strictly prohibited.
 *
 */

var sbid = new Date().getTime();
var req;
var req_obj = new Object();

onloads[onloads.length] = function() {sb_css('/smallbox4/css/status_bar.css')};

function sbAjaxObj() {
 var xml = null;
 if(req.readyState == 4) { /* loaded */
  if(req.status == 200) { /* OK */
   if(xml = req.responseXML) {
   }
   else {
    alert("Invalid XML:\n"+req.responseText);
   }
  } 
  else {
   alert("There was a problem retrieving the XML data:\n" + req.statusText);
  }
 }
}


function sb_status_window(message) {
 var cont = document.createElement('div');
 cont.className = 'sb_status_bar';
 cont.style.position = 'fixed';
 cont.style.zIndex = 2000;
 cont.style.bottom = 0;

 var div = document.createElement('div');
 div.className = 'sb_status_message';
 div.innerHTML = message;
 cont.appendChild(div);
 document.body.appendChild(cont);
 
 ref = function() {
  document.body.removeChild(cont);
 }
 setTimeout(ref, 15000);
}

function sb_process_req(req) {
 var xml, tags, doc;
 if (xml = req.responseXML) {
  if (!(tags = xml.getElementsByTagName('document'))) {
   return false;
  }
  if (!(doc = tags.item(0))) {
   return false;
  }
  var header = doc.childNodes.item(0);

  if (!header || header.nodeName != 'header') {
   return false;
  }

  var child = doc.childNodes.item(1);
  if (header.getAttribute('type') == 'error') {
   sb_status_window(sb_display_xml(child));
  }
  else if (header.getAttribute('type') == 'success') {
   sb_status_window(sb_display_xml(child));
  }
  else if (header.getAttribute('type') == 'alert') {
   alert('alert goes here');
  }
  else {
   var obj  = new Object();
   obj.type = header.getAttribute('type');
   obj.element = child; 
   return obj;
  }
 }
 else {
  alert(req.responseText);
 }
}

function sb_request_obj() {
 if(window.XMLHttpRequest) {
  try {
   req = new XMLHttpRequest();
  } 
  catch(e) {
   req = false;
  }
 } 
 else if(window.ActiveXObject) {
  try {
   req = new ActiveXObject("Msxml2.XMLHTTP");
  } 
  catch(e) {
   try {
    req = new ActiveXObject("Microsoft.XMLHTTP");
   } 
   catch(e) {
    req = false;
   }
  }
 }
 return req;
}



var reqList = new Object();
function sb_req(url, callback, formData, cancelName) {
 if (!callback) {
  callback = sb_process_req;
 }

 if (cancelName) {
  if (reqList[cancelName]) {
   req = reqList[cancelName]
   if (req.readyState != 0) {
    req.abort();
   }
  }
  else {
   var req = sb_request_obj();
  }
 }
 else {
  var req = sb_request_obj();
 }
 if(req) {
  req.onreadystatechange = function () {
   if(req.readyState == 4) { 
    if(req.status == 200) { /* OK */
     callback(req);
    } 
    else {
     alert("There was a problem retrieving the XML data:\n" + req.statusText);
    }
   }
  }

  if(formData && typeof(formData) != 'undefined') 
   formData += '&sbid='+sbid
  else
   formData = 'sbid='+sbid

  if(formData) {
   req.open("POST", url, true);
   req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   req.send(formData);
  }
  else {
   req.open("GET", url, true);
   req.send(null);
  }
 }
 return req;
}



/*** Get XML but wait */
function sb_get_xml(url, formData) {
 req = false;
 req = sb_request_obj();
 if(req) {
  req_obj.req  = req;
  req.onreadystatechange = sbAjaxObj;

  if(formData && typeof(formData) != 'undefined') 
   formData += '&sbid='+sbid
  else
   formData = 'sbid='+sbid

  if(formData) {
   req.open("POST", url, false);
   req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   req.send(formData);
  }
  else {
   req.open("GET", url, false);
   req.send(null);

  }
  if(req.status == 200) {
   sb_process_req(req);
   if(xml = req.responseXML) {
    return xml;
   }
  }
 }
}

