function pause (millisecond) {
  var now = new Date();
  var exitTime = now.getTime() + millisecond;

  while(true) {
    now = new Date();
    if (now.getTime() > exitTime) 
      return;
  }
}


function trim (str) {
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

function getElement (name) {
  if (document.getElementById) {
    return document.getElementById(name);
  }
  else if (document.all) {
    return document.all[name];
  }
  else if (document.layers) {
    return document.layers[name];
  }
}

function setCookie(name, value, expires, path, domain, secure) {
  var cookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = cookie;
}

function loadPage (url) {
  window.location = url;
}

function validDate (date) {
  return true;
}

function setPadding (divID, padding) {
  var style = getStyleObject(divID);
  if (document.layers)
    style.padding = padding
  else style.padding = padding + "px";
}

function setDimensions (divID, widthDim, heightDim) {
/*
  var div = getElement(divID);
  div.width = width;
  div.height = height;
*/
  var style = getStyleObject(divID);
  if (document.layers) {
    style.width = widthDim;
    style.height = heightDim;
  }
  else {
    style.width = widthDim + "px";
    //style.height = heightDim = "px";
  }
}

function absoluteMove (toMove, x, y) {
  var style = getStyleObject(toMove);
  style.position = "absolute";
  if (document.layers) {
    style.left = x;
    style.top = y;
  }
  else {
    style.left = x + "px";
    style.top = y + "px";
  }
}

function deltaMove (toMove, deltaX, deltaY) {
  var style = getStyleObject(toMove);
  style.position = "absolute";
  var left = parseInt(style.left) + deltaX;
  var top = parseInt(style.top) + deltaY;
  if (document.layers) {
    style.left = left;
    style.top = top;
  }
  else {
    style.left = left + "px";
    style.top = top + "px";  
  }
}

function collapse (toCollapse) {
  var the_obj = document.getElementById(toCollapse);
  the_obj.innerHTML = "";
  var the_style = getStyleObject(toCollapse);
  the_style.width = 0;
  the_style.height = 0;
}

function getStyleObject (objectId) {
  if (document.all && document.all(objectId)) {
    // MSIE 4 DOM
    return document.all(objectId).style;
  }
  else if (document.layers && document.layers[objectId]) {
    // NN 4 DOM.. note: this won't find nested layers
    return document.layers[objectId];
  } 
  else return getElement(objectId).style;
}

function getFormContents (form) {
  var value = "";
  var params = "";
  for (i=0; i<form.elements.length; i++) {
    if (!form.elements[i] || (form.elements[i].name.length > 3 && form.elements[i].name.substring(0, 3) == "mce") || form.elements[i].name == "button")
      continue;

    var strlen = form.elements[i].name.length;
    var ending = form.elements[i].name.substring(strlen-2, strlen);
    if (ending == "[]") {
      var name = form.elements[i].name.substring(0, strlen-2);
      var valueArray = form.elements[i].value;
      
      for (var j=0; j<form.elements[i].options.length; j++) {
        if (form.elements[i].options[j].selected)
          params += name + "_" + form.elements[i].options[j].value + "=1&";
      }
      continue;
    }

    switch (form.elements[i].type) {
       case 'button':
       case 'submit':
         continue;
       case 'textarea': {
         if (form.elements[i].name == "description")
           value = tinyMCE.getContent();
         if (value == "" || !value) {
           var textarea = document.getElementById(form.elements[i].name);
           value = textarea.value;
         }
         break;
       }
       case 'checkbox':
         value = (form.elements[i].checked) ? "on" : 0;
         break;
       case 'text':
       case 'hidden':
       case 'password':
       case 'select':
       case 'select-one':
         value = form.elements[i].value;
         break;
       default:
//         alert(form.elements[i].type);
         break;
    }
    if (!value)
      value = "";

    params += form.elements[i].name + "=" + escape(value) + "&";
  }
  return params;
}

function ensureDouble (inputName) {
  var input = getElement(inputName);
  var value = input.value;
  
  if (value == "")
    value = "0.00";
}


function centeredSubWindow (content_url, name, params, width, height, opacity) {
  var windowHeight = window.innerHeight;
  var windowWidth = window.innerWidth;
  var x = windowWidth/2 - width/2;
  var y = windowHeight/2 - height/2;
  // alert("(" + x + ", " + y + ") " + windowWidth + " x " + windowHeight + " | " + width + " x " + height);
  subWindow(content_url, name, params, x, y, width, height, opacity);
}

function subWindow (content_url, name, params, x, y, width, height, opacity) {
  if (getElement(name))  // subWindow already open
    return;
  var div = document.createElement("DIV");
  div.setAttribute("name", name);
  div.setAttribute("id", name);
  div.setAttribute("border", 1);
  div.style.border = "#000000 solid 1px;";
  div.style.backgroundColor = "#FFFFFF";
  div.style.zIndex = 9;
  // div.innerHTML = "<IMG src=\"images/indicator.gif\">Loading...";
  if (!opacity)
    opacity = "0.90";

  div.style.opacity = opacity;

  var body = document.body;
  body.appendChild(div);
  if (width && height) {
    //alert("Dimensioning to " + width + " x " + height);
    setDimensions(name, width, height);
  }
  if (x && y) {
    // alert("Moving " + name + " to " + x + ", " + y);
    absoluteMove(name, x, y);
  }
  httpRequest = new HttpRequest(content_url, subWindowContentLoaded);
  if (params)
    params += "&";
  params += "subwindow_name=" + name;
  httpRequest.post(params);
}

function subWindowContentLoaded () {
  var response = httpRequest.getResponse();
  // alert(response);
  var response_parts = response.split("|");
  var subWindowName = response_parts[0];
  var subWindowTitleName = subWindowName + "_title"
  var subWindow = getElement(subWindowName);
  var title = document.createElement("DIV");
  var content = document.createElement("DIV");
  var closeButton = document.createElement("IMG");
  
  title.setAttribute("id", subWindowTitleName);
  content.setAttribute("id", subWindowName + "_content");
  closeButton.setAttribute("id", subWindowName + "_close");
  closeButton.setAttribute("src", "images/close.jpg");
  closeButton.setAttribute("onClick", "closeSubWindow('" + subWindowName + "')");
  closeButton.setAttribute("align", "right");
  
  if (!subWindow)
    alert(subWindowName + " not found.");

  subWindow.appendChild(title);
  subWindow.appendChild(content);
  title.appendChild(closeButton);
  setPadding(subWindowName, 5);

  content.innerHTML = response_parts[1];
}

function closeSubWindow (name) {
  var subWindow = getElement(name);
  var body = document.body;
  // alert("Attempting to close " + name);
  body.removeChild(subWindow);
}

