//
// !COPYRIGHT!
//                      Copyright (c) 2009 Teleformix LLC
//                       All Rights Reserved
// 
// 
// THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF TELEFORMIX LLC
// 
// The copyright notice above does not evidence any
// actual or intended publication of such source code.
// 
// This document contains trade secret data and proprietary information of
// Teleformix, LLC and should be treated as confidential.  No part of this 
// information may be copied, or disclosed in part or in whole as permitted 
// by Teleformix LLC
// 
// Copyright (c) 1998-2009 by Teleformix, LLC.
// All Rights Reserved
// 
// $Id: js_utils.js,v 1.15 2010/02/09 20:13:12 echen Exp $
// !!
//

var blockElements		= [ "ADDRESS", "BLOCKQUOTE", "BODY", "CENTER", "COL",
							"COLGROUP", "DD", "DIR", "DIV", "DL", "DT",
							"FIELDSET", "FORM", "H1", "H2", "H3", "H4", "H5",
							"H6", "HR", "IFRAME", "LEGEND", "LISTING",
							"MARQUEE", "MENU", "OL", "P", "PLAINTEXT", "PRE",
							"UL", "XMP" ];
//
// Hide element on page
//
function hideElement(elname)
{
	var element		= document.getElementById(elname);

	if (! element)
	{
		return false;
	}

	try
	{
		element.style.display = 'none';
	}
	catch (err)
	{
		return false;
	}

	return true;
}


//
// Display previously hidden element
//
function showElement(elname)
{
	var element		= document.getElementById(elname);
	var tagname;
	var isBlock		= false;
	var value;

	if (! element)
	{
		return false;
	}

	tagname = element.tagName.toUpperCase();

	for (var i = 0; i < blockElements.length; i++)
	{
		if (tagname == blockElements[i])
		{
			isBlock = true;
			break;
		}
	}

	if (isBlock)
	{
		value = "block";
	}
	else if ((tagname == "FRAME") || (tagname == "TBODY") ||
			 (tagname == "TFOOT") || (tagname == "THEAD"))
	{
		value = "block";
	}
	else if (tagname == "TABLE")
	{
		value = (document.all) ? "block" : "table";
	}
	else if (tagname == "TR")
	{
		value = (document.all) ? "block" : "table-row";
	}
	else if ((tagname == "TH") || (tagname == "TD"))
	{
		value = (document.all) ? "block" : "table-cell";
	}
	else if (tagname == "LI")
	{
		value = "list-item";
	}
	else
	{
		value = "inline";
	}

	try
	{
		element.style.display = value;
	}
	catch (err)
	{
		return false;
	}

	return true;
}


function cloakElement(elname)
{
	var element		= document.getElementById(elname);

	if (! element)
	{
		return false;
	}

   	try
   	{
		element.style.visibility = 'hidden';
   	}
   	catch (err)
   	{
		return false;
   	}

   	return true;
}


function uncloakElement(elname)
{
   	var element		= document.getElementById(elname);

   	if (! element)
   	{
		return false;
   	}

   	try
   	{
		element.style.visibility = 'visible';
   	}
   	catch (err)
   	{
		return false;
   	}

   	return true;
}



//
// getFormElementByName(): Returns the first object reference to a named form
//                         element. 
//
// Params: name - The name of the element
//
// Return: The object reference to the form element or null
//
function getFormElementByName(name)
{
	var els;
	var tmp;

	for (var i = 0; i < document.forms.length; i++)
	{
		els = document.forms[i].elements[name];

		if (els != null)
		{
			return els;
		}
	}

	// INPUT type "hidden" confuses Mozilla's form.items collection
	if (! document.all)
	{
		tmp = document.getElementsByTagName("INPUT");

		for (var i = 0; i < tmp.length; i++)
		{
			if ((tmp[i].type == "hidden") &&
				((tmp[i].name == name) || (tmp[i].id == name)))
			{
				return tmp[i];
			}
		}
	}

	return null;
}


//
// getFormElement(): Returns the object reference to a named form
//                   element. Note that this method assumes that
//                   the form element is part of document.forms[0]
//
// Params: inObj - The name of the element or its DOM reference
//
// Return: The object reference to the form element or null
//
function getFormElement(inObj)
{
	if (typeof(inObj) == "string")
	{
		return getFormElementByName(inObj);
	}
	else
	{
		return inObj
	}
}


//
// getSelectIndex(): Returns index of selected option in a single select box
//
// Params: select - The DOM object reference of the SELECT tag - or -
//                  the name of a select tag in document.forms[0]
//
// Return: The index of the selected OPTION
//         -1 on error
//
function getSelectIndex(inObj)
{
	var select 	= getFormElement(inObj);
	var opts 	= select.options;

	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].selected)
		{
			return i;
		}
	}

	return -1;
}


//
// getSelectValue(): Returns string value of selected option in a single select
//
// Params: select - The DOM object reference of the SELECT tag - or -
//                  the name of a select tag in document.forms[0]
//
// Return: The value of the selected OPTION
//         empty string on error
//
function getSelectValue(inObj)
{
	var select 	= getFormElement(inObj);
	var opts 	= select.options;

	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].selected)
		{
			return opts[i].value;
		}
	}

	return "";
}


function getMultipleValue(inObj)
{
	var select	= getFormElement(inObj);
	var opts	= select.options;
	var list	= new Array();

	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].selected)
		{
			list[list.length] = opts[i].text;
		}
	}

	return list;
}


function getMultipleIndex(inObj)
{
	var select	= getFormElement(inObj);
	var opts	= select.options;
	var list	= new Array();

	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].selected)
		{
			list[list.length] = i;
		}
	}

	return list;
}


//
// getSelectText(): Returns displayed string of selected option
//
// Params: select - The DOM object reference of the SELECT tag - or -
//                  the name of a select tag in document.forms[0]
//
// Return: The string displayed of the selected OPTION
//         empty string on error
//
function getSelectText(inObj)
{
	var select	= getFormElement(inObj);
	var opts	= select.options;

	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].selected)
		{
			return opts[i].text;
		}
	}

	return "";
}


//
// setSelectIndex(): Sets the highlighted OPTION in a SELECT
//
// Params: select - The DOM object reference of the SELECT tag - or -
//                  the name of a select tag in document.forms[0]
//         index  - The index of the OPTION to select
//
// Return: true on success
//         false on error (i.e. index does not exist)
//
function setSelectIndex(inObj, index)
{
	var select 	= getFormElement(inObj);

	if (select.length <= index)
	{
		return false;
	}
	else
	{
		select.options[index].selected = true;
		return true;
	}
}


//
// setSelectValue(): Sets the highlighted OPTION in a SELECT
//
// Params: select - The DOM object reference of the SELECT tag - or -
//                  the name of a select tag in document.forms[0]
//         value  - The value of the OPTION to select
//
// Return: true on success
//         false on error (i.e. no option matches value)
//
function setSelectValue(inObj, value)
{
	var select 	= getFormElement(inObj);
	var opts 	= select.options;

	for (var i = 0; i < opts.length; i++)
	{
		if (opts[i].value == value)
		{
			opts[i].selected = true;
			return true;
		}
	}

	return false;
}


//
// insertSelectOption(): Adds an OPTION to a SELECT
//
// Params: select - The DOM object reference of the SELECT tag - or -
//                  the name of a select tag in document.forms[0]
//         value  - The value of the new OPTION
//		   text   - The displayed text of the new OPTION
//         [pos]  - Index position of the new OPTION (defaults to end)
//
// Return: true on success
//         false on error
//
function insertSelectOption(inObj, value, text)
{
	var select 	= getFormElement(inObj);
	var newOpt 	= document.createElement("OPTION");

	newOpt.text = text;
	newOpt.value = value;

	if (arguments.length == 4)
	{
		select.add(newOpt, arguments[3]);
	}
	else
	{
		if (document.all)
		{
			select.add(newOpt);
		}
		else
		{
			select.add(newOpt, null);
		}
	}

	return true;
}


//
// deleteSelectOption(): Adds an OPTION to a SELECT
//
// Params: select     - The DOM object reference of the SELECT tag - or -
//                      the name of a select tag in document.forms[0]
//         critereon  - A string value or number index to delete
//
// Return: true on success
//         false on error
//
function deleteSelectOption(inObj, criterion)
{
	var select 	= getFormElement(inObj);

	if ((typeof(criterion) == "number") && (select.options.length > criterion))
	{
		select.remove(criterion);
		return true;
	}
	else if (typeof(criterion) == "string")
	{
		for (var i = 0; i < select.options.length; i++)
		{
			if (select.options[i].value == criterion)
			{
				select.remove(i);
				return true;
			}
		}
	}

	return false;
}


//
// clearSelect(): Removes all OPTIONs from a SELECT
//
// Params: txtarea   - The DOM object reference to the SELECT tag
//
// Return: Nothing
//
function clearSelect(inObj)
{
	var select  = getFormElement(inObj);
	var numopts = select.options.length;

	for (var i = 0; i < numopts; i++)
	{
		select.remove(0);
	}

	return true;
}


//
// getRadioIndex(): Returns the index of the selected radio button
//
// Params: radio - The DOM object reference to an array of Radio Buttons
//
// Return: The index of the selected radio button
//         -1 if none are selected
//
function getRadioIndex(inObj)
{
	var radio = getFormElement(inObj);

	for (var i = 0; i < radio.length; i++)
	{
		if (radio[i].checked)
		{
			return i;
		}
	}

	// Single element Radio Groups are not Arrays
	if ((! radio.length) && (radio.type.toUpperCase() == "RADIO") &&
		(radio.checked))
	{
		return 0;
	}

	return -1;
}


//
// getRadioValue(): Returns the value of the selected radio button
//
// Params: radio - The DOM object reference to an array of Radio Buttons
//
// Return: The value of the selected radio button
//         Empty String if none are selected
//
function getRadioValue(inObj)
{
	var radio = getFormElement(inObj);

	for (var i = 0; i < radio.length; i++)
	{
		if (radio[i].checked)
		{
			return radio[i].value;
		}
	}

	// Single element Radio Groups are not Arrays
	if ((! radio.length) && (radio.type.toUpperCase() == "RADIO") &&
		(radio.checked))
	{
		return radio.value;
	}

	return "";
}


//
// getRadioLabel(): Returns the Text Label of the radio button
//
// Params: radio - The DOM object reference to an array of Radio Buttons
//
// Return: The value of the selected radio button text label
//         Empty String if none are selected
//
function getRadioLabel(inObj)
{
	var radio = getFormElement(inObj);

	for (var i = 0; i < radio.length; i++)
	{
		if (radio[i].checked)
		{
			return radio[i].outerText;
		}
	}

	return "";
}


//
// setRadioIndex(): Selects a radio button by index
//
// Params: radio - The DOM object reference to an array of Radio Buttons
//         index - The index of the radio button to select
//
// Return: true on success
//         false on failure (i.e. no such index)
//
function setRadioIndex(inObj, index)
{
	var radio = getFormElement(inObj);

	// Single element Radio Groups are not Arrays
	if ((! radio.length) && (radio.type.toUpperCase() == "RADIO"))
	{
		radio.checked = true;
		return true;
	}
	else if (radio.length <= index)
	{
		return false;
	}
	else
	{
		radio[index].checked = true;
		return true;
	}
}


//
// setRadioValue(): Selects a radio button by value
//
// Params: radio - The DOM object reference to an array of Radio Buttons
//         value - The value of the radio button to select
//
// Return: true on success
//         false on failure (i.e. no matching value)
//
function setRadioValue(inObj, value)
{
	var radio = getFormElement(inObj);

	for (var i = 0; i < radio.length; i++)
	{
		if (value == radio[i].value)
		{
			radio[i].checked = true;
			return true;
		}
	}

	return false;
}


//
// getCheckboxValue(): Get the value of a checkbox
//
// Params: checkbox  - The DOM object reference to the checkbox
//         [boolean] - Flag for boolean return value (default: false)
//
// Return: 'T' or true if the checkbox is checked
//         'F' or false if the checkbox is unchecked
//
function getCheckboxValue(inObj)
{
	var checkbox		= getFormElement(inObj);
	var booleanRetVal 	= (arguments.length == 2) && (arguments[1]);

	if (booleanRetVal)
	{
		return checkbox.checked;
	}
	else
	{
		return (checkbox.checked) ? 'T' : 'F';
	}
}


//
// setCheckboxValue(): Set the value of a checkbox
//
// Params: checkbox - The DOM object reference to the checkbox
//         value    - The value to set to (boolean or string)
//
// Return: true on success
//         false on failure (i.e. bad input)
//
function setCheckboxValue(inObj, value)
{
	var checkbox	= getFormElement(inObj);

	if (typeof(value) == 'string')
	{
		value = value.toLowerCase();

		if ((value == 't')		||
			(value == 'y')  	||
			(value == 'true')	||
			(value == 'on')		||
			(value == 'yes'))
		{
			value = true;
		}
		else if ((value == 'f')		||
				 (value == 'n')  	||
				 (value == 'false')	||
				 (value == 'off')	||
				 (value == 'no'))
		{
			value = false;
		}
		else
		{
			return false;
		}
	}

	checkbox.checked = value;
	return true;
}


//
// setMaxLength(): Event handler to restrict input size of TEXTAREA objects
//                 Use as the onKeyPress handler.
//                 (ex: onKeyPress='return setMaxLength(this, 25)' )
//
//                 Note, this method can not block pastes yet.
//
// Params: txtarea   - The DOM object reference to the TEXTAREA
//         maxLength - The maximum number of characters allowed in TEXTAREA
//
// Return: false if character exceeds length (cancelling keypress)
//         true if keypress is ok
//
function setMaxLength(inObj, maxLength)
{
	var txtarea 	= getFormElement(inObj);

	if (txtarea.value.length >= maxLength)
	{
		// Take care of selection then retype
		if (document.selection.type == "None")
		{
			return false;
		}
	}
}


//
// clearTextArea(): Clears text in a TEXTAREA object
//
// Params: txtarea   - The DOM object reference to the TEXTAREA
//
// Return: Nothing
//
function clearTextArea(inObj)
{
	getFormElement(inObj).value = "";
}


//
// getValue(): Retrieves value of any form element
//
// Params: formElement   - The DOM object reference to a form element
//         [errorRetVal] - Alternate return value on error (default: "")
//
// Return: formElement's value on success
//         errorRetVal on failure
//
function getValue(inObj)
{
	var errorRetVal	= "";
	var formElement	= getFormElement(inObj);
	var elementType;

	if (typeof(formElement) != "object")
	{
		return errorRetVal;
	}

	// Try to get the type of form element
	// this may fail if a bad element type
	// was passed in
	try
	{
		// Check for radio button group
		elementType = formElement.type;

		if ((formElement.length != null) &&
			(elementType == null))
		{
			elementType = formElement[0].type;
		}
	}
	catch (ex)
	{
		return errorRetVal;
	}

	switch (elementType)
	{
		case 'edit':		// Bad type. Common error. Renders as 'text'
		case 'text':
		case 'textarea':
		case 'password':
		case 'hidden':
			return formElement.value;
			break;
		case 'select-one':
			return getSelectValue(formElement);
			break;
		case 'select-multiple':
			return getMultipleValue(formElement);
			break;
		case 'checkbox':
			return getCheckboxValue(formElement);
			break;
		case 'radio':
			return getRadioValue(formElement);
			break;
		default:
			return errorRetVal;
			break;
	}
}


//
// setValue(): Generic value setter for form elements
//
// Params: formElement - The DOM object reference to a form element
//         value       - The value to set the element to
//
// Return: true on success
//         false on failure
//
function setValue(inObj, value)
{
	var formElement	= getFormElement(inObj);
	var elementType;

	if (typeof(formElement) != "object")
	{
		return false;
	}

	// Try to get the type of form element
	// this may fail if a bad element type
	// was passed in
	try
	{
		// Check for radio button group
		elementType = formElement.type;

		if ((formElement.length != null) &&
			(elementType == null))
		{
			elementType = formElement[0].type;
		}
	}
	catch (ex)
	{
		return false;
	}

	switch (elementType)
	{
		case 'edit':		// Bad type. Common error. Renders as 'text'
		case 'text':
		case 'textarea':
		case 'password':
		case 'hidden':
			formElement.value = value;
			return true;
			break;
		case 'select-one':
			return setSelectValue(formElement, value);
			break;
		case 'checkbox':
			return setCheckboxValue(formElement, value);
			break;
		case 'radio':
			return setRadioValue(formElement, value);
			break;
		default:
			return false;
			break;
	}
}


//
// setSpanValue(): Content setter for SPAN elements
//
// Params: spanname - Name of the SPAN to set (will set all with that name)
//         value    - The value to set the element content to
//
// Return: true on if any SPANs are set
//         false if none are
//
function setSpanValue(spanname, value)
{
	var elements 	= document.getElementsByTagName("span");
	var setone		= false;
	var text;
	var tmp;
	var c;


	if ((value == null) || (elements == null) || (elements.length == 0))
	{
		return false;
	}

	for (var i = 0; i < elements.length; i++)
	{
		text = value;

		if ((elements[i].name == spanname) || (elements[i].id == spanname))
		{
			// White space after a SPAN is undetectable in IE.
			// SPAN tags with initial content generate extra space.
			if (((document.all) && (elements[i].innerHTML == "")) ||
				(elements[i].CC_MUST_CHECK))
			{
				if (elements[i].innerHTML == "")
				{
					elements[i].CC_MUST_CHECK = true;
				}

				tmp = elements[i].getAdjacentText("afterEnd");

				if (tmp)
				{
					c = tmp.charAt(0);

					if ((c != '`') && (c != '~')  && (c != '!')  &&
						(c != '%') && (c != '^')  && (c != ')')  &&
						(c != '-') && (c != '_')  && (c != ']')  && 
						(c != '}') && (c != '\\') && (c != ';')  && 
						(c != ':') && (c != '\'') && (c != '\"') && 
						(c != ',') && (c != '.')  && (c != '>')  && 
						(c != '/') && (c != '?'))
					{
						text += " ";
					}
				}
			}

			elements[i].innerHTML = text;
			setone = true;
		}
	}


	return setone;
}


//
// setLimitedSpan(): Content setter for fixed width SPAN elements. Only for use
//                   with SPANs inside table cells.
//
// Params: spanname - Name of the SPAN to set (will set all with that name)
//         value    - The value to set the element content to
//
// Return: true on if any SPANs are set
//         false if none are
//
function setLimitedSpan(spanname, value)
{
	var elements 		= document.getElementsByTagName("span");
	var tagName;
	var calcSpan;
	var parentEl;
	var width;
	var fontFamily;
	var fontSize;
	var fontWeight;
	var fontStyle;
	var len;


	for (var i = 0; i < elements.length; i++)
	{
		if ((elements[i].name != spanname) && (elements[i].id != spanname))
		{
			continue;
		}

		parentEl = elements[i].parentNode;
		tagName = parentEl.tagName.toUpperCase();

		while ((tagName == "B") || (tagName == "I") || (tagName == "U") ||
			   (tagName == "S") || (tagName == "SMALL") || (tagName == "BIG") ||
			   (tagName == "SPAN") || (tagName == "EM") || (tagName == "XMP") ||
			   (tagName == "DEL") || (tagName == "INS") || (tagName == "Q") ||
			   (tagName == "A"))
		{
			parentEl = parentEl.parentNode;
			tagName = parentEl.tagName.toUpperCase();
		}

		if ((tagName != "TD") && (tagName != "TH"))
		{
			continue;
		}

		width = parentEl.clientWidth - (2 * elements[i].offsetLeft);

		fontFamily = getCurrentStyle(elements[i], "font-family");
		fontSize = getCurrentStyle(elements[i], "font-size");
		fontWeight = getCurrentStyle(elements[i], "font-weight");
		fontStyle = getCurrentStyle(elements[i], "font-style");

		// FF hack
		if (fontWeight == "401")
		{
			fontWeight = "bold";
		}

		if (! calcSpan)
		{
			calcSpan = document.createElement("SPAN");
			calcSpan.zIndex = 1000;
			calcSpan.style.position = "absolute";
			calcSpan.style.top = "0px";
			document.getElementsByTagName("BODY")[0].appendChild(calcSpan);
		}

		calcSpan.style.fontFamily = fontFamily;
		calcSpan.style.fontSize = fontSize;
		calcSpan.style.fontWeight = fontWeight;
		calcSpan.style.fontStyle = fontStyle;
		calcSpan.innerHTML = value;

		len = value.length;

		while ((width < calcSpan.clientWidth) && (len > 0))
		{
			len--;
			calcSpan.innerHTML = value.substring(0, len) + " ...";
		}

		elements[i].innerHTML = calcSpan.innerHTML;

		if (value.length != len)
		{
			elements[i].title = value;
		}
	}

	if (calcSpan)
	{
		document.getElementsByTagName("BODY")[0].removeChild(calcSpan);
	}
}


function allToUpper()
{
	var formobj;
	var form_el;
	var el_type;


	for (var i = 0; i < document.forms.length; i++)
	{
		formobj = document.forms[i];

		for (var j = 0; j < formobj.length; j++)
		{
			form_el = formobj.elements[j];

			if (form_el.tagName.toUpperCase() != "INPUT")
			{
				continue;
			}

			el_type = form_el.type.toLowerCase();

			// Edit isn't legal, but a common mistake (unknown types are
			// rendered as text types)
			if ((form_el.type == 'edit') || (form_el.type == 'text'))
			{
				form_el.value = form_el.value.toUpperCase();
			}
		}
	}
}


//
// Note: Only use this on 0 based arrays with all values defined
// CIS: Case Insensitive
//
function findIndexCIS(array_obj, value)
{
	try
	{
		for (var i = 0; i < array_obj.length; i++)
		{
			if (array_obj[i].toLowerCase() == value.toLowerCase())
			{
				return i;
			}
		}
	}
	catch (err)
	{
	}

	return -1
}

//
// Note: Only use this on 0 based arrays with all values defined
//
function findIndex(array_obj, value)
{
	try
	{
		for (var i = 0; i < array_obj.length; i++)
		{
			if (array_obj[i] == value)
			{
				return i;
			}
		}
	}
	catch (err)
	{
	}

	return -1
}


function convertToCSSName(value)
{
	var newval = "";


	for (var i = 0; i < value.length; i++)
	{
		if (isUpperCase(value.charAt(i)))
		{
			newval += "-" + value.charAt(i).toLowerCase();
		}
		else
		{
			newval += value.charAt(i);
		}
	}

	return newval;
}


function convertToMemberName(value)
{
	var newval = "";


	for (var i = 0; i < value.length; i++)
	{
		if (value.charAt(i) == "-")
		{
			i++;
			newval += value.charAt(i).toUpperCase();
		}
		else
		{
			newval += value.charAt(i);
		}
	}

	return newval;
}


//
// Styles are in CSS name format (i.e. background-color not backgroundColor)
//
function getCurrentStyle(obj, styleName)
{
	if (obj.currentStyle)
	{
		return obj.currentStyle[convertToMemberName(styleName)];
	}
	else
	{
		return document.defaultView.getComputedStyle(obj, null).getPropertyValue(convertToCSSName(styleName));
	}
}

function readCookie(name) 
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0; i < ca.length; i++) 
	{
		var c = ca[i];
		while (c.charAt(0) == ' ')
		{
			c = c.substring(1, c.length);
		}
		if (c.indexOf(nameEQ) == 0)
		{
			return c.substring(nameEQ.length, c.length);
		}
	}
	
	return null;
}

function createCookie(name, value, days) 
{
	var date, expires;
	
	if (days) 
	{
		date = new Date();
		date.setTime(date.getTime() + (days*24*60*60*1000));
		expires = "; expires=" + date.toGMTString();
	}
	else
	{
		expires = "";
	}
	
	document.cookie = name + "=" + value + expires + "; path=/";
}

function simulateJSessionID()
{
	var s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	var result = "";
	
	for(var i=0; i<32; i++)
	{
		result += s.charAt(Math.floor(Math.random() * 100) % 36);
	}
	
	return "WCID" + result;
}

function addHiddenInput(name, value)
{
	var form = document.forms[0];
	var el = form.elements[name];
	
	if ( el != null )
	{
		setValue(name, value);
	}
	else
	{
		el = document.createElement("input");
		el.type = "hidden";
		el.name = name;
		el.value = value;

		form.appendChild(el);
	}
}

function formatCurrency(amt)
{
	var parts;
	
	if ( amt == 0 )
	{
		return "0.00";
	}
	
	if ( Math.floor(amt) == amt )
	{
		return amt + ".00";
	}
	
	if ( Math.floor(amt * 10) == (amt * 10) )
	{
		return amt + "0";
	}
	
	if ( Math.floor(amt * 100) != (amt * 100) )
	{
		amt = amt + "";
		parts = amt.split(".");
		amt = parts[0] + "." + parts[1].substring(0, 2);
		
		return amt;
	}
	
	return amt;
}

