	function eliminateSpaces(s){
		var ss = '';
		if(s == null || s.length == 0){
			return ss;
		}
		for(var i=0;i < s.length;i++){
			c		= s.charAt(i);
			if(c != ' '){
				ss	+= c;
			}
		}
		return ss;
	}

	function reverseString(str){
		if(str == null){
			return str;
		}
		var s	= '';
		for(var i=(str.length - 1);i >=0;i--){
			s	+= str.charAt(i);
		}
		return s;
	}

	// functions relating to operations on elements
	function hideOrShowElements(array, hide){
		if(array == null || array.length == 0){
			return;
		}
		for(var i=0;i < array.length;i++){
			var element	= array[i];
			if(hide){
				if(element.style){
					element.style.visibility	= 'hidden';
				}
			}else{
				if(element.style){
					element.style.visibility	= 'visible';
				}
			}
		}
	}
	function findNumberedElements(form, name){
		var array		= new Array();
		var elements	= form.elements;
		if(elements == null){
			return null;
		}
		if(elements.length){
			for(var i=0;i < elements.length;i++){
				if(elements[i].name.indexOf(name) != -1){
					var sub	= elements[i].name.substr(elements[i].name.indexOf(name) + name.length);
					var num	= parseInt(trim(sub));
					if(!numcheck(num)){
						continue;
					}
					array[array.length]	= elements[i];
				}
			}
		}else{
			if(elements.name.indexOf(name) != -1){
				array[array.length]	= elements;
			}
		}
		return array;
	}

	function findSpecialInputElements(){
		var elementsArray	= new Array('radio', 'checkbox');
		var allElements	= document.all;
		if(allElements == null || allElements.length == 0){
			return;
		}
		for(var i=0;i < allElements.length;i++){
			if(allElements[i] == null || allElements[i].tagName != 'INPUT'){
				continue;
			}
			if(arrayContains(elementsArray, allElements[i].type)){
				if(allElements[i].style){
					allElements[i].style.borderWidth	= '0px';
				}
			}
		}
	}

	function changeTabbingOrder(arrayOfArrays){
		if(arrayOfArrays == null || arrayOfArrays.length == 0){
			return;
		}
		var tabIndex			= 0;
		var found				= false;
		for(var i=0;i < arrayOfArrays.length;i++){
			var array	= arrayOfArrays[i];
			if(array == null || array.length == 0){
				continue;
			}
			for(var j=0;j < array.length;j++){
				for(var k=0;k < arrayOfArrays.length;k++){
					var theArray	= arrayOfArrays[k];
					var element		= theArray[j];
					if(element == null){
						continue;
					}
					if(!found){
						tabIndex	= element.tabIndex;
						found		= true;
					}else{
						tabIndex++;
					}
					element.tabIndex	= tabIndex;
				}
			}
			break;
		}
	}

	function callFunctions(element){
		this.onerror = errorHandlerFunction;
		if(element.onfocus != null){
			element.onfocus();
		}
		if(element.onselect != null){
			element.onselect();
		}
		if(element.onchange != null){
			element.onchange();
		}
		if(element.onclick != null){
			element.onclick();
		}
	}

	function errorHandlerFunction(msg, url, line){
		return false;
	}

	function printArray(array){
		var newArray		= new Array();
		if(array == null){
			alert("array is null");
			return;
		}
        for(var i=0;i < array.length;i++){
		    var obj	= array[i];
            if(isArray(obj)){
                printArray(obj);
            }else if(isObject(obj)){
				obj	= obj.name;
			}
			newArray[newArray.length]	 = obj;
		}
		alert(newArray);
	}


	function openNewWindow(url, name, args){
    var baseHt  = 600;
    var baseWt  = 600;

		var equal	= "=";
		var H		= "height";
		var W		= "width";
		var useWinName
					= !isEmpty(name);

    if(args == null){
      args  = '';
    }
    if(args.indexOf(",") == -1){
      args  += ',';
    }
		var argsArr	= convertToArray(args, ",", equal);
		
    var ht		= argsArr[H];
		if(isNaN(ht)){
      ht      = Math.round(screen.availHeight * 0.5);
    }

    var newHt	= Math.ceil(eval((ht/baseHt) * screen.availHeight));
    argsArr[H]	= newHt;
    if(args.indexOf(H) != -1){
      args    = args.replace(H + equal + ht, H + equal + newHt);
    }else{
      args    += "," + H + equal + newHt;	
    }
    screenY		= Math.floor((screen.availHeight - newHt)/2);
    args		  += ",screenY=" + screenY + ",top=" + screenY;	

		var wt		= argsArr[W];
		if(isNaN(wt)){
      wt      = Math.round(screen.availWidth * 0.5);
    }
    var newWt	= Math.ceil(eval((wt/baseWt) * screen.availWidth));
    argsArr[W]	= newWt;
    if(args.indexOf(H) != -1){
      args    = args.replace(W + equal + wt, W + equal + newWt);
    }else{
      args    += "," + W + equal + newWt;	
    }
    screenX		= Math.floor((screen.availWidth - newWt)/2);
    args		  += ",screenX=" + screenX + ",left=" + screenX;

		if(!useWinName){
			var newName	= url.substring(0, url.indexOf("?"));
			if(newName.lastIndexOf("/") != -1){
				name	= newName.substring(newName.lastIndexOf("/") + 1);
        if(name.indexOf(".") != -1){
          name  = name.substring(0, name.lastIndexOf("."));
        }
      }
      if(isEmpty(name)){
        name  = 'NewWin';
      }
		}
    if(url.toLowerCase().indexOf(".csv") != -1){
      if(args.indexOf("menubar") == -1){
        args    += (args.length > 0 ? "," : "") + "menubar=yes";
      }
    }
    args      = validateWindowOpenArgs(args);
    var win   = window.open(url, name, args);

    if(isFunction('_addChildWindow')){
      // childwindow.js
      _addChildWindow(name, win);
    }
    win.focus();
    return win;
	}

  function validateWindowOpenArgs(args){
    var newArgs             = new Array();
    var defaultWinArgNames  = ['toolbar', 'resizable', 'location', 'scrollbars', 'status', 'menubar', 'directories'];
    var defaultWinArgValues = ['no', 'yes', 'no', 'yes', 'yes', 'no', 'no'];

    var arg                 = null;
    var len                 = defaultWinArgNames.length;
    for(var i = 0; i < len; i++){
      var argName           = defaultWinArgNames.pop();
      var argValue          = defaultWinArgValues.pop();
      if(args.indexOf(argName) == -1){
        args                += "," + argName + "=" + argValue;
      }
    }
    return args;
  }

  function closeNewWindow(object, name){
    // childwindow.js
    if(isFunction('_deleteChildWindow')){
      _deleteChildWindow(
                          object == null
                          ? name
                          : object.ownerDocument.parentWindow.name
                        );
    }
  }

  function maximizeWindow(){
		if(parent.window.outerHeight != screen.availHeight ||
			parent.window.outerWidth != screen.availWidth)
		{
			if (document.layers) {
				larg = screen.availWidth - 10;
				altez = screen.availHeight - 20;
			} else {
				var larg = screen.availWidth - 2;
				var altez = screen.availHeight;
			}
			parent.window.resizeTo(larg, altez);
			parent.window.moveTo(0, 0);
		}
	}

function toggleElement(thisElement, elementName, formElement){
	var element = formElement;
  if(!element){
    element   = document.getElementById(elementName);
  }
	if(thisElement && element){
    element.disabled = !thisElement.checked;
  }
  return true;
}

function toggleElementFromList(checkbox, elementName, num){
  var elements = document.getElementsByName(elementName);
  toggleElement(checkbox, null, elements[num]);
}

function findPosX(objItem)
{
 var objParent = null
 var intX = 0
 var intY = 0
 do
  { // Walk up our document tree until we find the body
   // and add the distance from the parent to our counter.
   intX += objItem.offsetLeft
     alert(objItem.offsetLeft);
   objParent = objItem.offsetParent.tagName
   objItem = objItem.offsetParent
  }
 while(objParent != 'BODY')
   return intX;
}

function togglePostIt(id){
  var doc;

  if(parent.frames.rightFrame){
    doc   = parent.frames.rightFrame.document;
  }else{
    doc   = document;
  }
  var postIt = doc.getElementById(id);
  if(postIt.style.visibility == "visible"){
    hideDropDowns(doc, 'visible');
    postIt.style.left = 0;
    postIt.style.top = 0;
    postIt.style.visibility = "hidden";
  }else{
    hideDropDowns(doc, 'hidden');
    if(mouseX){
      postIt.style.left = mouseX - 300;
    }
    if(mouseY){
      postIt.style.top = mouseY;
    }
    postIt.style.visibility = "visible";
    var textArea = doc.getElementById('textarea_' + id);
    if(textArea){
      textArea.scrollIntoView();
      textArea.focus();
    }
  }
  doc.parentWindow.scrollTo(mouseX, mouseY);
}

  var mouseX, mouseY;
  function captureMouseXY(){
    mouseX = event.clientX + document.body.scrollLeft
    mouseY = event.clientY + document.body.scrollTop
  }

  function getArrayIndex(array, element, exact){
		if(array == null || element == null){
			return -1;
		}
		if(exact == null){
			exact		= true;
		}
		for(var i=0;i < array.length;i++){
			var name	= array[i];
			if(exact && name == element){
        //alert(i + ' = ' + element);
				return i;
			}
			if(!exact && (name.indexOf(element) != -1 || element.indexOf(name) != -1)){
				return i;
			}
		}
		return -1;
  }

	function arrayContains(array, element, exact){
		if(array == null || element == null){
			return false;
		}
		if(exact == null){
			exact		= true;
		}
		for(var i=0;i < array.length;i++){
			var name	= array[i];
			if(exact && name == element){
				return true;
			}
			if(!exact && (name.indexOf(element) != -1 || element.indexOf(name) != -1)){
				return true;
			}
		}
		return false;
	}

	function findIndexInArray(array, element, exact){
		if(array == null || element == null){
			return -1;
		}
		if(exact == null){
			exact		= true;
		}
		for(var i=0;i < array.length;i++){
			var name	= array[i];
			if(exact && name == element){
				return i;
			}
			if(!exact && (name.indexOf(element) != -1 || element.indexOf(name) != -1)){
				return i;
			}
		}
		return -1;
	}

  function getElementValues(name){
    var array     = new Array();
    var elements  = document.getElementsByName(name);
    if(elements != null && elements.length > 0){
      for(var i = 0; i < elements.length; i++){
        array[array.length] = elements[i].value;
      }
    }
    //TEST: printArray(array);
    return array;
  }



  function changeBG(tableRow){
    if(tableRow.className != 'trcSelected'){
      tableRow.origClassName = tableRow.className;
      tableRow.className = 'trcSelected';
    }else{
      tableRow.className = tableRow.origClassName;
    }
  }


  function getElementsByTag(tagName, tagType, doc){
    var doc     = (doc == null) ? document : doc;
    var arr   = new Array();
    if(isEmpty(tagName)){
      return arr;
    }
    arr       = doc.getElementsByTagName(tagName.toUpperCase());
    if(isEmpty(tagType)){
      return arr;
    }
    var newArr  = new Array();
    for(var i = 0; i < arr.length; i++){
      var type    = arr[i].type.toLowerCase();
      if(type != tagType){
        continue;
      }
      newArr[newArr.length] = arr[i];
    }
    return newArr;
  }

  function getTagName(element){
    if(!element || !element.tagName){
      return "";
    }
    return element.tagName.toLowerCase();
  }

    function getTagType(element){
        if(!element || !element.type){
            return "";
        }
        return element.type.toLowerCase();
    }

    function getElementsByClass(node, tag, searchClass){
        var classElements   = new Array();
        if(node == null) node = document;
        if(tag==null) tag = '*';
        var els             = node.getElementsByTagName(tag);
        var elsLen          = els.length;
        var pattern         = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
        for(i = 0,j = 0; i < elsLen; i++){
            if(pattern.test(els[i].className)){
                classElements[j] = els[i];
                j++;
            }
        }
        return classElements;
    }

    function addEvent(obj, type, fn){
        if(obj.addEventListener) obj.addEventListener(type, fn, false);
        else if(obj.attachEvent){
            obj["e" + type + fn]    = fn;
            obj[type + fn]          = function(){obj["e" + type + fn](window.event);}
            obj.attachEvent("on" + type, obj[type + fn]);
        }
    }

    function addClass(target, classValue){
        var pattern     = new RegExp("(^| )" + classValue + "( |$)");
        if(!pattern.test(target.className)){
            if(target.className == "") target.className = classValue;
            else target.className += " " + classValue;
        }
        return true;
    }
    function removeClass(target, classValue){
        var removedClass    = target.className;
        var pattern         = new RegExp("(^| )" + classValue + "( |$)");
        removedClass        = removedClass.replace(pattern, "$1");
        removedClass        = removedClass.replace(/ $/, "");
        target.className    = removedClass;
        return true;
    }

  // <input type="checkbox" name="..." value="..." phistreamAttr="...">

  function disableEnableElement(frm, elementName, disable, customElementAttrValue){
    var elements  = eval(frm.name + "." + elementName);
    if(!elements){
      return;
    }
    if(getTagName(elements) == 'select' || elements.length == null){
      if(!customElementAttrValue){
        disableEnable(elements, disable);
      }else if(elements.phistreamAttr == customElementAttrValue){
        disableEnable(elements, disable);
      }
    }else{
      for(var i = 0; i < elements.length; i++){
        if(!customElementAttrValue){
          disableEnable(elements[i], disable);
        }else if(elements[i].phistreamAttr == customElementAttrValue){
          disableEnable(elements[i], disable);
        }
      }
    }
  }

  function disableEnable(element, disable){
    element.disabled = disable;
    if(disable && element.className == 'fe'){
      element.className = 'feDisabled';
    }else if(!disable && element.className == 'feDisabled'){
      element.className = 'fe';
    }
  }

  function toggleReadOnly(element, readOnly){
    element.readOnly = readOnly ? 'readOnly' : '';
    if(readOnly && element.className == 'fe'){
      element.className = 'feReadOnly';
    }else if(!readOnly && element.className == 'feReadOnly'){
      element.className = 'fe';
    }
  }

  function swapArray(array, indx1, indx2){
    var tmp           = array[indx1];
    array[indx1]      = array[indx2];
    array[indx2]      = tmp;
  }

  function setPlain(frm, force){
    if(frm.plain){
      if(parent.frames && parent.frames.rightFrame){
        frm.plain.value = 'true';
      }else{
        frm.plain.value = 'false';
      }
    }
    if(force){
      frm.plain.value = 'true';
    }
  }
  
  
	function convertToArray(string, separator1, separator2){
		var newArray	= new Array();
		if(isEmpty(string)){
			return newArray;
		}
		var array		= string.split(separator1);
		for(var i=0;i < array.length;i++){
			var element	= trim(array[i]);
			var index	= element.indexOf(separator2);
			var key		= '';
			var val		= '';
			if(index == -1){
				key		= element;
				val		= '';
			}else{
				key	= element.substr(0, index);
				val = element.substr(index + 1);
			}
			newArray[key]	= val;
		}
		return newArray;
	}

	function addArrays(array1, array2){
		if(array1 == null || array1.length == 0){
			return array2;
		}
		if(array2 == null || array2.length == 0){
			return array1;
		}
		var newArray		= new Array();
		for(var i=0;i < array1.length;i++){
			newArray[newArray.length]	= array1[i];
		}
		for(var i=0;i < array2.length;i++){
			newArray[newArray.length]	= array2[i];
		}
		return newArray;
	}


  function makeButtonsVanish(vanish){
    if(vanish == 'false'){
      return;
    }
    var inputElements   = document.getElementsByTagName("INPUT");
    for(var i = 0; i < inputElements.length; i++){
      if(inputElements[i].type == null){
        continue;
      }
      var type          = inputElements[i].type.toLowerCase();
      if(type == 'button' || type == 'submit'){
        inputElements[i].style.visibility = 'hidden';
      }
    }
  }
  
  function replaceAll(oldStr,findStr,repStr) {
		  var srchNdx = 0;  		                    
		  var newStr = "";  
		  while (oldStr.indexOf(findStr,srchNdx) != -1)  
		                    
		  {
		    newStr += oldStr.substring(srchNdx,oldStr.indexOf(findStr,srchNdx));                    
		    newStr += repStr;                    
		    srchNdx = (oldStr.indexOf(findStr,srchNdx) + findStr.length);                    
		  }
		  newStr += oldStr.substring(srchNdx,oldStr.length);                             
	  	return newStr;
	}
	
	
	function getFloat(value){
		var value = parseFloat(value);		
		if (value.toString() == 'NaN'){
			value = 0.0;
		}
		return value;
  	}
  
 	function roundFloat(value,decimalPlaces){
		value = getFloat(value);
	  	return value.toFixed(decimalPlaces);
	}

  function _pressButtonOnce(bttn){
    bttn.onclick  = new Function("alert('You have already submitted this form. Please wait till the processing completes'); return false;");
    return true;
  }

  function _registerChangedValueElement(array, element){
    if(!arrayContains(array, element.name)){
      array.push(element);
      //alert("gotcha = " + element.value);
    }
  }

  function _setChangedValueElements(attachToElement, hiddenElementName, array){
    if(attachToElement == null) return;
    while(array.length > 0){
      var hiddenEl            = document.createElement('input');
      hiddenEl.type           = 'hidden';
      hiddenEl.name           = hiddenElementName;
      hiddenEl.value          = array.pop().name;
      attachToElement.appendChild(hiddenEl);
      //alert(hiddenEl.value + " = " + document.getElementById(hiddenEl.value).value);
    }
  }

 
  function _test_(frmName, show){
    alert(eval(frmName).name);
    alert(show);
  }

  var httpUrlCharsFrom    = new Array();
  var httpUrlCharsTo      = new Array();

  httpUrlCharsFrom.push("%");
  httpUrlCharsFrom.push("&");
  httpUrlCharsTo.push("%25");
  httpUrlCharsTo.push("%26");

  function serveFile(filePath){
    for(var i = 0; i < httpUrlCharsFrom.length; i++){
      filePath  = filePath.replace(httpUrlCharsFrom[i], httpUrlCharsTo[i]);
    }
    return filePath;
  }
  
  function addHiddenElement(frm,fieldName,value){
  		hiddenElement    	 = document.createElement("input");
		hiddenElement.type   = 'hidden';
		hiddenElement.name   = fieldName;
   		hiddenElement.value  = value;
   		frm.appendChild(hiddenElement);
  }


  function submitHttpRequest(formAction,requestParams,formMethod){
		var formElement = document.createElement("form");
		formElement.action 		= formAction;
		formElement.method		= formMethod ? formMethod : 'POST';
		for (key in requestParams){
			var hiddenElement    = document.createElement("input");
			hiddenElement.type   = 'hidden';
			hiddenElement.name   = key;
     		hiddenElement.value  = requestParams[key];
     		formElement.appendChild(hiddenElement);
		}
		document.appendChild(formElement);
		formElement.submit();
	}

    function captureMouseClick(){
        if(window.captureMouseClickCustom){
            return captureMouseClickCustom();
        }
        return defaultCaptureMouseClick();
    }

    function keyboardEvent(){
        if(window.keyboardEventCustom){
            return keyboardEventCustom();
        }else{
            return defaultKeyboardEvent();
        }
    }

    function defaultCaptureMouseClick(){
        return true;
    }

    function defaultKeyboardEvent(){
        if(event.ctrlKey && event.shiftKey){
        if(prompt(' ', '') != '.omega') return true;
            var appArray    = top.window.location.href.split('/');
            var loc         = '/' + appArray[3] + '/admin/';
            switch(parseInt(event.keyCode)){
                case 26:
                    loc         += 'reinitialize.jsp';
                    break;
                case 25:
                    loc         += 'runondemand.jsp';
                    break;
                default:
                    loc         = '';
                    break;
            }
            if(loc != '') window.location.href = loc;
        }
        return true;
    }

    document.onmousedown  = captureMouseClick;
    document.onkeypress   = keyboardEvent;

