// main/fpd.js
//
// Functions used by entire site
//



function urldecode(val)
{
  var lsRegExp = /\+/g;
  return unescape(String(val).replace(lsRegExp, " "));
}

/*
var httpObj = createRequestObject();

function createRequestObject()
{
   var ro;
   var browser = navigator.appName;

   if (browser == "Microsoft Internet Explorer")
   {
      ro = new ActiveXObject("Microsoft.XMLHTTP");
   }
   else
   {
      ro = new XMLHttpRequest();
   }

   return ro;
}

function queryBroker(url, event, vars)
{
   var postVars;
   postVars = "m=" + event;

   for (key in vars)
   {
      postVars = postVars + "&" + key + "=" + vars[key];
   }

   httpObj.open("POST", url, false);
   httpObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   httpObj.setRequestHeader("Content-length", postVars.length);
   httpObj.setRequestHeader("Connection", "close");
   httpObj.send(postVars);

   if (httpObj.status == 200)
     return httpObj.responseText;
}


*/


function queryBroker(url, event, vars)
{
   var ready=0;
   var postVars;
   var result;

   vars['m'] = event;

   var request = new Ajax.Request(url,
   {
      method: "POST",
      asynchronous: false,
      parameters: vars,

      onSuccess: function(transport)
      {
         result = transport.responseText;
         ready = 1;
      }

   });

   while (ready == 0)
   {
      // tremendous hack, I know.  Better then redoing tons of stuff.
   }

return result;
}



function queryBrokerJSON(url, event, vars)
{
   var resultRaw = queryBroker(url, event, vars);
   var result = eval("(" + resultRaw + ")");

return result;
}



function showBrokerValidationErrors(result, formObj)
{

}



// set thle style of the specified element to "none"  Pass the object id name.
//

function hideElement(idName)
{
   if (!idName) return;
   document.getElementById(idName).style.display = "none";
}



// set thle style of the specified element to "block"  Pass the object id name.
//

function showElement(idName)
{
   if (!idName) return;
   document.getElementById(idName).style.display = "block";
}



// Dereference an element from its parent, essentially deleting it.  Pass the object id name.
//

function removeElement(idName)
{
   var id = document.getElementById(idName);
   id.parentNode.removeChild(id);
}



// Uncheck radio buttons for specified radio button object.
//

function clearRadioButtons(radioObj)
{
   if (!radioObj) return;

   for (var i=0; i < radioObj.length; i++)
   {
      radioObj[i].checked = false;
   }
}



// Unselect current selection of specified select box object,
//

function clearSelectBox(selectObj)
{
   if (!selectObj) return;
   if (!selectObj.options) return;
   selectObj.selectedIndex = 0;
}


// Get selected value of a radio button and return it.  Return empty string if no selected value.
//

function getRadioSelectedValue(buttonGroup)
{
   var i = getSelectedRadioNum(buttonGroup);

   if (i == -1)
   {
      return "";
   }
   else
   {
      /* Make sure button group is actual array */
      if (buttonGroup[i])
      {
         return buttonGroup[i].value;
      }
      /* The button group is just the one button, and it is checked */
      else
      {
         return buttonGroup.value;
      }
   }
}



// Toggle state of checkboxes in a group.
//

function checkUncheckAll(checkAllState, cbGroup)
{
	for (i = 0; i < cbGroup.length; i++)
	{
		cbGroup[i].checked = checkAllState.checked;
	}
}



// Return an array of values selected in the check box group. if no boxes were checked, returned
// array will be empty (length will be zero)
//

function getCheckboxSelectedValue(buttonGroup)
{
   var retArr = new Array(); // set up empty array for the return values
   var selectedItems = getSelectedCheckboxNum(buttonGroup);

   if (selectedItems.length != 0)
   {
      retArr.length = selectedItems.length;

      for (var i=0; i<selectedItems.length; i++)
      {
         if (buttonGroup[selectedItems[i]])
         {
            retArr[i] = buttonGroup[selectedItems[i]].value;
         }
         else
         {
            retArr[i] = buttonGroup.value;// return that value
         }
      }
   }

return retArr;
}



// Returns the array number of the selected radio button or -1 if no button is selected
//

function getSelectedRadioNum(buttonGroup)
{
   if (buttonGroup[0])
   {
      for (var i=0; i<buttonGroup.length; i++)
      {
         if (buttonGroup[i].checked)
         {
            return i
         }
      }
   }
   else
   {
      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
   }

   /* if we get to this point, no radio button is selected */
   return -1;
}



// Go through all the check boxes. return an array of all the ones
// that are selected (their position numbers). if no boxes were checked,
// returned array will be empty (length will be zero)
//

function getSelectedCheckboxNum(buttonGroup)
{
   var retArr = new Array();
   var lastElement = 0;

   if (buttonGroup[0])
   {
      for (var i=0; i<buttonGroup.length; i++)
      {
         if (buttonGroup[i].checked)
         {
            retArr.length = lastElement;
            retArr[lastElement] = i;
            lastElement++;
         }
      }
   }
   else
   {
      if (buttonGroup.checked)
      {
         retArr.length = lastElement;
         retArr[lastElement] = 0; // return zero as the only array value
      }
   }

return retArr;
}



// Form Highlighter Class
//

function FormHighlighter(formObj)
{
   this.names = new Object;
   this.formElements = new Object();
   this.styleHash = new Object();
   this.formStyle = new Object();
   this.formObj = formObj;

   function setElements(formElements)
   {
      this.formElements = formElements;
      this.saveStyleForForm();
   }

   function setStyle(styleHash)
   {
      this.styleHash = styleHash;
   }

   function highlight()
   {
      for (key in this.formElements)
      {
         if ($(key).style)
         {
            Element.setStyle(key, this.styleHash);
         }

         if (this.formObj[key].style)
         {
            Element.setStyle(formObj[key], this.styleHash);
         }
      }
   }

   function saveStyleForForm()
   {
      for (i=0; i < this.formObj.elements.length; i++)
      {
         if (this.formObj.elements[i].name && this.formObj.elements[i].style)
         {
            var style = new Object();

            for (styleKey in this.styleHash)
            {
               style[styleKey] = Element.getStyle(this.formObj[key], styleKey);
            }

            this.formStyle[i] = style;
         }
      }
   }

   function clearHighlight()
   {
      for (key in this.formStyle)
      {
         Element.setStyle(this.formObj.elements[key], this.formStyle[key]);
      }
   }

   this.setElements = setElements;
   this.setStyle = setStyle;
   this.highlight = highlight;
   this.saveStyleForForm = saveStyleForForm;
   this.clearHighlight = clearHighlight;
}



function StyleToggle(formObj)
{
   /* Array of objects containining element and styleHash */
   this.elements = new Array();


  /* Add an element to toggle.  Specify element object or id and an Object of key => value
   * pairs of CSS style information.
   */

   function addElement(element, styleHash)
   {
      var oldStyleHash = new Object;
      var obj = new Object;

      if (typeof(element) != "object")
      {
         element = $(element);
      }

      for (key in styleHash)
      {
         oldStyleHash[key] = Element.getStyle(element, key);
      }

      obj['element'] = element;
      obj['newStyleHash'] = styleHash;
      obj['oldStyleHash'] = oldStyleHash;
      this.elements.push(obj);
   }


  /* Clear all elements from array.
   */

   function clearElements()
   {
      this.elements = new Array();
   }


  /* Change the style of the specified elements.
   */

   function changeStyle()
   {
      this.elements.each(function(element)
      {
         if (element.element.style)
         {
            Element.setStyle(element.element, element.newStyleHash);
         }
      });
   }


  /* Revert to the original style of the elements.
   */

   function revertStyle()
   {
      this.elements.each(function(element)
      {
         if (element.element.style)
         {
            Element.setStyle(element.element, element.oldStyleHash);
         }
      });
   }

   this.addElement = addElement;
   this.clearElements = clearElements;
   this.changeStyle = changeStyle;
   this.revertStyle = revertStyle;
}



/**
* Function : dump()
* Arguments: The data - array,hash(associative array),object
*    The level - OPTIONAL
* Returns  : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
*/
function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;

//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += "    ";

if(typeof(arr) == 'object') { //Array/Hashes/Objects
 for(var item in arr) {
  var value = arr[item];

  if(typeof(value) == 'object') { //If it is an array,
   dumped_text += level_padding + "'" + item + "' ...\n";
   dumped_text += dump(value,level+1);
  } else {
   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
  }
 }
} else { //Stings/Chars/Numbers etc.
 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}


function print_r(input, _indent)
{
var indent = (typeof(_indent)=='string')?_indent+'&nbsp;&nbsp;&nbsp;&nbsp;':'&nbsp;&nbsp;&nbsp;&nbsp;';
var paren_indent = (typeof(_indent)=='string')?_indent+'&nbsp;&nbsp;':'';

if ( typeof(input) == 'string' ) {
var output = "'"+ input +"'\n"
} else if ( typeof(input) == 'boolean' ) {
var output = (input?'true':'false') +"\n"
} else if ( typeof(input) == 'object' ) {
var output = ((input.reverse)?'Array':'Object') +"\n"
output += paren_indent + "(\n";
for ( var i in input ) {
output += indent + "["+ i +"] => "+ print_r(input[i],indent)
}
output += paren_indent + ")\n"
}
return output
}


// Dynamic window opener.
//

function d_win(url, name, width, height)
{
    window.open(url, name, "width=" + width + ", height=" + height + ", scrollbars=yes");
}


