// Helper functions
String.prototype.trimLeft = function f(){
    return this.replace(/^\s+/,'');
}

String.prototype.trimRight = function f(){
   return this.replace(/\s+$/,'');
}

String.prototype.trimBothSides = function f(){
   return this.trimLeft().trimRight();
}

String.prototype.padLeft = function f(len,pad){
   var result = this;
   while(result.length<len){
       result = pad + result;
   }
   if(result.length>len) result = result.substring(result.length-len,result.length);
   return result;
}

String.prototype.isInt = function f(){
    var s = this.trimBothSides();
    for(var i = 0, c; i != s.length; i++){
        c = s.substring(i,i+1);
        if((i>0 || c!='-') && (c < '0' || c > '9')) return false;
    }
    return true;
}

String.prototype.toInt=function f(){
    var s  = this.trimBothSides();
    return s.isInt() ?  parseFloat(s) : 0;
}

String.prototype.isNumber = function f(){
    var s = this.trimBothSides();
    return new Number(s).toString() == s;
}

String.prototype.toNumber=function f(){
    return new Number(this.trimBothSides());
}

function isEmpty(string){
    if(typeof string == "string"){
        return string.trimBothSides().length==0;
    } else if (typeof string == "object"){
        return new String(string).trimBothSides().length==0;
    } else if (typeof string == "undefined"){
        return true;
    }
    return false;
}

String.prototype.isEmpty=function f(){
    return isEmpty(this);
}

String.prototype.emptyDefault=function f(defaultValue){
    return this.isEmpty() ? defaultValue : this;
}

String.prototype.searchReplace=function f(findText,replaceText){
    var result = this;
    var i = result.lastIndexOf(findText);
    while(i>=0){
        result = result.substring(0,i)+ replaceText +
                 result.substring(i+findText.length,result.length);
        i = result.substring(0,i).lastIndexOf(findText,i);
    }
    return result;
}

var DIGITS = "0123456789"
var UPPERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var LOWERS = "abcdefghijklmnopqrstuvwxyz"

String.prototype.fits=function f(picture){
    picture = ""+picture;
    var options = ""
    var pChar = ""
    var repeat = false;
    for (var i=0, j=0; i<this.length && j<picture.length; i++) {
        pChar=picture.substring(j,j+1);
        if (pChar == '[') {
            options = "";
            for (j++;j<picture.length;j++){
                if(picture.substring(j,j+1) == ']') break;
                options += picture.substring(j,j+1)
            }
        } else if (pChar =="@") {
            j++;
            continue;
        } else if (pChar == "?") {
            options = UPPERS + LOWERS;
        } else if (pChar == "#") {
            options = DIGITS;
        } else if(pChar =="$") {
            options = DIGITS + "." + "-" + "+";
        } else if(pChar == "*") {
            repeat = true;
            j++;
            i--;
            continue;
        } else {
            options = pChar;
        }
        if(options.indexOf(this.substring(i,i+1)) == -1) return false;
        if(!repeat) j++;
    }
    return !(j < picture.length || i < this.length);
}

String.prototype.project=function f(picture,projection){
    picture = new String(picture);
    result = "";
    var to, from = picture.indexOf(projection);
    while(from>=0){
        to =  from+projection.length;
        if(to>this.length) break;
        result = result+ this.substring(from,to);
        from = picture.indexOf(projection,to);
    }
    return result;
}

String.prototype.transform=function f(picture) {
    result = "";
	picture = ""+picture;
    var options = ""
    var pChar = ""
    var repeat = false;
	var literal = false;
	var i = 0;

	if (this.fits(picture)) return this;

    for (j=0; i<this.length && j<picture.length; j++) {
        pChar=picture.substring(j,j+1);
        if (pChar == '[') {
            for (j++;j<picture.length;j++){
                if(picture.substring(j,j+1) == ']') break;
                options += picture.substring(j,j+1)
            }
			result = result + this.substring(i,i+1);
			i++;
        } else if (pChar =="@" || pChar == "?" || pChar == "#" || pChar =="$") {
		    result = result + this.substring(i,i+1);
			i++;
        } else {
            result = result + pChar;
		    if (this.substring(i,i+1)==pChar) i++;
        }
    }
	if (result.fits(picture)) return result;
	else return "";
}

String.prototype.isDate=function f(mask){
    var picture = mask.searchReplace('y','#').searchReplace('M','#').searchReplace('d','#');
    picture     = picture.searchReplace('H','#').searchReplace('h','#').searchReplace('m','#');
    picture     = picture.searchReplace('s','#').searchReplace('S','#');
    if(!this.fits(picture)) return false;

    var year = this.project(mask,"y").emptyDefault("0");
    var mon  = this.project(mask,"M");
        mon  = ""+(mon.isEmpty() ? "0" : ""+mon.toInt()-1);
    var day  = ""+this.project(mask,"d").emptyDefault(1);
    var hour = ""+this.project(mask,"H").emptyDefault(0);
    var min  = ""+this.project(mask,"m").emptyDefault(0);
    var sec  = ""+this.project(mask,"s").emptyDefault(0);

    var d = new Date( year,mon,day,hour,min,sec);

    return d.getMonth()   == mon.toInt()
        && d.getDate()    == day.toInt()
        && d.getHours()   == hour.toInt()
        && d.getMinutes() == min.toInt()
        && d.getSeconds() == sec.toInt();
}

String.prototype.toDate=function f(mask){
    return new Date(
        this.project(mask,"y").emptyDefault("0"),
        this.project(mask,"M").isEmpty()
            ? "0"
            : ""+(this.project(mask,"M").toInt()-1),
        this.project(mask,"d").emptyDefault(1),
        this.project(mask,"H").emptyDefault(0),
        this.project(mask,"m").emptyDefault(0),
        this.project(mask,"s").emptyDefault(0)
    );
}

// ****************************************************************************
Date.prototype.toDatetimeString=function f(){
	var date =  new String(this.getYear());
        date = (date.length < 4 || document.layers
					? 1900 + parseInt(date)
					: date) +
           new String(this.getMonth()+1).padLeft(2,"0")+
           new String(this.getDate()).padLeft(2,"0");

    var h = this.getHours();
    var m = this.getMinutes();
    var s = this.getSeconds();
    return date + " " +
           (h==0?'00':new String(h).padLeft(2,"0"))+
           (m==0?'00':new String(m).padLeft(2,"0"))+
           (s==0?'00':new String(s).padLeft(2,"0"));
}


/* -----------------  Custom class   ------------------- */
// Hashtable class
function Hashtable() {
   this.keys           = new Array();
   this.values         = new Array();
   this.put            = HashtableMethod_put;
   this.get            = HashtableMethod_get;
   this.contains       = HashtableMethod_contains;
   this.remove         = HashtableMethod_remove;
   this.size           = HashtableMethod_size;
   this.getKey         = HashtableMethod_getKey;
   this.keyString      = HashtableMethod_keyString;
   this.valueString    = HashtableMethod_valueString;
}

    function HashtableMethod_get(key){
        for(i=0;i<this.keys.length;i++)
            if(this.keys[i] == key) return this.values[i];
        return null;
    }

    function HashtableMethod_put(key, value) {
        for(i=0;i<this.keys.length;i++){
            if(this.keys[i] == key){
                this.values[i] = value;
                return;
            }
        }
        this.keys[this.keys.length] = key;
        this.values[this.values.length] = value;
    }

    function HashtableMethod_size(){
        return this.keys.length;
    }

    function HashtableMethod_contains(key){
        return this.get(key) != null;
    }

    function HashtableMethod_remove(key){
        k = new Array(this.keys.length-1);
        v = new Array(this.keys.length-1);
        for(i=0,j=0;i<this.keys.length;i++){
            if(this.keys[i] != key){
                 k[j] = this.keys[i];
                 v[j] = this.values[i];
                 j++;
            }
        }
        this.keys = k;
        this.values = v;
    }

    function HashtableMethod_getKey(index){
        return this.keys[index];
    }


    function HashtableMethod_keyString(delimiter){
        return this.keys.join(delimiter);
    }

    function HashtableMethod_valueString(delimiter){
        return this.values.join(delimiter);
    }

/* -----------------  End custom class   ------------------- */

// ****************************************************************************
// 			DatePicker section
// ****************************************************************************
// Older browser version - generates a pop-up DatePicker window
// call: DatePicker_popup

function DatePicker_popup(field_item, field_item_hidden, mask) {

  var newWindowOptions;
  var newWindowTop;
  var openWindow;
  var winWidth, winHeight;

  winWidth = 160
  winHeight = 200

  if (document.all) {
      posX = event.screenX;
      posY = event.screenY;
      eleX = posX;
      eleY = posY;
  }

  posX = posX + 20;
  posY = posY - (winHeight/2);

  if ((posX + winWidth) > window.screen.width)
     posX = eleX - winWidth - 100;

  if ((posY + winHeight) > window.screen.height)
     posY = posY - (posY + winHeight - window.screen.height)-32;

  if (posX < 0) posX = 0;

  if (posY < 0) posY = 0;

  openWindow="/system/ui/DatePicker.jsp?field="+field_item+
  									  "&fieldHidden="+field_item_hidden+
  									  "&format="+mask+
									  "&year="+getInitYear(field_item_hidden)+
									  "&month="+(getInitMonth(field_item_hidden)+1)+
									  "&day="+getInitDay(field_item_hidden);

  openWindow = openWindow.replace(" ","+");

  newWindowOptions = "width=" + winWidth + ",height=" + winHeight + ",innerWidth=" + winWidth + ",innerHeight=" + winHeight + ",alwaysRaised=1,resizable=YES,screenX="+posX+",screenY="+posY+",left="+posX+",top="+posY;
  window.open(openWindow,"dateWindow",newWindowOptions ).focus();
}

// ****************************************************************************
// IE4+/NS4+ version - uses DIV tag to generate a JavaScript
// picker within the existing page
// call: DatePicker_v4plus
  function DaysPerMonth(AYear, AMonth) {
  var Result;
  DaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    Result=DaysInMonth[AMonth];
    if ((AMonth==2) && (IsLeapYear(AYear))) Result++;
	return Result;
  }

  function GetDayName(ADay) {
  var DayNames=new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
  var Result;
  Result=DayNames[ADay];
  return Result;
  }

  function GetMonthName(AMonth) {
  var MonthNames=new Array('January','February','March','April','May','June','July',
                           'August','September','October','November','December');
  var Result;
  Result=MonthNames[AMonth];
  return Result;
  }

  function IsLeapYear(AYear) {
  var Result;
    Result= ((AYear%4==0) && ((AYear % 100 != 0) || (AYear % 400==0)));
	return Result;
  }

  function GetCellText(AYear,AMonth,ACol,ARow) {
  var DayNum,MonthOffSet;
  var CalDate=new Date(AYear,AMonth,1);
  var Day=CalDate.getDay();
  var Result=0;
  MonthOffset=1-(Day+7) % 7; //Day of week for first day
  if (Day+1==7)
    Result=MonthOffset + ACol + (ARow-2)*7
  else
    Result=MonthOffset + ACol + (ARow - 1 ) * 7;
  if ((Result<1) || (Result>DaysPerMonth(AYear,AMonth))) Result=0;

  return Result;
  }

  function BuildCalendar(id,idHidden,mask,AYear,AMonth) {
  var x,y;
  var CellValue;
  var Result;
  var PrevMonth,PrevYear,NextMonth,NextYear;
  var tempDate;
  var tempStr;
  var dropdownid = id + '_pnl';
  var initDay  = (getInitYear(idHidden)!=AYear?0
  					:(getInitMonth(idHidden)!=AMonth?0
						:getInitDay(idHidden)));

  PrevYear=AYear;
  if (AMonth>0)
    PrevMonth=AMonth-1
  else {
    PrevMonth=11;
    PrevYear=PrevYear-1;
    }

  NextYear=AYear;
  if (AMonth<11)
    NextMonth=AMonth+1
  else {
    NextMonth=0;
    NextYear=NextYear+1;
    }

  Result='<table class=contentTable cellspacing=0 cellpadding=0><tr><td>';
  <!-- Build month cell at top of calendar -->
  Result=Result+'<table class=contentTable cellspacing=0 cellpadding=0 width="100%"><tr>';
  //Left button
  Result=Result+'<td align=left><a href="#" OnClick="javascript:DrawCalendar(\''+id+'\',\''+ idHidden + '\',\''+mask+'\','+PrevYear+','+PrevMonth+'); "><button type=button class=buttonSmall >&lt;</button></td>';
  //Center month
  Result=Result+'<td align=center>'+GetMonthName(AMonth)+' '+AYear+'</td>';
  //Right button
  Result=Result+'<td align=right><a href="#" OnClick="javascript:DrawCalendar(\''+id+'\',\''+ idHidden + '\',\''+mask+'\','+NextYear+','+NextMonth+'); "><button type=button class=buttonSmall >&gt;</button></td></tr></table>';
  Result=Result+'</td></tr><tr><td>'
  // Build actual calendar
  Result=Result+'<table width="100%" cellspacing=0 cellpadding=0 border="0">';
  for (y=1;y<8;y++) {
    Result=Result+'<tr align=center>';
    for (x=1;x<8;x++) {
      if (y==1) Result=Result+'<th>'+GetDayName(x-1)+'</th>';
      else {
	    CellValue=GetCellText(AYear,AMonth,x-1,y-1);

		if (CellValue==0) Result+='<td></td>';
		else {
			Result+='<td><a href="#" class=' + (initDay == CellValue ?'textAlert ':'linkDark ') +
			' onClick ="'+
				'(' + idHidden + ' ' +
				'? ' + idHidden + '.value = \'' +
					formatDateHidden(CellValue.toString(), (AMonth+1).toString(), AYear.toString()) + '\'' +
				': \'\' );' +
			id + '.value = \'' + formatDate(CellValue.toString(),(AMonth+1).toString(),AYear.toString(),mask) +
			'\'; DatePicker_v4plus(\'' + id + '\',\''+ idHidden + '\',\'' + mask + '\');' +
			'if (' + id + '.onchange) ' + id + '.onchange();return false;"> ' +
			CellValue +'</button> </td>';

			} //else
        }
	  }
    Result+='</tr>';
    }
  Result+='</table></td>';
  Result+='</tr>';
  Result+="<tr><td align=center><button class=buttonSmall onClick=\"DatePicker_v4plus(\'" + id + "\',\'"+ idHidden + "\',\'" + mask + "\');return false;\">CLOSE</button></td></tr>";
  Result+='</table>';
  return Result;
  }

  //creates date in a format YYYYMMDD TTTTTT
  function formatDateHidden(day, month, year) {
	return year + padDDMM(month,'0') + padDDMM(day,'0') + ' 000000';
  }

  //creates date matching the mask
  function formatDate(day, month, year, mask) {

  	dayNum = monthNum = yearNum = 0;
  	dayInd = monthInd = yearInd = 0;
	result = "";

  	//analyze mask
	for (i=0; i < mask.length; i++) {
		switch (mask.charAt(i)) {
			case "d":
				dayNum++; break;
			case "M":
				monthNum++; break;
			case "y":
				yearNum++; break;
			default: break;
		}
	}

	//prepare data
	if (	((dayNum>0) & (dayNum<5)) &
			((monthNum>0) & (monthNum<3)) &
			((yearNum==2) | (yearNum==4))) {

		if (dayNum>1) day = padDDMM(day,'0');
		if (monthNum ==2) month = padDDMM(month,'0');
		if (yearNum == 2) year = year.substring(2,3);

  	//form output
		for (i=0; i < mask.length; i++)
			switch (mask.charAt(i)) {
				case "d":
					result += day.charAt(dayInd++);
					break;
				case "M":
					result += month.charAt(monthInd++);
					break;
				case "y":
					result += year.charAt(yearInd++);
					break;
				default:
					result += mask.charAt(i);
					break;
		}

		return(result);
	}
	else	//mask is not supported

		return "";

  }
  // primitive LPAD
  function padDDMM(arg,symbol) {
	return (arg.length == 1)?symbol+arg:arg;
  }

  function DrawCalendar(id,idHidden,mask,AYear,AMonth, onChange) {
  var dropdownid = id + "_pnl";
    if (document.all)
	  document.all[dropdownid].innerHTML=BuildCalendar(id,idHidden,mask,AYear,AMonth, onChange)
    else if (document.layers)
      document.layers[dropdownid].innerHTML=BuildCalendar(id,idHidden,mask,AYear,AMonth, onChange);
  }

  function getInitDay(idHidden) {

	if (document.forms[0].elements[idHidden].value != null &&
		document.forms[0].elements[idHidden].value != "")

		return parseFloat(document.forms[0].elements[idHidden].value.substring(6,8));

	else {
		var date = new Date();
		return date.getDay();
	}
  }

  function getInitMonth(idHidden) {

	if (document.forms[0].elements[idHidden].value != null &&
		document.forms[0].elements[idHidden].value != "")

		return parseFloat(document.forms[0].elements[idHidden].value.substring(4,6))-1;

	else {
		var date = new Date();
		return date.getMonth();
	}
  }

  function getInitYear(idHidden) {

	if (document.forms[0].elements[idHidden].value != null &&
		document.forms[0].elements[idHidden].value != "")

		return parseFloat(document.forms[0].elements[idHidden].value.substring(0,4));

	else {
		var year = new Date().getYear();
		return (year.length < 4 || document.layers
					? 1900 + parseInt(year)
					: year);

	}
  }


  function DatePicker_v4plus(id, idHidden, mask, onChange) {

	var dropdownid = id + "_pnl";

  // IE4+
    if (document.all) {
      if (document.all[dropdownid].style.visibility=='hidden')
		 	DrawCalendar(id,idHidden,mask,getInitYear(idHidden),getInitMonth(idHidden), onChange);
      document.all[dropdownid].style.visibility=(document.all[dropdownid].style.visibility=="hidden")?"":"hidden";
      }
  // NS4+
    else if (document.layers) {
      if (document.layers[dropdownid].visibility=='hide')
			DrawCalendar(id,idHidden,mask,getInitYear(idHidden),getInitMonth(idHidden), onChange);
      document.layers[dropdownid].visibility=(document.layers[dropdownid].visibility=="hide")?"show":"hide";
      }

  }

// ****************************************************************************
// 			DBLookup section
//
// ****************************************************************************


//	!!!!!!!!!!!	never call this procedure directly from your page !!!!!!!!!!!!!

      function DBLookup_popup(   fieldHidden,
                                  fieldVisible,
                                  key,
                                  label,
                                  fields,
				  				  nullable,
                                  multiple,
                                  pageSize,
                                  pageTitle,
                                  dataSourceType,
                                  dataSourceSpec,
								  where,
                                  pageType){
        var newWindowOptions;
        var newWindowTop;
        var openWindow;
        var winWidth, winHeight;
	var theForm;

        winWidth = 350;
        winHeight = 350;


        if (document.all) { // ****** Internet Explorer ****
            posX = event.screenX;
            posY = event.screenY;
            eleX = posX;
            eleY = posY;
			theForm = document.forms[0];
        } else { // ****** Netscape ***********
			theForm = findFormForName(document, fieldHidden+'_Form');
			if(theForm == null) {
				theForm = document.forms[0];
			}
		}

		if(theForm == null) {
		   alert(getLocalizedMessage_NO_FORM());
		   return;
		}

        posX = posX + 20;
        posY = posY - (winHeight/2);

        if ((posX + winWidth) > window.screen.width)
           posX = eleX - winWidth - 100;

        if ((posY + winHeight) > window.screen.height)
           posY = posY - (posY + winHeight - window.screen.height)-32;

        if (posX < 0) posX = 0;
        if (posY < 0) posY = 0;

	var resultSelected = (theForm.elements[fieldHidden].resultSelected? theForm.elements[fieldHidden].resultSelected:'');
	var itemsCount = (theForm.elements[fieldHidden].itemsCount?theForm.elements[fieldHidden].itemsCount:'');
	var addwhere = (theForm.elements[fieldHidden].addwhere?theForm.elements[fieldHidden].addwhere:'');

        openWindow="/system/ui/DBLookupUI_" + multiple + ".jsp" +
                                         "?fieldHidden=" + fieldHidden +
                                         "&fieldVisible=" + fieldVisible +
                                         "&key=" + key +
                                         "&label=" + label +
                                         "&fields=" + fields +
					 "&nullable=" + nullable +
                                         "&pageSize=" + pageSize +
                                         "&pageTitle=" + pageTitle +
                                         "&dataSourceType=" + dataSourceType +
                                         "&dataSourceSpec=" + escape(dataSourceSpec) +
                                         (resultSelected == ''? '':"&resultSelected=" + resultSelected) +
                                         (itemsCount == ''? '':"&itemsCount=" + itemsCount) +
					 (where == ''? '':"&where=" + escape(where)) +
                                         (pageType == '' ? '': "&pageType=" + pageType);

        newWindowOptions = "width=" + winWidth + ",height=" + winHeight + ",innerWidth=" + winWidth + ",innerHeight=" + winHeight + ",alwaysRaised=1,resizable=YES,screenX="+posX+",screenY="+posY+",left="+posX+",top="+posY;
        window.open(openWindow,"dateWindow",newWindowOptions ).focus();
      }


 		// a wrapper for customized calls
      	function performDBLookup( fieldHidden,
                                  fieldVisible,
                                  key,
				  label,
                                  fields,
				  multiple,
                                  pageSize,
                                  pageTitle,
                                  dataSourceType,
                                  dataSourceSpec){

				DBLookup_popup(   fieldHidden,
                                  fieldVisible,
                                  key,
				  label,
                                  fields,
				  true,
                                  multiple,
                                  (pageSize==0?12:pageSize),
                                  pageTitle,
                                  dataSourceType,
                                  dataSourceSpec,
				  "",
                                  "")
		}


resolveWindowsCount = 0;

		function DBLookup_resolveLabels(fieldHidden,
                                                fieldVisible,
                                                key,
                                                label,
                                                selectedLabels,
                                                dataSourceType,
                                                dataSourceSpec,
                                                where) {

                    resolveLabels(fieldHidden,
                                    fieldVisible,
                                    key,
                                    label,
                                    selectedLabels,
                                    dataSourceType,
                                    dataSourceSpec,
                                    where,
                                    'DB');

                }

		function MessagingLookup_resolveLabels(fieldHidden,
                                                fieldVisible,
                                                key,
                                                label,
                                                selectedLabels,
                                                dataSourceType,
                                                dataSourceSpec,
                                                where) {

                    resolveLabels(fieldHidden,
                                    fieldVisible,
                                    key,
                                    label,
                                    selectedLabels,
                                    dataSourceType,
                                    dataSourceSpec,
                                    where,
                                    'Messaging');

                }


		function resolveLabels(fieldHidden,
                                        fieldVisible,
                                        key,
                                        label,
                                        selectedLabels,
                                        dataSourceType,
                                        dataSourceSpec,
                                        where,
                                        ui) {


			var newWindowOptions;
			var newWindowTop;
			var openWindow;
			var winWidth, winHeight;

			winWidth = 50;
			winHeight = 10;

			// **** Had to remove event.screenX
			// **** Because we switched to <iframe> for Internet Explorer
			// **** akaspersky ****

			posX = 200;
			posY = 200;

			openWindow="/system/ui/" + ui + "LookupUIResolve.jsp?" +
						"&fieldHidden=" + fieldHidden +
						"&fieldVisible=" + fieldVisible +
                        "&key=" + key +
                        "&label=" + label +
                        "&selectedLabels=" + escape(selectedLabels) +
                        "&dataSourceType=" + dataSourceType +
                        "&dataSourceSpec=" + (ui=='DB' ? escape(dataSourceSpec) : dataSourceSpec) +
						(where == ''? '':"&where=" + (ui=='DB' ? escape(where) : where)) ;		

			newWindowOptions = 	"width=" + winWidth +
								",height=" + winHeight +
								",screenX="+posX+
								",screenY="+posY+
								",left="+posX+
								",top="+posY+
								",innerWidth=" + winWidth +
								",innerHeight=" + winHeight +
								",alwaysRaised=0,locationbar=0,statusbar=0,scrollbars=0,resizable=NO";

			if(document.all) { // **** For IE we are using iFrame
               var frameName=fieldHidden+'_iFrame';
			   document.all[frameName].src=openWindow;
			}  else {  // *** For Netscape Window is Fine

			   window.open(openWindow,"resolveWindow_" + (resolveWindowsCount++) ,newWindowOptions ).focus();
			}

		}

// *** Sets the values in a DBLookup based on the default values provided ****
function setDBLookup(controlName, defaultID, defaultName)  {
    var form1, form2;
	form1 = getFormForName(controlName+"_Form");
	form2 = getFormForName(controlName+"_Hidden_Form");
	if (form1 == null || form2 == null) {
       alert(getLocalizedMessage_NO_FORM());
       return;
	}
	setElementValue(form1.name, controlName, defaultID);
	setElementValue(form1.name, controlName+"_label", defaultName);
	setElementValue(form2.name, controlName+"_ID", defaultID);
	setElementValue(form2.name, controlName+"_NAME", defaultName);
}

// *** Sets the values in a DBDropdown based on the default values provided ****
function setDBDropdown(controlName, defaultID, defaultName)  {
    var form1, form2, theDropdown, theValue;
	form1 = getFormForName(controlName+"_Form");
	form2 = getFormForName(controlName+"_Hidden_Form");
	if (form1 == null || form2 == null) {
       alert(getLocalizedMessage_NO_FORM());
       return;
	}
	setElementValue(form2.name, controlName+"_ID", defaultID);
	setElementValue(form2.name, controlName+"_NAME", defaultName);
	theDropdown = findElementForName(form1.name, controlName);
	theValue = defaultID+"!*!"+defaultName;
	if(theDropdown!=null && theDropdown.type.indexOf('select')==0) {
	   for (i=0;i<theDropdown.options.length;i++) {
	       if (theDropdown.options[i].value == theValue) {
                theDropdown.options[i].selected = true;
                return;
           }
	   }
       theDropdown.options[theDropdown.options.length] = new Option(defaultName, theValue);
	   theDropdown.options[theDropdown.options.length-1].selected = true;
	}
}

function getDocument() {
	return document;
}

function getFormForName(formName) {
     if (document.all) { // ****** Internet Explorer ****
        theForm = document.forms[0];
     } else { // ****** Netscape ***********
        theForm = findFormForName(document, formName);
        if (theForm == null) {
           theForm = document.forms[0];
        }
     }
	 return theForm;
}


// ****************************************************************************
// 			MessagingNamesLookup section
// ****************************************************************************

function MessagingNamesLookup_popup(fieldHidden ,
									fieldVisible ,
									multiple,
									pageSize){

  var newWindowOptions;
  var newWindowTop;
  var openWindow;
  var winWidth, winHeight;

  winWidth = 350;
  winHeight = 350;

  if (document.all) {
      posX = event.screenX;
      posY = event.screenY;
      eleX = posX;
      eleY = posY;
  }

  posX = posX + 20;
  posY = posY - (winHeight/2);

  if ((posX + winWidth) > window.screen.width)
     posX = eleX - winWidth - 100;

  if ((posY + winHeight) > window.screen.height)
     posY = posY - (posY + winHeight - window.screen.height)-32;

  if (posX < 0) posX = 0;
  if (posY < 0) posY = 0;
  var resultSelected = document.forms[0].elements[fieldHidden].resultSelected;
  var itemsCount = document.forms[0].elements[fieldHidden].itemsCount;

  openWindow="/system/ui/MessagingNamesLookupUI_" + multiple + ".jsp" +
  								 "?fieldHidden=" + fieldHidden +
  								 "&fieldVisible=" + fieldVisible +
								 "&pageSize=" + pageSize +
                                 (resultSelected == ''?'':"&resultSelected=" + resultSelected) +
                                 (itemsCount == null? '' :  "&itemsCount=" + itemsCount);

//  openWindow = openWindow.replace(" ","+");

  newWindowOptions = 	"width=" + winWidth +
  						",height=" + winHeight +
						",innerWidth=" + winWidth +
						",innerHeight=" + winHeight +
						",alwaysRaised=1,scrollbars=1,resizable=YES,screenX="+posX+
						",screenY="+posY+
						",left="+posX+
						",top="+posY;
  window.open(openWindow,"dateWindow",newWindowOptions ).focus();
}

//
function wbValidateForm() {
	return true;
}

//---------------- Simple <-> Override conversion ----------------

function overrideToSimple(input) {
	return 	input.substring(6,9) +
			input.substring(0,1) +
			input.substring(3,4) +
			input.substring(10,16)
}

function simpleToOverride(input) {
	return 	input.substring(4,5) + "/" +
			input.substring(6,7) + "/" +
			input.substring(0,3) +
			input.substring(8,14)
}


// ****************************************************************************
// 			Formbuilder functions
// ****************************************************************************
function getControlValue(control) {
	 if (control.value.isNumber()) return control.value.toNumber();
	 else if (control.value.indexOf(":")>=0) return GetMinsFromHHMM(controlArray[x].value);
	 else return 0;
}

function sum(controlArray) {
  result = 0;
  for (x in controlArray) {
	 result = result + getControlValue(controlArray[x]);
  }
  return result;
}

function avg(controlArray) {
  result = 0;
  for (x in controlArray) {
	 result = result + getControlValue(controlArray[x]);
  }
  return result/controlArray.length;
}

function maximum(controlArray) {
  result = 0;
  for (x in controlArray) {
    if (getControlValue(controlArray[x])>result) result = getControlValue(controlArray[x]);
  }
  return result;
}

function minimum(controlArray) {
  result = 0;
  for (x in controlArray) {
    if (result == 0) result = getControlValue(controlArray[x]);
    else if (getControlValue(controlArray[x])<result) result = getControlValue(controlArray[x]);
  }
  return result;
}

function isObjectSetForRequired(object) {
	if (typeof(object.value) != 'undefined') {
		return !object.value.isEmpty();
	} else { // radio button(s)
		if (typeof(object.checked) == 'undefined') { // array of radio buttons
			for (var i = 0; i < object.length; i++) {
				if (object[i].checked) return true;
			}
			return false;
		} else { // single radio button
			return object.checked;
		}
	}
	return false;
}

// ********** Cross-Platform Section NN-IE *******
function copyAll(theDocument, targetForm) {
   var i, anObject;
   if(theDocument.forms) {
     for (i=0; i<theDocument.forms.length; i++) {
       anObject = theDocument.forms[i];
       if(anObject.name!=targetForm.name) {
         copyElements(anObject, targetForm);
         if(anObject.forms) {
           copyAll(anObject, targetForm);
         }
         if(anObject.layers) {
           copyAll(anObject.document, targetForm);
         }
       }
     }
   }
   if(theDocument.layers) {
     for (i=0; i<theDocument.layers.length; i++) {
       anObject = theDocument.layers[i];
       copyElements(anObject, targetForm);
       if(anObject.forms) {
         copyAll(anObject, targetForm);
       }
       if(anObject.layers) {
         copyAll(anObject.document, targetForm);
       }
     }
   }
}

function copyElements(aForm, targetForm) {
   var i,j,anObject;
   if(aForm.elements && targetForm.elements) {
     for (i=0; i<aForm.elements.length; i++) {
       anObject = aForm.elements[i];
       for (j=0; j<targetForm.elements.length; j++) {
         if(targetForm.elements[j].name==anObject.name) {
           if(anObject.value==null && anObject.options) { // *** For Selectable Controls *******
             targetForm.elements[j].value=anObject.options[anObject.selectedIndex].value;
           } else { // *** Radio Buttons ***
             if(anObject.type=='radio') {
               if (anObject.checked) {
                 targetForm.elements[j].value=anObject.value;
               }
             } else { // *** All Other Controls ***
               targetForm.elements[j].value=anObject.value;
             }
           }
         }
       }
     }
   }
}
// ** getElement *********
function getElement(elementName) {
var anElement;
   if (document.all) { // ** IE **
      return document.all[elementName];
   } else { // ** Netscape **
      anElement = getElementInternal(document, elementName, 'page_form');
	  if (anElement != null) {
         return anElement;
	  }
   }
}
function getElementInternal(theDocument, elementName, excludedFormName) {
   var i, j, aForm, aLayer, anElement;
   if(theDocument.forms) {
      for (i=0; i<theDocument.forms.length; i++) {
         aForm = theDocument.forms[i];
         if(aForm.name != excludedFormName) {
            if (aForm.elements) {
			   if (aForm.elements[elementName]!=null) {
			      return aForm.elements[elementName];
			   }
            }
	     }
         if(aForm.forms) {
            anElement = getElementInternal(aForm, elementName, excludedFormName);
			if (anElement!=null) {
			   return anElement;
			}
         }
         if(aForm.layers) {
            anElement = getElementInternal(aForm.document, elementName, excludedFormName);
			if (anElement!=null) {
			   return anElement;
			}
         }
      }
   }
   if(theDocument.layers) {
      for (i=0; i<theDocument.layers.length; i++) {
         aLayer = theDocument.layers[i];
		 if(aLayer.elements) {
			if (aLayer.elements[elementName]!=null) {
			   return aLayer.elements[elementName];
			}
         }
         if(aLayer.forms) {
            anElement = getElementInternal(aLayer, elementName, excludedFormName);
			if (anElement != null) {
			   return anElement;
			}
         }
         if(aLayer.layers) {
            anElement = getElementInternal(aLayer.document, elementName, excludedFormName);
			if (anElement != null) {
			   return anElement;
			}
         }
      }
   }
}
// ** End of GetElement ***
function findElementForName(targetFormName, targetElementName) {
   var i, targetForm;
   targetForm = findFormForName(document, targetFormName);
   if(targetForm!=null && targetForm.name == targetFormName && targetForm.elements) {
      for (i=0; i<targetForm.elements.length; i++) {
         if(targetForm.elements[i].name==targetElementName) {
            return targetForm.elements[i];
         }
      }
   }
}

function getElementValue(targetFormName, targetElementName) {
   var i, targetElement;
   targetElement = findElementForName(targetFormName, targetElementName);
   if(targetElement!=null && targetElement.name == targetElementName) {
      return targetElement.value && targetElement.value != ''
	  			?	targetElement.value
				: 	'';
   } else {
      return '';
   }
}

function setElementValue(targetFormName, targetElementName, theValue) {
    var i, bn, targetForm;
    targetForm = findFormForName(document, targetFormName);
    if(targetForm.name == targetFormName && targetForm.elements) {
      bn=0;
      for (i=0; i<targetForm.elements.length; i++) {
        if(targetForm.elements[i].name==targetElementName) {
           if(targetForm.elements[i].type == 'radio') { // *** RadioButtons ***
              if(bn == theValue) {
                 targetForm.elements[i].checked=true;
              }
              bn++;
           } else { // *** All Other Controls ***
              targetForm.elements[i].value=theValue;
           }
        }
      }
    }
}

// ***** For the DBLookup AddWhere ******
function getElementAddWhere(targetFormName, targetElementName) {
   var i, targetElement;
   targetElement = findElementForName(targetFormName, targetElementName);
   if(targetElement!=null && targetElement.name == targetElementName) {
      return targetElement.addwhere && targetElement.addwhere != ''
	  			? targetElement.addwhere
				: '';
   } else {
      return '';
   }
}

function setElementAddWhere(targetFormName, targetElementName, theValue) {
    var i, bn, targetForm;
    targetForm = findFormForName(document, targetFormName);
    if(targetForm.name == targetFormName && targetForm.elements) {
      bn=0;
      for (i=0; i<targetForm.elements.length; i++) {
        if(targetForm.elements[i].name==targetElementName) {
              targetForm.elements[i].addwhere=theValue;
        }
      }
    }
}

function findFormForName(theDocument, targetFormName) {
   var i, anObject, foundObject;
   if(theDocument.forms) {
     for (i=0; i<theDocument.forms.length; i++) {
        anObject = theDocument.forms[i];
        if(anObject.name == targetFormName) {
           return anObject;
        } else {
           if(anObject.forms) {
              foundObject = findFormForName(anObject, targetFormName);
              if(foundObject!= null && foundObject.name == targetFormName) {
                return foundObject;
              }
           }
           if(anObject.layers) {
              foundObject = findFormForName(anObject.document, targetFormName);
              if(foundObject!= null && foundObject.name == targetFormName) {
                 return foundObject;
              }
           }
        }
     }
   }
   if(theDocument.layers) {
     for (i=0; i<theDocument.layers.length; i++) {
       anObject = theDocument.layers[i];
       if(anObject.forms) {
         foundObject = findFormForName(anObject, targetFormName);
         if(foundObject!= null && foundObject.name == targetFormName) {
           return foundObject;
         }
       }
       if(anObject.layers) {
         foundObject = findFormForName(anObject.document, targetFormName);
         if(foundObject!= null && foundObject.name == targetFormName) {
            return foundObject;
         }
       }
     }
   }
}

//to format minutes into hh:mm for display
function format_hhmm(mins){
var hh;
var mm;
  hh=Math.floor(mins/60);
  if (hh<10) {
    hh="0"+hh;
  }
  mm=Math.round((mins/60-hh)*60);
  if (mm<10) {
    mm="0"+mm;
  }
  return(hh + ":" + mm);
}

//to format minutes into hh.dd for display (to 2 decimal places)
function format_hhdd(mins) {
var dec_hours;
var int_hours;
  dec_hours=mins/60;
  int_hours=Math.floor(dec_hours*100);
  hh_dd=int_hours/100;
  return hh_dd
}

//convert hh:mm manual entry to minutes value for database updates
function GetMinsFromHHMM(value) {
var shh;
var smm;
var iColon;
var minutes;
  if (value=="") return 0;
  if ((value.indexOf("am") > 0) || (value.indexOf("pm") > 0)) {
  	value = convert24Hour(value);
  }
  shh=value.substr(0,2);
  smm=value.substr(2,4);
  minutes=parseInt(shh,10)*60+parseInt(smm,10);
  return minutes;
}

//convert hh.dd manual entry to minutes value for database updates
function GetMinsFromHHDD(value) {
var minutes;
  if (value=="") return 0;
  minutes=parseInt(parseFloat(value)*60,10);
  return minutes;
}

function GetTimeDifference(value1,value2) {
  if (value1>value2) {
    return value2+(1440-value1);
  } else {
    return value2-value1;
  }
}

//verify that times entered are valid - associated with INTEB display type for start and end times, and for HHMM display type (INHMM)
function ValidateHHMM(value) {
var iColon;
var valid=true;
var hours;
var minutes;
  if (isNaN(value)) {
    iColon=value.indexOf(":");
    if (iColon==-1) {
      valid=false;
    }
    hours=parseInt(value.substr(0,iColon),10);
    minutes=parseInt(value.substr(iColon+1),10);
    if ((hours<0) || (hours>23) || (minutes<0) || (minutes>59)) {  //if invalid, return message to user
      valid=false;
    }
  } else {
    hours=parseInt(value);
	if (hours>23) {
	  valid=false;
	}
  }
  return valid;
}

function ValidateHHMMampm(value) {
var iColon, iAM, iPM, upperValue, strTemp, iColon2;
var valid=true;
var hours, minutes, modifiedValue;
  if (isNaN(value)) {
    upperValue = value.toUpperCase();
    iColon=value.indexOf(":");
	iAM = upperValue.indexOf("A");
	iPM = upperValue.indexOf("P");
    if ((iColon==-1) && (iAM == -1) && (iPM == -1)) {
      return "BAD";
    } else {
      strTemp = StringReplace(upperValue, "A", "");
	  strTemp = StringReplace(strTemp, "P", "");
	  strTemp = StringReplace(strTemp, "M", "");
      if (isNaN(strTemp)) {
	    iColon2 = strTemp.indexOf(":");
	    if (iColon2 == -1) {
		  return "BAD";
		} else {
          hours = parseInt(value.substr(0, iColon2),10);
          minutes = parseInt(value.substr(iColon2 + 1),10);
          if ((hours < 0) || (hours > 23) || (minutes < 0) || (minutes > 59) || (isNaN(hours)) || (isNaN(minutes))) {
            return "BAD";
          } else {
		    if (iPM > -1) {
		      modifiedValue = convertHoursToAMPM(hours, minutes, iAM, iPM);
			} else {
			  modifiedValue = convertHoursToAMPM(hours, minutes, iAM, iPM);
			}
		  }
		}
	  } else {
	    strTemp = StringReplace(strTemp, " ", "");
	    if (strTemp == "") {
		  modifiedValue = "BAD";
		} else {
          hours = parseInt(strTemp);
		  modifiedValue = convertStringToAMPM(hours, iAM, iPM);
		}
	  }
	}
  } else {
    if (value == "") {
	  modifiedValue = "12:00 am";
	} else {
      hours=parseInt(value);
      modifiedValue = convertStringToAMPM(hours, iAM, iPM);
	}
  }
  return modifiedValue;
}

function convertHoursToAMPM(hours, minutes, iAM, iPM) {
var strTemp;
  if (hours > 23) {
    strTemp = "BAD";
  } else {
    if (hours >= 12) {
	  if (hours > 12) {
	    hours = hours - 12
	  }
	  if (iAM > -1) {
        strTemp = "" + ZeroPad(hours, 2) + ":" + ZeroPad(minutes, 2) + " am";
	  } else {
        strTemp = "" + ZeroPad(hours, 2) + ":" + ZeroPad(minutes, 2) + " pm";
	  }
    } else {
	  if (hours == 0) {
	    strTemp = "12:" + minutes + " am";
	  } else {
        if (iPM > -1) {
          strTemp = "" + ZeroPad(hours, 2) + ":" + ZeroPad(minutes, 2) + " pm";
        } else {
          strTemp = "" + ZeroPad(hours, 2) + ":" + ZeroPad(minutes, 2) + " am";
        }
	  }
    }
  }
  return strTemp;
}

function convertStringToAMPM(strValue, iAM, iPM) {
var shh, smm, strTemp;

  strTemp = "" + strValue;
  if (strTemp.length > 4) {
    return "BAD";
  }
  if (strTemp.length <= 2) {
    return convertHoursToAMPM(strTemp, "00", iAM, iPM);
  } else {
    smm = strTemp.substr(strTemp.length - 2, 2);
	shh = strTemp.substr(0, strTemp.length - 2);
	return convertHoursToAMPM(shh, smm, iAM, iPM);
  }
}

//-----------------------------------------------------------------------

//	- = new vesion of the function, supporting NN and IE = -

// TimeEdit updating procedure
 function web_data_iu_TimeEditUI_onBlur (	object,
 											objHours,
											objMinutes,
											objTime,
											objAMPM,
											objDate,
											objDateDummy,
											decimalMinutes,
											nullable,
											type,
											look,
											timeStandard,
											date,
											minHour,
											maxHour,
											minMinutes,
											maxMinutes) {


  //clean up hidden field
  object.value = '';

  //process specific case where date is visible and time is not filled in
        //date is visible and the field present
  if (date != 'invisible' &&
        (objDate && objDate.value!=null) &&
            // time box is present and blank
           ((objTime && objTime.value == '') ||
            // no time box and hours/minutes are blank
            (!objTime && objHours.value == '' && objMinutes.value == ''))) {

     object.value = objDate.value;
     return;
  }

  //AM/PM box has changed
  if ((objTime && objTime.value == '') ||
  	  (!objTime &&
	   getFieldValue(objHours) == '' &&
       getFieldValue(objMinutes) == ''))
			return false;

  if (objTime) {

	setFieldValue(objHours,'');
	setFieldValue(objMinutes,'');

	var x = objTime.value;

	if (x.indexOf(decimalMinutes == 'true' ? ':' : '.')!=-1) {
		alert(getLocalizedMessage_INVALID_SEPARATOR());
		objTime.wbValid = false;
		return false;
	}

    var divider = (decimalMinutes == 'true' ? '.' : ':');

    var dividerPos = x.indexOf(divider);

	if (dividerPos!=-1)
		x=x.substring(0,dividerPos) +  x.substring(dividerPos+1);

        if (isNaN(x)) {
            alert(getLocalizedMessage_INVALID_TIME());
			objTime.wbValid = false;
            return false;
        }

		x += (x.length - dividerPos  == 1 ? '0'
				: x.length - dividerPos   == 0 ? '00'
					:'');


        var y = x + (decimalMinutes=='true' && dividerPos < 0?'00':
						x.length==1
							? '00'
							: x.length==2
						   		? (parseFloat(x)<24?'00':'0')
        	                    : '');

        setFieldValue(objHours,y.substring(0,y.length-2));

		if (objAMPM) {

			if (getFieldValue(objHours) > 12 &&
				getFieldValue(objHours) < 25 ) {

				setFieldValue(objAMPM,'PM');
				setFieldValue(objHours,getFieldValue(objHours)-12);

			}

			if (parseFloat(getFieldValue(objHours))==0 &&
				parseFloat(getFieldValue(objMinutes))==0 ) {

				setFieldValue(objAMPM,'PM');
				setFieldValue(objHours,12);;

			}
		}

        setFieldValue(objMinutes,y.substring(y.length-2,y.length));
        objTime.value=( getFieldValue(objHours).length==1 && type=='time'
							? '0'
							:'') +	getFieldValue(objHours) +
                        (getFieldValue(objHours) == '' && getFieldValue(objMinutes) == ''
							? ''
							: divider ) + getFieldValue(objMinutes);
  }
    if (getFieldValue(objHours) == '' && getFieldValue(objMinutes) == '' &&
        (objAMPM? getFieldValue(objAMPM) == '' : true) &&
        (objDateDummy? objDateDummy.value == '' : true)) {

              if (nullable=='true') return;
    } else {
        if (objAMPM && getFieldValue(objAMPM) == '' && y != '') {
				if	(y == '1200')
					setFieldValue(objAMPM,'PM');
				else
					setFieldValue(objAMPM,'AM');
		}
        if (objHours && getFieldValue(objHours) == '')
              setFieldValue(objHours,(objAMPM?'12':'00'));
        if (objMinutes && getFieldValue(objMinutes) == '')
              setFieldValue(objMinutes,'00');
    }

    if ( objDate && objDate.value == '')
	        return false;

    if ( isNaN(getFieldValue(objHours))||
			(type=='time' && parseFloat(getFieldValue(objHours)) >=24)) {
              alert(getLocalizedMessage_INVALID_HOURS());
			  if (objTime) objTime.wbValid = false;
			  	else objHours.wbValid = false;
              return false;
    }
    if ( isNaN(getFieldValue(objMinutes))||
         (decimalMinutes!='true'&& parseFloat(getFieldValue(objMinutes))>=60)) {
		alert(getLocalizedMessage_INVALID_MINUTES());
		if (objTime) objTime.wbValid = false;
			else objMinutes.wbValid = false;
        return false;
    }

    var hours = parseFloat(getFieldValue(objHours));
    var minutes = parseFloat(getFieldValue(objMinutes)) * (decimalMinutes=='true'
              										? (getFieldValue(objMinutes).length<2?10:1)
              										: 1);
    var ampm = (type=='time' && timeStandard=='12' ? getFieldValue(objAMPM) : '');

	if (ampm=='AM') {
	   if (hours==12) hours=0;
	} else
	   if (ampm=='PM' && hours!=12) hours=hours+12;

    var sHours = '' + hours;
    var testValue = parseFloat(hours * 100) + parseFloat(minutes);
    if (look=='box' && testValue <   (parseFloat(minHour * 100) + parseFloat(minMinutes))) {
        alert(getLocalizedMessage_TIME_LESS());
		if (objTime) objTime.wbValid = false;
	  		else objHours.wbValid = false;
        return false;
    }
    if (look=='box' && testValue >   (parseFloat(maxHour * 100) + parseFloat(maxMinutes))) {
        alert(getLocalizedMessage_TIME_GREATER());
		if (objTime) objTime.wbValid = false;
	  		else objHours.wbValid = false;
        return false;
    }

    minutes = Math.round(minutes * (decimalMinutes == 'true'? 3/5 : 1));
    var sMinutes = '' + minutes;
    object.value =
      (type == 'interval'
          ? parseInt(hours*60) + parseInt(minutes)
          : (date != 'none'
              ? objDate.value.substring(0,8) + ' '
              : '') +
      (sHours.length<2?'0':'') + sHours + (sMinutes.length<2?'0':'') + sMinutes +
      (date != 'none' ? '00' : ''));

   if ( object.value.indexOf('NaN') >= 0) {
		object.value = '';
        return false;
   }

  }


//----------------------------------------------------------------


// CurrencyUI updating procedure
function getCurrencySign() {
	return '$';
}

function getCurrencySignPosition() {
	return 'left';
}

function getDecimalsSeparator() {
	return '.';
}

function getThousandsSeparator() {
	return ',';
}

//------------------------------------------------------------------
function formatCurrency(obj,minValue,maxValue) {

	var input =obj.value;
	var hiddenField = obj.name.substring(0,obj.name.lastIndexOf('_dummy'));

	//clean up hidden field
	//document.forms[0].elements[hiddenField].value = '';

	//parsing out currency sign
	if (input.indexOf(getCurrencySign()) >= 0) {
		input = getCurrencySignPosition() == 'left'
				? input.substring(input.indexOf(getCurrencySign()) + getCurrencySign().length,input.length)
				: input.substring(0,input.indexOf(getCurrencySign()))
	}
	//parsing whole part
	var whole = getDecimalsSeparator()!='' && input.indexOf(getDecimalsSeparator())>=0
				? input.substring(0,input.indexOf(getDecimalsSeparator()))
				: input;
	//parsing fraction part
	var	fraction = getDecimalsSeparator()!='' && input.indexOf(getDecimalsSeparator())>=0
				? input.substring(input.indexOf(getDecimalsSeparator())+1,input.length)
				: 0;
	//parsing out thousands separator
	while (getThousandsSeparator() !='' && whole.indexOf(getThousandsSeparator()) >=0)
		whole = whole.replace(getThousandsSeparator(),'');


	if (isNaN(whole)||(getDecimalsSeparator()!='' && isNaN(fraction))) {

		alert(getLocalizedMessage_INVALID_SEPARATOR());
		obj.wbValid=false;
		return false;
	}

	//format
	whole = String(parseFloat(whole));

	if (getDecimalsSeparator()!='')
		fraction = fraction == 0
					? '00'
					: String(Math.round(parseFloat('.' + fraction) * 100));

	// assemble
	var output = '';
	//whole
	for (i=0;i<whole.length;i++)
		output += (getThousandsSeparator() !='' &&
					(whole.length-i)%3 == 0 &&
					i!=0 ? getThousandsSeparator() : '') + whole.charAt(i);
	//fraction
	if (getDecimalsSeparator()!='') output += getDecimalsSeparator() + fraction;
	//currency
	output = getCurrencySignPosition() == 'left'
			? getCurrencySign() + output
			: output + ' ' + getCurrencySign();

	hiddenOutput = whole + (getDecimalsSeparator()!='' ? '.' + fraction : '');

	if (parseFloat(hiddenOutput) < parseFloat(minValue==''||isNaN(minValue)?'0':minValue) ||
		parseFloat(hiddenOutput) > parseFloat(maxValue==''||isNaN(maxValue)?'99999999999999999':maxValue)) {

		alert(getLocalizedMessage_VALUE_OUT_OF_RANGE());
		obj.wbValid=false;
		return false;

	}

	if (output.indexOf('NaN') >= 0) {
		alert(getLocalizedMessage_INVALID_VALUE());
		obj.wbValid=false;
		return false;
	}

	document.forms[0].elements[hiddenField].value = hiddenOutput;

	obj.value = output;
	return;

}

function getFieldValue (object) {
	return object.type.indexOf('select')==0
				?	object.options[object.selectedIndex].value
				:	object.value;
}

function setFieldValue(object,value){
	if (object.type.indexOf('select')==0) {
		for (i=0;i<object.length;i++)
			if (object.options[i].value == value) {
				object.options[i].selected = true;
				return;
			}
	} else
		object.value = value;
}

function _alert(object) {
				if (document.forms[0].object)
					object();
				else
					alert("Message is not found");
}

//------------ Form Validation ---------------

function wbValidateFields(theDocument,field) {
   var i, anObject, trueOrFalse;

   if (theDocument.elements) {
//   		alert('elements');
      trueOrFalse = checkFields(theDocument,field);
   }
   if (theDocument.forms) {
//   		alert('forms');
      for (i=0; i<theDocument.forms.length; i++) {
         anObject = theDocument.forms[i];
         if (anObject.elements) {
            trueOrFalse = checkFields(anObject,field);
            if(!trueOrFalse) return false;
         }
         if(anObject.forms) {
            trueOrFalse = wbValidateFields(anObject,field);
            if(!trueOrFalse) return false;
         }
         if(anObject.layers) {
            trueOrFalse = wbValidateFields(anObject.document,field);
            if(!trueOrFalse) return false;
         }
      }
   }
   if(theDocument.layers) {
//	     alert('layers');
      for (i=0; i<theDocument.layers.length; i++) {
         anObject = theDocument.layers[i];
         if (anObject.elements) {
            trueOrFalse = checkFields(anObject,field);
            if(!trueOrFalse) return false;
         }
         if(anObject.forms) {
            trueOrFalse = wbValidateFields(anObject,field);
            if(!trueOrFalse) return false;
         }
         if(anObject.layers) {
            trueOrFalse = wbValidateFields(anObject.document,field);
            if(!trueOrFalse) return false;
         }
      }
   }

//   alert('passed');
   return true;
}


function checkFields(aForm,field) {
	var i;

   	if(aForm.elements) {
    	for (i=0; i<aForm.elements.length; i++) {

			if (field == 'isResolving') {
				if(aForm.elements[i].isResolving!=null && aForm.elements[i].isResolving == true) {
					return false;
				}
			} else if (field == 'wbValid') {
				if(aForm.elements[i].wbValid!=null && aForm.elements[i].wbValid == false) {
					if (aForm.elements[i].focus) aForm.elements[i].focus();
					return false;
				}
			}
		}
    }
	return true;
}



function validateFormFields(execute) {



    if (!wbValidateFields(document,'isResolving')) {
		/* wait..... */
        setTimeout('validateFormFields("' + execute + '")', 1000);
        return;
    }

    /* done waiting */

    if (!wbValidateFields(document,'wbValid')) {
            alert('The value entered in the field is not correct.');
            return false;
    } else {
            setTimeout(execute,500);
            return true;
    }



}

// Trimming functions

function Trim(orgString){
  return LTrim(RTrim(orgString))
}

function LTrim(orgString){
  return orgString.replace(/^\s+/,'')
}

function RTrim(orgString){
  return orgString.replace(/\s+$/,'')
}

// **** Zooming Fonts For Select Controls ****
function zoomSelectFontsBy(delta) {
   var i, j, iOldSize, sOldSize, ntx;
   for(i=0; i<document.forms.length; i++) {
      if(document.forms[i].elements) {
         for(j=0; j<document.forms[i].elements.length; j++) {
	        if(document.forms[i].elements[j].type.indexOf('select')==0 && document.forms[i].elements[j].style.fontSize) {
			   sOldSize = document.forms[i].elements[j].style.fontSize;
			   ntx = sOldSize.indexOf('px');
			   if(ntx >= 0) {
			      sOldSize = sOldSize.substring(0,ntx);
				  if (isNaN(sOldSize)) {
		   	         iOldSize = 12 + parseInt(delta);
				  } else {
				     iOldSize = parseInt(sOldSize) + delta;
				  }
				  document.forms[i].elements[j].style.fontSize = iOldSize + 'px';
			   }
            }
         }
      }
   }
}


