

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 stripTrailing (toStrip, numStripped) {
  toStrip = toStrip.substring(0, toStrip.length - numStripped);
  return toStrip;
}

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 setOpacity (divName, opacity) {
  var style = getStyleObject(divName);
  if (!style)
    return;
  style.opacity = opacity;
  style.filter = "alpha(opacity=" + opacity*100 + ")";
}

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
    var object = getElement(objectId);
    return object.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 openCenteredWindow (url, width, height, toolbar, scrollbars, resizable) {
  var startX = screen.availWidth/2 - width/2;
  var startY = screen.availHeight/2 - height/2;
  var parameters = "left=" + startX + ",top=" + startY + ",width=" + width + ",height=" + height + ",toolbar=" + toolbar + ",location=1,scrollbars=" + scrollbars + ",resizable=" + resizable;
  // alert(parameters);
  window.open(url, "", parameters);
}

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': {
         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);
}

/***************/
/*             */
/*  Windowing  */
/*             */
/***************/
function openLoadingMessage () {
  var loadingDiv = getElement("loading_messge");
  if (!loadingDiv)
    createCenteredDivide("loading_message", 100, 20, "<!-- <IMG src=\"images/loading.gif\"> -->Loading...");
}

function closeLoadingMessage () {
  var body = document.body;
  var loadingMessage = getElement("loading_message");
  if (loadingMessage)
    body.removeChild(loadingMessage);
}

function openInnerWindow (url, width, height, params) {
  if (typeof(width) == "undefined")
    width = 500;

  if (typeof(height) == "undefined")
    height = 375;

  openLoadingMessage();

  httpRequest = new HttpRequest(url, openInnerWindowCallback);
  httpRequest.setParameter("width", width);
  httpRequest.setParameter("height", height);
  httpRequest.post(params);
}

function openInnerWindowCallback () {
  var response = httpRequest.getResponse();
  var width = httpRequest.getParameter("width");
  var height = httpRequest.getParameter("height");
  // alert(response);
  var innerWindow = getElement("inner_window");

  var body = document.body;
  if (innerWindow)
    body.removeChild(innerWindow);

  var titlebar = "<DIV class=\"titlebar\" id=\"inner_window_titlebar\"><!-- <IMG src=\"images/delete.gif\" onClick=\"closeInnerWindow()\"> --><A href=\"javascript: closeInnerWindow()\">close</A></DIV>";
  createCenteredDivide("inner_window", width, height, titlebar + response);
  closeLoadingMessage();
}

function createCenteredDivide (divName, width, height, content, border) {
  var body = document.body;
  var divide = document.createElement("DIV");
  divide.setAttribute("id", divName);
  body.appendChild(divide);

  var style = getStyleObject(divName);
  var windowWidth = getWindowWidth();
  var windowHeight = getWindowHeight();

  var left = windowWidth/2 - Number(width)/2;
  var top = 150;

  if (height != "" && height > 0)
    top = windowHeight/2 - Number(height)/2;

  if (top < 0)
    top = 150;

  var scrollX = getScrollX();
  var scrollY = getScrollY();
  // alert(scrollX + " x " + scrollY);
  left += scrollX;
  top += scrollY;

  style.position = "absolute";
  style.left = left + "px";
  style.top = top + "px";
  style.width = width + "px";

  if (height != "" && height > 0)
    style.height = height + "px";

  if (border)
    style.border = "solid " + border + " 1px";
  style.zIndex = 900;

  divide.innerHTML = content;
}

function closeInnerWindow () {
  var innerWindowDiv = getElement("inner_window");
  var body = document.body;
  if (innerWindowDiv)
    body.removeChild(innerWindowDiv);
}

/****************/
/*              */
/* Browwer Info */
/*              */
/****************/
function getWindowWidth () {
  if (parseInt(navigator.appVersion)>3) {
    if (navigator.appName=="Netscape")
      return window.innerWidth;

    if (navigator.appName.indexOf("Microsoft")!=-1)
      return document.body.offsetWidth;
  }
}

function getWindowHeight () {
  var windowHeight = 0;
  if (typeof(window.innerHeight) == 'number') {
    windowHeight = window.innerHeight;
  }
  else {
    if (document.documentElement && document.documentElement.clientHeight) {
      windowHeight = document.documentElement.clientHeight;
    }
    else {
      if (document.body && document.body.clientHeight) {
        windowHeight = document.body.clientHeight;
      }
    }
  }
  return windowHeight;
}

function getWindowHeightOld () {
  var windowHeight = 0;
  if (parseInt(navigator.appVersion) > 3) {
    if (navigator.appName == "Netscape") {
      windowHeight = window.innerHeight;
    }
    if (navigator.appName.indexOf("Microsoft") != -1) {
      windowHeight = document.body.offsetHeight;
    }
  }
  return windowHeight;
}

/*
function getScrollY () {
  if (document.all)
    return document.body.scrollTop;
  else return window.pageYOffset;
}

function getScrollX () {
  if (document.all)
    return document.body.scrollLeft;
  else return window.pageXOffset;
}
*/
function getScrollX () {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function getScrollY () {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}