function updateAdCount(urlroot) {
  var images = document.getElementsByTagName('img');
  var adImages = new Array();
  var p = 0;
  for ( i=0; i<images.length; i++ ) {
    if ( images[i].className=='ad' ) {
      adImages[p] = images[i];
      p++;
    }
  }
  var ids = '';
  for ( i=0; i<adImages.length; i++ ) {
    ids += adImages[i].id;
    if ( adImages.length != i ) {
      ids += ',';
    }
  }
  if ( ids != '' ) {
    AJAXcall('GET', urlroot + '?module=Ads;action=AdFolder.publicUpdateAdsCount;adID=' + ids);
  }
}

function goFigure(url) {
  /*  psfile://    */
  if (url.indexOf('psfile://') != -1) {
    url = url.replace('psfile://','./?module=Files;action=File.getFile;ID=');
  }

  /*  psm://    */
  if (url.indexOf('psm://') != -1) {
    url = url.replace('psm://','mailto:');
  }

  /*  psf://    */
  if (url.indexOf('psf://') != -1) {
    url = url.replace('psf://','./?module=Articles;action=ArticleFolder.publicOpenFolder;ID=');
  }

  /*  ps://    */
  if (url.indexOf('ps://') != -1) {
    url = url.replace('ps://','');
    if (url.indexOf(';')) {
      url = url.substring(url.indexOf(';')+1,url.length);
    }
    url = './?module=Articles;action=Article.publicShow;ID=' + url;
  }

  /*  psff://    */
  if (url.indexOf('psff://') != -1) {
    url = url.replace('psff://','./?module=Files;action=FileFolder.publicDisplay;ID=');
  }
  window.open(url);
}

function results(status,XML)
{
  if(document.getElementById(ajaxresid)) {
    document.getElementById(ajaxresid).innerHTML=XML;
  }
}
function ajaxFunction()
{ var xmlHttp;
  try //Firefox, Opera 8.0+, Safari
  { xmlHttp=new XMLHttpRequest(); }
  catch (e) //Internet Explorer
  { try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e)
    { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
      catch (e)
      { //userMessage("Your browser does not support AJAX!");
        return null;
      }
    }
  }
  return xmlHttp;
}
var ajaxresid='';
function AJAXcall(type,url,id)//type=['POST','GET'], url=...
{ ajaxresid=id;
  xmlHttp.open(type,url);
  xmlHttp.send(null);
}
var xmlHttp=ajaxFunction();
xmlHttp.onreadystatechange=function()
{ if(xmlHttp.readyState==4)
  { if(xmlHttp.status != 200) return null; //userMessage("Can't connect to server.");
    else 
      results(xmlHttp.status,xmlHttp.responseText);
  }
}

function serializethis(docForm, formatOpts) {
  
  var opts = formatOpts || {};
  var str = '';
  var formElem;
  var lastElemName = '';
  
  for (i = 0; i < docForm.elements.length; i++) {
    formElem = docForm.elements[i];
    
    switch (formElem.type) {
      // Text fields, hidden form elements
      case 'text':
      case 'hidden':
      case 'password':
      case 'textarea':
      case 'select-one':
        str += formElem.name + '=' + encodeURI(formElem.value) + '&'
        break;
        
      // Multi-option select
      case 'select-multiple':
        var isSet = false;
        for(var j = 0; j < formElem.options.length; j++) {
          var currOpt = formElem.options[j];
          if(currOpt.selected) {
            if (opts.collapseMulti) {
              if (isSet) {
                str += ',' + encodeURI(currOpt.value);
              }
              else {
                str += formElem.name + '=' + encodeURI(currOpt.value);
                isSet = true;
              }
            }
            else {
              str += formElem.name + '=' + encodeURI(currOpt.value) + '&';
            }
          }
        }
        if (opts.collapseMulti) {
          str += '&';
        }
        break;
      
      // Radio buttons
      case 'radio':
        if (formElem.checked) {
          str += formElem.name + '=' + encodeURI(formElem.value) + '&'
        }
        break;
        
      // Checkboxes
      case 'checkbox':
        if (formElem.checked) {
          // Collapse multi-select into comma-separated list
          if (opts.collapseMulti && (formElem.name == lastElemName)) {
            // Strip of end ampersand if there is one
            if (str.lastIndexOf('&') == str.length-1) {
              str = str.substr(0, str.length - 1);
            }
            // Append value as comma-delimited string
            str += ',' + encodeURI(formElem.value);
          }
          else {
            str += formElem.name + '=' + encodeURI(formElem.value);
          }
          str += '&';
          lastElemName = formElem.name;
        }
        break;
        
    }
  }
  // Remove trailing separator
  str = str.substr(0, str.length - 1);
  return str;
}