//slider utils
slideSpeed = 15;


/**
 This method changes the innerHTML of the specified element to show an
*/
function showLoadingImage(elementId, loadingImage){
  $(elementId).innerHTML='<center><img src="'+loadingImage+'"></center>';
}


/**
* This function appends a function call to the chain of functions called on window.onload();
*
* Not that it CANNOT be used like this:  doOnLoad(alert('foo'));
* It MUST be used like this:

doOnLoad(function() { alert('foo') });
 or
doOnLoad( nameOfMyFunction );

*/
function doOnLoad(onStartMethod){

   // just use the onStartMethod if there is no existing onLoad methods
   if(!window.onload){
      window.onload=onStartMethod;
      return;
   }

   // Save the old onLoad method
   var oldOnLoad = window.onload;

   window.onload = function() {
      oldOnLoad();
      onStartMethod();
   }
}


 getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();

  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }

  return elements;
}




/**************************************************************************
 Convenience Method to allow for accessing named elements in a document
 with the following syntax:
  $('elementName')
**************************************************************************/
function $() {
   var elements = new Array();
   for (var i = 0; i < arguments.length; i++) {
      var element = arguments[i];
      if (typeof element == 'string') {
         if (document.getElementById) {
            element = document.getElementById(element);
         } else if (document.all) {
            element = document.all[element];
         }
      }
      elements.push(element);
   }

   if (arguments.length == 1 && elements.length > 0) {
      return elements[0];
   } else {
      return elements;
   }
}


function pclose(elementId)
{
   obj = document.getElementById(elementId);

   obj.speed = -2;
   if(obj.slideTimer) return;  //Already moving


   var x = slider.length;
   slider[x] = obj;
   slide(x);
}


function popen(elementId)
{
   obj = document.getElementById(elementId);

   obj.speed = 2;
   if(obj.slideTimer) return;  //Already moving


   var x = slider.length;
   slider[x] = obj;
   slide(x);
}

function toggle(elementId)
{
   obj = document.getElementById(elementId);

   obj.speed = -1 * obj.speed;
   if(obj.slideTimer) return;  //Already moving


   var x = slider.length;
   slider[x] = obj;
   slide(x);
}

function initSlidingElements(withElementsOpen)
{
   if(!document.getElementsByTagName) return;

   slider = new Array();
   var divs = document.getElementsByTagName('div');

   for(var x=0; x<divs.length; x++) {
      divs[x].originalHeight = parseInt(divs[x].style.height);
      if(divs[x].className == 'slider') divs[x].speed = withElementsOpen?1:-1;
   }


   for(var x=0; x<divs.length; x++) {
      // Hide Menu DIV's
      if(divs[x].className == 'slider'){
         if(!withElementsOpen){
            divs[x].style.height = '1px';
            divs[x].style.display = 'none';
         }    }
      else {
         divs[x].style.display = 'block';
      }
   }
}

function slide(x)
{
   var obj = slider[x];
   if(obj.style.display != 'block') obj.style.display = 'block';
   var height = parseInt(obj.style.height) + obj.speed * slideSpeed;
   var targetHeight = obj.originalHeight;

   //alert(obj.offsetHeight+' :: '+obj.speed+'  :: '+slideSpeed);
   //alert(obj.style.display+' :: height: '+height+'  :: target: '+targetHeight);

   if(height > targetHeight)
   {
      obj.style.height = targetHeight + 'px';
      obj.slideTimer = false;
      return;
   }

   if(height <= 1)
   {
      obj.style.height = '1px';
      obj.style.display = 'none';
      obj.slideTimer = false;
      return;
   }

   obj.style.height = height + 'px';
   obj.slideTimer = setTimeout('slide(' + x + ');', 100);
}
// select Box utils
function allSelect( selectBox )
{
   for (i=0;i<selectBox.options.length;i++)
   {
      selectBox.options[i].selected = true;
   }
}

function addOption(theSel, theText, theValue)
{
   var newOpt = new Option(theText, theValue);
   var selLength = theSel.length;
   theSel.options[selLength] = newOpt;
}

function deleteOption(theSel, theIndex)
{
   var selLength = theSel.length;
   if(selLength>0)
   {
      theSel.options[theIndex] = null;
   }
}

function moveOptions(theSelFrom, theSelTo)
{

   var selLength = theSelFrom.length;
   var selectedText = new Array();
   var selectedValues = new Array();
   var selectedCount = 0;

   var i;

   // Find the selected Options in reverse order
   // and delete them from the 'from' Select.
   for(i=selLength-1; i>=0; i--)
   {
      if(theSelFrom.options[i].selected)
      {
         selectedText[selectedCount] = theSelFrom.options[i].text;
         selectedValues[selectedCount] = theSelFrom.options[i].value;
         deleteOption(theSelFrom, i);
         selectedCount++;
      }
   }

   // Add the selected text/values in reverse order.
   // This will add the Options to the 'to' Select
   // in the same order as they were in the 'from' Select.
   for(i=selectedCount-1; i>=0; i--)
   {
      addOption(theSelTo, selectedText[i], selectedValues[i]);
   }

   var NS4 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) < 5);
   if(NS4) history.go(0);
}


/*************************************
Helper Method used to calculate the appropriate values for:
Max Food As Points, Min Food As Points & CardioProtective Points.

These values are based upon the recommendations for:
Min Calories, Max Calories and Diet Fat Percentage.

PARAMETERS:
+dietFatPercentage - Form element (SELECT) that holds the dietFatPercentage value
+minCalories - Form element (SELECT) that holds the min Calories value
+maxCalories - Form element (SELECT) that holds the max Calories value
+minFoodPoints - SPAN element where we display the calculated min Food As Points Value
+minFoodPoints_value - Form element (HIDDEN) that we use to pass the calculated min Food As Points value to the application
+maxFoodPoints - SPAN element where we display the calculated max Food As Points Value
+maxFoodPoints_value - Form element (HIDDEN) that we use to pass the calculated max Food As Points value to the application
+cardioPoints - SPAN element where we display the calculated CardioPoints Value
+cardioPoints_value - Form element (HIDDEN) that we use to pass the calculated CardioPoints value to the application
**************************************/
function calculateDietPoints(dietFatPercentage, minCalories, maxCalories, minFoodPoints,
        minFoodPoints_value, maxFoodPoints, maxFoodPoints_value, cardioPoints, cardioPoints_value)
{
   // if dietFatPercentage is '20'
   if( dietFatPercentage.value == '20' ) {
      // set MIN FOOD POINTS
      switch( minCalories.value ) {
         case '1200':
            minFoodPoints.innerHTML='23';
            minFoodPoints_value.value='23';
            break;
         case '1600':
            minFoodPoints.innerHTML='30';
            minFoodPoints_value.value='30';
            break;
         case '1800':
            minFoodPoints.innerHTML='34';
            minFoodPoints_value.value='34';
            break;
         case '2000':
            minFoodPoints.innerHTML='39';
            minFoodPoints_value.value='39';
            break;
         case '2400':
            minFoodPoints.innerHTML='46';
            minFoodPoints_value.value='46';
            break;
         case '2800':
            minFoodPoints.innerHTML='52';
            minFoodPoints_value.value='52';
            break;
         case '3000':
            minFoodPoints.innerHTML='55';
            minFoodPoints_value.value='55';
            break;
         case '3600':
            minFoodPoints.innerHTML='66';
            minFoodPoints_value.value='66';
            break;
      }
      // SET MAX FOOD POINTS & CP POINTS
      switch( maxCalories.value ) {
         case '1200':
            maxFoodPoints.innerHTML='23';
            maxFoodPoints_value.value='23';
            cardioPoints_value.value='10';
            cardioPoints.innerHTML='10';
            break;
         case '1600':
            maxFoodPoints.innerHTML='30';
            maxFoodPoints_value.value='30';
            cardioPoints_value.value='12';
            cardioPoints.innerHTML='12';
            break;
         case '1800':
            maxFoodPoints.innerHTML='34';
            maxFoodPoints_value.value='34';
            cardioPoints_value.value='17';
            cardioPoints.innerHTML='17';
            break;
         case '2000':
            maxFoodPoints.innerHTML='39';
            maxFoodPoints_value.value='39';
            cardioPoints_value.value='20';
            cardioPoints.innerHTML='20';
            break;
         case '2400':
            maxFoodPoints.innerHTML='46';
            maxFoodPoints_value.value='46';
            cardioPoints_value.value='24';
            cardioPoints.innerHTML='24';
            break;
         case '2800':
            maxFoodPoints.innerHTML='52';
            maxFoodPoints_value.value='52';
            cardioPoints_value.value='26';
            cardioPoints.innerHTML='26';
            break;
         case '3000':
            maxFoodPoints.innerHTML='55';
            maxFoodPoints_value.value='55';
            cardioPoints_value.value='28';
            cardioPoints.innerHTML='28';
            break;
         case '3600':
            maxFoodPoints.innerHTML='66';
            maxFoodPoints_value.value='66';
            cardioPoints_value.value='35';
            cardioPoints.innerHTML='35';
            break;
      }
   }
   // if its 25% fat
   else if( dietFatPercentage.value == '25' ) {
      // set MIN FOOD POINTS
      switch( minCalories.value ) {
         case '1200':
            minFoodPoints.innerHTML='23';
            minFoodPoints_value.value='23';
            break;
         case '1600':
            minFoodPoints.innerHTML='29';
            minFoodPoints_value.value='29';
            break;
         case '1800':
            minFoodPoints.innerHTML='33';
            minFoodPoints_value.value='33';
            break;
         case '2000':
            minFoodPoints.innerHTML='36';
            minFoodPoints_value.value='36';
            break;
         case '2400':
            minFoodPoints.innerHTML='43';
            minFoodPoints_value.value='43';
            break;
         case '2800':
            minFoodPoints.innerHTML='51';
            minFoodPoints_value.value='51';
            break;
         case '3000':
            minFoodPoints.innerHTML='56';
            minFoodPoints_value.value='56';
            break;
         case '3600':
            minFoodPoints.innerHTML='65';
            minFoodPoints_value.value='65';
            break;
      }
      // SET MAX FOOD POINTS & CP POINTS
      switch( maxCalories.value ) {
         case '1200':
            maxFoodPoints.innerHTML='23';
            maxFoodPoints_value.value='23';
            cardioPoints_value.value='10';
            cardioPoints.innerHTML='10';
            break;
         case '1600':
            maxFoodPoints.innerHTML='29';
            maxFoodPoints_value.value='29';
            cardioPoints_value.value='12';
            cardioPoints.innerHTML='12';
            break;
         case '1800':
            maxFoodPoints.innerHTML='33';
            maxFoodPoints_value.value='33';
            cardioPoints_value.value='17';
            cardioPoints.innerHTML='17';
            break;
         case '2000':
            maxFoodPoints.innerHTML='36';
            maxFoodPoints_value.value='36';
            cardioPoints_value.value='20';
            cardioPoints.innerHTML='20';
            break;
         case '2400':
            maxFoodPoints.innerHTML='43';
            maxFoodPoints_value.value='43';
            cardioPoints_value.value='24';
            cardioPoints.innerHTML='24';
            break;
         case '2800':
            maxFoodPoints.innerHTML='51';
            maxFoodPoints_value.value='51';
            cardioPoints_value.value='26';
            cardioPoints.innerHTML='26';
            break;
         case '3000':
            maxFoodPoints.innerHTML='56';
            maxFoodPoints_value.value='56';
            cardioPoints_value.value='28';
            cardioPoints.innerHTML='28';
            break;
         case '3600':
            maxFoodPoints.innerHTML='65';
            maxFoodPoints_value.value='65';
            cardioPoints_value.value='35';
            cardioPoints.innerHTML='35';
            break;
      }
   }
   // if its 35% fat diet
   else {
      // set MIN FOOD POINTS
      switch( minCalories.value ) {
         case '1200':
            minFoodPoints.innerHTML='23';
            minFoodPoints_value.value='23';
            break;
         case '1600':
            minFoodPoints.innerHTML='30';
            minFoodPoints_value.value='30';
            break;
         case '1800':
            minFoodPoints.innerHTML='33';
            minFoodPoints_value.value='33';
            break;
         case '2000':
            minFoodPoints.innerHTML='38';
            minFoodPoints_value.value='38';
            break;
         case '2400':
            minFoodPoints.innerHTML='44';
            minFoodPoints_value.value='44';
            break;
         case '2800':
            minFoodPoints.innerHTML='50';
            minFoodPoints_value.value='50';
            break;
         case '3000':
            minFoodPoints.innerHTML='56';
            minFoodPoints_value.value='56';
            break;
         case '3600':
            minFoodPoints.innerHTML='65';
            minFoodPoints_value.value='65';
            break;
      }
      // SET MAX FOOD POINTS & CP POINTS
      switch( maxCalories.value ) {
         case '1200':
            maxFoodPoints.innerHTML='23';
            maxFoodPoints_value.value='23';
            cardioPoints_value.value='10';
            cardioPoints.innerHTML='10';
            break;
         case '1600':
            maxFoodPoints.innerHTML='30';
            maxFoodPoints_value.value='30';
            cardioPoints_value.value='12';
            cardioPoints.innerHTML='12';
            break;
         case '1800':
            maxFoodPoints.innerHTML='33';
            maxFoodPoints_value.value='33';
            cardioPoints_value.value='17';
            cardioPoints.innerHTML='17';
            break;
         case '2000':
            maxFoodPoints.innerHTML='38';
            maxFoodPoints_value.value='38';
            cardioPoints_value.value='20';
            cardioPoints.innerHTML='20';
            break;
         case '2400':
            maxFoodPoints.innerHTML='44';
            maxFoodPoints_value.value='44';
            cardioPoints_value.value='24';
            cardioPoints.innerHTML='24';
            break;
         case '2800':
            maxFoodPoints.innerHTML='50';
            maxFoodPoints_value.value='50';
            cardioPoints_value.value='26';
            cardioPoints.innerHTML='26';
            break;
         case '3000':
            maxFoodPoints.innerHTML='56';
            maxFoodPoints_value.value='56';
            cardioPoints_value.value='28';
            cardioPoints.innerHTML='28';
            break;
         case '3600':
            maxFoodPoints.innerHTML='65';
            maxFoodPoints_value.value='65';
            cardioPoints_value.value='35';
            cardioPoints.innerHTML='35';
            break;
      }
   }
}

function clickHandler(evt)
{
    d = this;
    if (d.getAttribute("selected") == "true")
    {
        d.style.backgroundColor="#DDDDFF";
        d.setAttribute("selected", "false");
    }
    else
    {
        d.style.backgroundColor="#FFFFDD";
        d.setAttribute("selected", "true");
    }
}

function htmlEscape(s)
{
    ss = String(s);
    return ss.replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;");
}

function insertClient(id, fname, lname, practice, address, city, state, zip, phone, fax, targetDiv)
{

    // set up phone string if needed
    e = document.createElement("div");
    e.className = "doc";
    e.setAttribute("lastname", lname);
    e.setAttribute("selected", "false");
    e.setAttribute("clientId", String(id));
    e.onclick = clickHandler;
    var s = "<b>" + htmlEscape(fname) + " " + htmlEscape(lname) + " [" + htmlEscape(id) + "]</b><br>";
    if (isUsableString(practice)) s = s + htmlEscape(practice) + "<br>";
    s = s + htmlEscape(address) + "<br>" + htmlEscape(city) + ", " + htmlEscape(state) + " " + htmlEscape(zip);
    if (isUsableString(phone)) s = s + "<br>p: " + htmlEscape(phone);
    if (isUsableString(fax)) s = s + "<br>f: " + htmlEscape(fax);
    e.innerHTML = s;
    targetDiv.appendChild(e);

}

function isUsableString(s)
{
    var str = String(s);

    if (s == null)
        return false;
    else if (s == "NULL")
        return false;
    else if (s == "")
        return false;
    else
        return true;
}

function transferObjects(source, target, attributeName, maximumNumberOfTransferredElements, alertMessageToDisplay)
{
    s = document.getElementById(source);
    t = document.getElementById(target);

    // grab the source elements
    hasSelectedNodes = true;

    while (hasSelectedNodes)
    {

        snl = s.getElementsByTagName("div");
        found = false;
        for (i = 0; i < snl.length; i++)
        {
            if (snl[i].getAttribute("selected") == "true")
            {
                tnl = t.getElementsByTagName("div");

		// check wheather max number of transferred elements has been reached
		if (maximumNumberOfTransferredElements) {
		    if (tnl.length >= maximumNumberOfTransferredElements)
		    {
		        alert(alertMessageToDisplay);
		        break;
		    }
		}

                // deselect the node
                snl[i].style.background = "#DDDDFF";
                snl[i].setAttribute("selected", "false");

		// trasfer the node
		// find where to stick in the target array
                inserted = false;
                for (j = 0; j < tnl.length; j++)
                {
                    if (tnl[j].getAttribute(attributeName) == snl[i].getAttribute(attributeName))
                    {
                        // no need to insert, just dump the source item
                        s.removeChild(snl[i]);
                        inserted = true;
                        break;
                    }
                    else if (tnl[j].getAttribute("lastname") > snl[i].getAttribute("lastname"))
                    {
                        t.insertBefore(snl[i], tnl[j]);
                        inserted = true;
                        break;
                    }
                }

                if (inserted == false)
                    t.appendChild(snl[i]);
                found = true
                break;
            }

        }

        if (found == false)
            hasSelectedNodes = false;
    }
}


function insertUser(id, param1, param2, param3, targetDiv)
{
    var strInnerHTMLTemp;

    e = document.createElement("div");
    e.className = "doc";
    e.setAttribute("lastname", param3);
    e.setAttribute("selected", "false");
    e.setAttribute("userId", String(id));
    e.onclick = clickHandler;

    strInnerHTMLTemp = "<b>" + htmlEscape(param2) +
                    " " + htmlEscape(param3);

    if (param1 != null) {
        if (param1.length > 0) {
            strInnerHTMLTemp = strInnerHTMLTemp + " [" + htmlEscape(param1) + "]";
        }
    }

    strInnerHTMLTemp = strInnerHTMLTemp + "</b>";

    e.innerHTML = strInnerHTMLTemp;
    targetDiv.appendChild(e);
}


function insertList(id, param1, param2, param3, targetDiv)
{
    var strInnerHTMLTemp;

    e = document.createElement("div");
    e.className = "doc";
    e.setAttribute("listname", param3);
    e.setAttribute("selected", "false");
    e.setAttribute("listId", String(id));
    e.onclick = clickHandler;

    strInnerHTMLTemp = "<b>" + htmlEscape(param3);

    if (param2 != null) {
        if (param2.length > 0) {
            strInnerHTMLTemp = strInnerHTMLTemp + " [" + htmlEscape(param2) + "]";
        }
    }

    strInnerHTMLTemp = strInnerHTMLTemp + "</b>";

    e.innerHTML = strInnerHTMLTemp;
    targetDiv.appendChild(e);
}


function insertAttachment(id, param1, param2, param3, targetDiv)
{
    var strInnerHTMLTemp;

    e = document.createElement("div");
    e.className = "doc";
    e.setAttribute("attachmentfilename", param3);
    e.setAttribute("selected", "false");
    e.setAttribute("attachmentId", String(id));
    e.onclick = clickHandler;

    strInnerHTMLTemp = "<b>" + htmlEscape(param3);

    if (param2 != null) {
        if (param2.length > 0) {
            strInnerHTMLTemp = strInnerHTMLTemp + " [" + htmlEscape(param2) + "]";
        }
    }

    strInnerHTMLTemp = strInnerHTMLTemp + "</b>";

    e.innerHTML = strInnerHTMLTemp;
    targetDiv.appendChild(e);
}


function setObjectIdList(anchor, formId, objectName, objectValue)
{
    s = document.getElementById(anchor);
    f = document.getElementById(formId);

    snl = s.getElementsByTagName("div");

    for (i = 0; i < snl.length; i++)
    {
        e = document.createElement("input");
        e.setAttribute("type", "hidden");
        e.name = objectName;
        e.value = snl[i].getAttribute(objectValue);
        f.appendChild(e);
    }
}



function swapSubmitButton( elButton)
{
    elButton.style.visibility = "hidden";
    elButton.parentNode.style.backgroundImage="url('/4mh/images/loading.gif')";
}

function restoreSubmitButton( elButton)
{
    elButton.style.visibility = "visible";
    elButton.parentNode.style.backgroundImage="none";
}

function generateTimeoutAlert()
{
    var a = new Date();
    var b = new Date( a.getTime() + 300000);

    var s;
    var hours;
    var suffix;

    if (b.getHours() == 0)
    {
        hours = 12;
        suffix = "AM";
    }
    else if (b.getHours() == 12)
    {
        hours = 12;
        suffix = "PM";
    }
    else if (b.getHours() > 12)
    {
        hours = b.getHours() - 12;
        suffix = "PM";
    }
    else
    {
        hours = b.getHours();
        suffix = "AM";
    }

    s = "" + hours + ":" + ((b.getMinutes() > 10) ? "" : "0") + b.getMinutes() + ":" + ((b.getSeconds() > 10) ? "" : "0") + b.getSeconds() + " " + suffix;

    alert("Your session will time out at " + s + ". Please save what you are working on or navigate to another page to avoid a timeout.");
}

function initTimeoutAlert( accountType)
{
    var timeout = 1500000;
    if (accountType == "patient")
    {
        timeout = 1200000;
    }

    if (accountType != "anonymous")
    {
        setTimeout('generateTimeoutAlert()', timeout);
    }

}

function communityStandardsPopup()
{
    window.open("/4mh/communityStandards.html", "communityStandards", "height=400,width=500,menubar=no,location=no,toolbar=no,status=no,scrollbars=yes");
}

function ftrim(s) {
  while (s.substring(0,1) == ' ')
  {
    	s = s.substring(1,s.length);
  }
  while (s.substring(s.length-1,s.length) == ' ')
  {
    	s = s.substring(0,s.length-1);
  }
  return s;
}

function validSecurityInfoInput(inputToValidate, inputName)
{
	return validInput(inputToValidate, inputName, 5);
}

function validInput(inputToValidate, inputName, minLength)
{
	str = ftrim(inputToValidate);

	// validation fails if the input is blank
	if(str == '')
	{
		alert(inputName  + " was not entered!");
		return false;
	}

	// validation fails in the input is less than minLength characters
	if (str.length < minLength)
	{
		alert(inputName + " is too short - minimum " + minLength + " characters is required.");
		return false;
	}

	// regular expression
	var re = /^[\w .,()-]+$/;
	// validation fails if the input doesn't match the regular expression
	if(!re.test(str))
	{
		alert(inputName + " contains invalid characters!")
		return false;
	}

	// validation was successful
	return true;
}

/**
set of functions used by My Messages, Inbox and Outbox views, (RK 05/15/2009)
*/


function newMessage() {
  document.location="newmessage.html";
  return false;
}

function checkAll()
{
  theForm = document.getElementById("mainForm");
  for (i = 0; i < theForm.elements.length; i++)
  {
    if (theForm.elements[i].name == "batchMessage")
      theForm.elements[i].checked = true;
  }
}

function uncheckAll()
{
  theForm = document.getElementById("mainForm");
  for (i = 0; i < theForm.elements.length; i++)
  {
    if (theForm.elements[i].name == "batchMessage")
      theForm.elements[i].checked = false;
  }
}

function checkBoxes()
{
  if (boxState)
    uncheckAll();
  else
    checkAll();
  boxState = !boxState;
}


function processSelectedItems() {

  var selectedCounter = 0;

  var form = document.getElementById('mainForm');

  // check whether at least one item is selected
  for (i = 0; i < form.elements.length; i++)
  {
    if (form.elements[i].name == "batchMessage")
      if (form.elements[i].checked == true) {
        selectedCounter++;
      }
  }

  if (commandBatchMessageSize > 0) {
    selectedCounter = selectedCounter + commandBatchMessageSize;
  }

  if (selectedCounter == 0) {
    alert("At least one item needs to be selected.");
    return false;
  }

  if (confirm("Are you sure you want to delete " + selectedCounter + " selected message(s)?"))
  {
    // process with delete
    field = document.createElement("input");
    field.setAttribute("name", "_finish");
    field.setAttribute("type", "hidden");
    form.appendChild(field);
    form.submit();
    document.body.style.cursor = 'wait';
    return false;
  }

  // process with cancel
  field = document.createElement("input");
  field.setAttribute("name", "_cancel");
  field.setAttribute("type", "hidden");
  form.appendChild(field);
  form.submit();
  document.body.style.cursor = 'wait';
  return false;
}

function bhlPrompt( sPrompt, sTitle, callback)
{
    // create a one-off dialog box
    var html = "";
    html += "<div id=\"bhlPromptDiv\">";
    html += "<div class=\"hd\">" + sTitle + "</div>";
    html += "<div class=\"bd\">";
    html += "" + sPrompt + "<br>";
    html += "<input type=\"text\" class=\"wide\" name=\"bhlPromptInput\" id=\"bhlPromptInput\">";
    html += "<br>";
    html += "<input type=\"button\" class=\"actionButton\" value=\"cancel\" onClick=\"YAHOO.bhl.ui.bhlPrompt.cancel()\">";
    html += "<input type=\"button\" class=\"actionButton\" value=\"OK\" onClick=\"YAHOO.bhl.ui.bhlPrompt.callback($('bhlPromptInput').value)\">";
    html += "</div>";
    html += "</div>";

    // create the div and append it to the body
    var d = $('bhlPromptContainer');
    if (d == null)
    {
        d = document.createElement("div");
        d.className="yui-skin-sam";
        d.id="bhlPromptContainer";

        document.body.appendChild(d);
    }
    d.innerHTML = html;

    YAHOO.bhl.ui.bhlPrompt = new YAHOO.widget.Panel("bhlPromptDiv", { width: "450px", modal: true, close: false, draggable: false, visible: true, fixedcenter: true, constraintoviewport: true } );

    // wrap the callback in a function that also hides and destroys the dialog
    var wrappedCallback = function(s)
    {
        YAHOO.bhl.ui.bhlPrompt.hide();
        callback(s);
        YAHOO.bhl.ui.bhlPrompt.destroy();
    }

    YAHOO.bhl.ui.bhlPrompt.callback = wrappedCallback;
    YAHOO.bhl.ui.bhlPrompt.cancel = function() { YAHOO.bhl.ui.bhlPrompt.destroy(); }
    YAHOO.bhl.ui.bhlPrompt.render();
    YAHOO.bhl.ui.bhlPrompt.show();
}


/**
set of functions used by Bulletin Board (RK 10/12/2009)
*/

 function submitPost()
 {
  var form = document.getElementById('entityForm');
  if (form.sendButton.disable == true)
  {
   // form.sendButton.disable was set; post already submitted and is being processed; don't submit again;
   return;
  }

  // form.sendButton.disable not set; submit the form
  form.sendButton.disable = true;
  form.submit();
  document.body.style.cursor = 'wait';
 }

 function submitSearch()
 {
  var form = document.getElementById('searchForm');
  if (form.sendButton.disable == true)
  {
   // form.sendButton.disable was set; question already submitted and is being processed; don't submit again;
   return;
  }
  // form.sendButton.disable not set; submit the form
  form.sendButton.disable = true;
  form.submit();
  document.body.style.cursor = 'wait';
 }

 function processRemovePermission(deleteIndx) {

  var form = document.getElementById('masterForm');

  alert("This permission will not be permanently deleted from this forum unless you click 'Confirm' button on this page.");

  // process with delete
  field = document.createElement("input");
  field.setAttribute("type", "hidden");
  field.setAttribute("name", "_target0");
  field.setAttribute("value", "Delete");
  form.appendChild(field);

  field = document.createElement("input");
  field.setAttribute("type", "hidden");
  field.setAttribute("name", "deleteIndx");
  field.setAttribute("value", deleteIndx);
  form.appendChild(field);

  form.submit();
  document.body.style.cursor = 'wait';
  return false;

 }

 function processAddPermission() {

  var form = document.getElementById('masterForm');

  alert("This permission will not be permanently added to this forum unless you click 'Confirm' button on this page.");

  // process with delete
  field = document.createElement("input");
  field.setAttribute("type", "hidden");
  field.setAttribute("name", "_target0");
  field.setAttribute("value", "Add");
  form.appendChild(field);

  form.submit();
  document.body.style.cursor = 'wait';
  return false;

 }

 function goToLocation(url)
 {
  document.location = url;
  return false;
 }

 function goToDeleteForum(url)
 {
  if (confirm("This operation will delete this forum and all the forums below this one with all the topics and posts which belong to those forums.\r\nDo you want to continue?"))
  {
   document.location = url;
   return false;
  }
  else
  {
   return false;
  }
 }

 function goToDeleteTopic(url)
 {
  if (confirm("This operation will delete this topic and all the posts which belong to this topic.\r\nDo you want to continue?"))
  {
   document.location = url;
   return false;
  }
  else
  {
   return false;
  }
 }

 function goToDeletePost(url)
 {
  if (confirm("This operation will delete this post.\r\nDo you want to continue?"))
  {
   document.location = url;
   return false;
  }
  else
  {
   return false;
  }
 }

 function goToLocationWithCheckingSignature(url, noteSignatureLength, preferencesPage)
 {
  if (noteSignatureLength == 0)
  {
   if (confirm("Your 'Chart Note & Text Goal Signature' is empty. In order to enter this option you need to define your 'Chart Note & Text Goal Signature' in 'Preferences' section.\n\nClick 'Cancel' if you don't want to continue.\nClick 'OK' to go to 'Preferences' section now.")) {
    window.location.href = preferencesPage;
    return;
   }
   else
    return;
  }

  document.location = url;
  return;
 }

function validDateInput(theDate, msg)
{
	dateTest = new Date(theDate);

    if (isNaN(dateTest.valueOf()))
    {
        alert("Please enter a valid date or use the calendar tool.");
        return false;
    }

    return true;
}
