Javascript Examples
Revision as of 10:35, 26 January 2008 by PeterHarding (talk | contribs) (New page: =wbutil.js= <pre> var posX = 0; var posY = 0; //capturing the MouseDown event for Netscape in order to display pop-ups properly if(navigator.appName=="Netscape") { document.captureEve...)
wbutil.js
var posX = 0; var posY = 0; //capturing the MouseDown event for Netscape in order to display pop-ups properly if(navigator.appName=="Netscape") { document.captureEvents(Event.MOUSEDOWN); } document.onmousedown = getPosition function getPosition(evt) { if(navigator.appName=="Netscape") { posX = evt.screenX; posY = evt.screenY; } } // 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 isDigit(string){ if (string.length!=1) return false; return string >= '0' && string <= '9'; } String.prototype.isDigit=function f(){ return isDigit(this); } 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 || navigator.vendorSub ? 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) { DatePicker_popup (field_item, field_item_hidden, mask,200,200,''); } function DatePicker_popup_2(field_item, field_item_hidden, mask,width,height,parameters) { var newWindowOptions; var newWindowTop; var openWindow; var winWidth, winHeight; if (width>0) winWidth =width; else winWidth = 200; if (height>0) winHeight=height; else 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= contextPath + "/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) + "&hiddenVal="+document.forms[0].elements[field_item_hidden].value; if (parameters!=null && parameters.length>0) openWindow=openWindow+parameters; openWindow = openWindow.replace(" ","+"); newWindowOptions = "width=" + winWidth + ",height=" + winHeight + ",innerWidth=" + winWidth + ",innerHeight=" + winHeight + ",alwaysRaised=1,resizable=YES,screenX="+posX+",screenY="+posY+",left="+posX+",top="+posY+",scrollbars=0"; 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 ><</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 >></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.getDate(); } } 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 { return( (new Date()).getFullYear() ); } } 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 // // **************************************************************************** var lookupOpened = false; // !!!!!!!!!!! never call this procedure directly from your page !!!!!!!!!!!!! function DBLookup_popup( fieldHidden, fieldVisible, key, label, fields, nullable, multiple, pageSize, pageTitle, dataSourceType, dataSourceSpec, dataSourceParams, where, pageType, filtersDuplicatesBySQL){ var newWindowOptions; var newWindowTop; var openWindow; var winWidth, winHeight; var theForm; //var posX, posY; if (lookupOpened) { handle = window.open('','Lookup'); if (handle) //handle mac platform DOM window object behavior, #7300 if (!(handle.navigator && handle.navigator.platform && handle.navigator.platform.toUpperCase() == 'MACPPC')) handle.close(); } else lookupOpened = true; winWidth = 350; winHeight = 350; if (document.all) { // ****** Internet Explorer **** posX = event.screenX; posY = event.screenY; theForm = document.forms[0]; } else { // ****** Netscape *********** theForm = findFormForName(document, fieldHidden+'_Form'); if(theForm == null) { theForm = document.forms[0]; } if(navigator.vendorSub) { // Netscape 7 winWidth = 350; winHeight = 350; } else { winWidth = 525; winHeight = (multiple=="multiple") ? 610 : 450; } } eleX = posX; eleY = posY; if(theForm == null) { wbAlert(getLocalizedMessage_NO_FORM()); return; } // If the lookup is currently resolving, wait until complete. if (theForm.elements[fieldVisible].isResolving == true) { theForm.elements[fieldVisible].isLookupPending = true; 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 initialBlank = ( theForm.elements[fieldHidden].getAttribute('initialBlank') ? theForm.elements[fieldHidden].getAttribute('initialBlank') : ''); // this string may exceed 2k. read this paramter directly from form by the opened window instead of passign it through. var resultSelected = ( (multiple != 'multiple' && 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= contextPath + "/system/ui/DBLookupUI_" + multiple + ".jsp" + "?fieldHidden=" + fieldHidden + "&fieldVisible=" + fieldVisible + "&key=" + key + "&label=" + label + "&fields=" + fields + "&nullable=" + nullable + "&pageSize=" + pageSize + "&pageTitle=" + pageTitle + "&posX=" + posX + "&posY=" + posY + "&dataSourceType=" + dataSourceType + "&dataSourceSpec=" +escape(dataSourceSpec) + (resultSelected == '' ? '':"&resultSelected=" + resultSelected) + (initialBlank == '' ? '':"&initialBlank=" + initialBlank) + (itemsCount == ''? '':"&itemsCount=" + itemsCount) + (where == ''? '':"&where=" + escape(where)) + (addwhere == ''? '':"&addwhere=" + escape(addwhere)) + (pageType == '' ? '': "&pageType=" + pageType) + "&filtersDuplicatesBySQL=" + filtersDuplicatesBySQL + "&dataSourceParams=" + escape(dataSourceParams); newWindowOptions = "width=" + winWidth + ",height=" + winHeight + ",innerWidth=" + winWidth + ",innerHeight=" + winHeight + ",alwaysRaised=1,resizable=YES,screenX="+posX+",screenY="+posY+",left="+posX+",top="+posY+",scrollbars=1"; window.open(openWindow,"Lookup",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, "", "", "", "false"); } resolveWindowsCount = 0; function DBLookup_resolveLabels(fieldHidden, fieldVisible, key, label, selectedLabels, dataSourceType, dataSourceSpec, dataSourceParams, where, multiple, filtersDuplicatesBySQL) { resolveLabels(fieldHidden, fieldVisible, key, label, selectedLabels, dataSourceType, dataSourceSpec, dataSourceParams, where, multiple, 'DB', filtersDuplicatesBySQL); } function MessagingLookup_resolveLabels(fieldHidden, fieldVisible, key, label, selectedLabels, dataSourceType, dataSourceSpec, where) { resolveLabels(fieldHidden, fieldVisible, key, label, selectedLabels, dataSourceType, dataSourceSpec, "", where, 'true', 'Messaging', false); } function resolveLabels(fieldHidden, fieldVisible, key, label, selectedLabels, dataSourceType, dataSourceSpec, dataSourceParams, where, multiple, ui, filtersDuplicatesBySQL) { 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; if (document.all) { // ****** Internet Explorer **** theForm = document.forms[0]; } else { // ****** Netscape *********** theForm = findFormForName(document, fieldHidden+'_Form'); if(theForm == null) { theForm = document.forms[0]; } } if(theForm == null) { wbAlert(getLocalizedMessage_NO_FORM()); return; } var addwhere = (theForm.elements[fieldHidden].addwhere?theForm.elements[fieldHidden].addwhere:''); openWindow= contextPath + "/system/ui/" + ui + "LookupUIResolve.jsp?" + "&fieldHidden=" + fieldHidden + "&fieldVisible=" + fieldVisible + "&key=" + key + "&label=" + label + "&selectedLabels=" + escape(selectedLabels) + "&dataSourceType=" + dataSourceType + "&dataSourceSpec=" + escape(dataSourceSpec) + (where == ''? '':"&where=" + (ui=='DB' ? escape(where) : where)) + (addwhere == ''? '':"&addwhere=" + escape(addwhere)) + "&multiple=" + multiple + "&filtersDuplicatesBySQL=" + filtersDuplicatesBySQL + "&dataSourceParams=" + escape(dataSourceParams); newWindowOptions = "width=" + winWidth + ",height=" + winHeight + ",screenX="+posX+ ",screenY="+posY+ ",left="+posX+ ",top="+posY+ ",innerWidth=" + winWidth + ",innerHeight=" + winHeight + ",alwaysRaised=1,locationbar=0,statusbar=0,resizable=NO"; if(document.all) { // **** For IE we are using iFrame var frameName='if' + fieldHidden; document.all[frameName].src=openWindow; } else { // *** For Netscape Window is Fine window.open(openWindow,"resolveWindow_" + (resolveWindowsCount++) ,newWindowOptions ).focus(); } } var wbAlertWindow; // stores alert window parameters for NN function wbAlert(message) { var newWindowOptions; var newWindowTop; var openWindow; var winWidth, winHeight; winWidth = 200; winHeight = 10; var posX = 200; var posY = 200; openWindow= message; newWindowOptions = "width=" + winWidth + ",height=" + winHeight + ",innerWidth=" + winWidth + ",innerHeight=" + winHeight + ",alwaysRaised=0,locationbar=0,statusbar=0,resizable=NO"; if(document.all) { // **** For IE we are using iFrame alert(message); } else { // *** For Netscape Window is Fine if (!wbAlertWindow) { w = window.open("","Alert",newWindowOptions ); w.document.open(); w.document.write("<script>"); w.document.write("</script>"); w.document.write("<body onBlur='window.close();' onUnload='window.opener.wbAlertWindow = null;'>"); w.document.write("<form>"); w.document.write("<p>" + message + "</p>"); w.document.write("</form>"); w.document.write("</body>"); w.document.close(); w.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) { wbAlert(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 (lookupOpened) { handle = window.open('','Lookup'); if (!(handle.navigator && handle.navigator.platform && handle.navigator.platform.toUpperCase() == 'MACPPC')) handle.close(); } else lookupOpened = true; 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= contextPath + "/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,"Lookup",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) { // check for a select element first because a select element's object.value will return // the selected option's value, but for select elements, we are concerned with the text not values when determining // if the object was set if( typeof( object.options ) != "undefined" ) { // was a labelled option selected return( !object.options[ object.selectedIndex ].text.isEmpty() ); } else 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 ******* // this function is being referenced for Netscape 4.* only 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 elementToReturn; // leave the document.all syntax in for now if( document.all ) { // ** IE ** elementToReturn = document.all[elementName]; } else if( navigator.appName == "Netscape" && navigator.userAgent.charAt(8) >= 5 ) { // Netscape whose version is greater than 4.* elementToReturn = document.forms[ 0 ].elements[ elementName ]; // The above won't return non-form elements (ex. DIV for labels). if(elementToReturn == null){ elementToReturn = document.getElementsByName(elementName)[0]; } } else { elementToReturn = getElementInternal(document, elementName, 'page_form'); } if( elementToReturn != null ) { return elementToReturn; } } 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; } else { targetForm.elements[i].checked=false; } bn++; } else { // *** All Other Controls *** targetForm.elements[i].value=theValue; } } } } } function getStartDayOfWeek(today, startDayOfWeek, weekOffset){ startDay = today.getDate() - today.getDay(); if(startDayOfWeek > today.getDay()){ startDay -= 7; } startDay += startDayOfWeek + (weekOffset * 7); return startDay; } function setDateRangeDatePickers(value, startName, endName, startMask, endMask, startDayOfWeek) { //startDayOfTheWeek - 1=Sunday, 2=Monday, ..., 7=Saturday var sValue = value.substr(0,value.indexOf('~!~')); var today = new Date() ; var startPicker = getElement(startName); var startPickerDummy = getElement(startName+'_dummy'); var endPicker = getElement(endName); var endPickerDummy = getElement(endName+'_dummy'); if (!startPicker || !startPickerDummy || !endPicker || !endPickerDummy) return; var NSYear = document.all ? 0 : 1900; var today = new Date() ; var startDate; var endDate; var NSYear = document.all ? 0 : 1900; var DAY_MILLIS = 24*60*60*1000; //IE is perfectly happy with having negative values for month or date. i.e: //startDate = new Date(today.getYear(), today.getMonth(), today.getDate()-today.getDay()); //Netscape doesn't like the idea so we have to do some calculations... //Netscape as well behaves kind of wierd(!?) in it's year calculations... //I love Netscape, it protects my grey cells from total extinction ;-) if (sValue == 'TODAY') { startDate = new Date(today.getYear(), today.getMonth(), today.getDate()); endDate = startDate; } else if (sValue == 'THISWEEK') { startDate = new Date(today.getYear(), today.getMonth(), getStartDayOfWeek(today, startDayOfWeek - 1,0), 12, 0, 0 ); endDate = new Date(startDate.getTime()+DAY_MILLIS*6); } else if (sValue == 'THISMONTH') { startDate = new Date(today.getYear(), today.getMonth(), 1); endDate = new Date(today.getYear(), today.getMonth()+1, 1); endDate = new Date(endDate.getTime()-DAY_MILLIS); } else if (sValue == 'THISYEAR') { startDate = new Date(today.getYear(), 0, 1); endDate = new Date(today.getYear()+1, 0, 1); endDate = new Date(endDate.getTime()-DAY_MILLIS); } else if (sValue == 'YESTERDAY') { startDate = new Date(today.getYear(), today.getMonth(), today.getDate()); startDate = new Date(startDate.getTime()-DAY_MILLIS); //startDate = new Date(today.getTime()-DAY_MILLIS); endDate = startDate; } else if (sValue == 'LASTWEEK') { startDate = new Date(today.getYear(), today.getMonth(), getStartDayOfWeek(today, startDayOfWeek - 1, -1), 12, 0, 0 ); endDate = new Date(startDate.getTime()+DAY_MILLIS*6); } else if (sValue == 'LASTMONTH') { endDate = new Date(today.getYear(), today.getMonth(), 1); endDate = new Date(endDate.getTime()-DAY_MILLIS); startDate = new Date(endDate.getTime()); startDate.setDate(1); } else if (sValue == 'LASTYEAR') { startDate = new Date(today.getYear()-1, 0, 1); endDate = new Date(today.getYear(), 0, 1); endDate = new Date(endDate.getTime()-DAY_MILLIS); } else if (sValue == 'TOMORROW') { startDate = new Date(today.getYear(), today.getMonth(), today.getDate()+1); endDate = startDate; } else if (sValue == 'NEXTWEEK') { startDate = new Date(today.getYear(), today.getMonth(), getStartDayOfWeek(today, startDayOfWeek - 1,1) ); endDate = new Date(startDate.getTime()+DAY_MILLIS*6); } else if (sValue == 'NEXTMONTH') { startDate = new Date(today.getYear(), today.getMonth()+1, 1); endDate = new Date(today.getYear(), today.getMonth()+2, 1); endDate = new Date(endDate.getTime()-DAY_MILLIS); } else if (sValue == 'NEXTYEAR') { startDate = new Date(today.getYear()+1, 0, 1); endDate = new Date(today.getYear()+2, 0, 1); endDate = new Date(endDate.getTime()-DAY_MILLIS); } else if (sValue == 'LAST3DAYS') { endDate = new Date(today.getYear(), today.getMonth(), today.getDate()); endDate = new Date(endDate.getTime()-DAY_MILLIS); startDate = new Date(endDate.getTime()-DAY_MILLIS*2); } else if (sValue == 'LAST7DAYS') { endDate = new Date(today.getYear(), today.getMonth(), today.getDate()); endDate = new Date(endDate.getTime()-DAY_MILLIS); startDate = new Date(endDate.getTime()-DAY_MILLIS*6); } else if (sValue == 'LAST30DAYS') { endDate = new Date(today.getYear(), today.getMonth(), today.getDate()); endDate = new Date(endDate.getTime()-DAY_MILLIS); startDate = new Date(endDate.getTime()-DAY_MILLIS*29); } else { //do nothing return; } var startYear = '' + (startDate.getYear()+2*NSYear); var startMonth = '' + (startDate.getMonth()+1); var startDay = '' + startDate.getDate(); var endYear = '' + (endDate.getYear()+2*NSYear); var endMonth = '' + (endDate.getMonth()+1); var endDay = '' + endDate.getDate(); //set values if (startPicker) startPicker.value = formatDateHidden(startDay, startMonth, startYear); if (startPickerDummy) startPickerDummy.value = formatDate(startDay, startMonth, startYear, startMask); if (endPicker) endPicker.value = formatDateHidden(endDay, endMonth, endYear); if (endPickerDummy) endPickerDummy.value = formatDate(endDay, endMonth, endYear, endMask); } // ***** 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); } } //----------------------------------------------------------------------- function tBl(objName, decimalMinutes, decimalPlaces, nullable, type, look, timeStandard, date, minHour, maxHour, minMinutes, maxMinutes, isPositioned) { var object = getByName(objName, isPositioned); var objHours = getByName(objName + '_hours', isPositioned); var objMinutes = getByName(objName + '_minutes', isPositioned); var objTime = getByName(objName + '_time', isPositioned); var objAMPM = getByName(objName + '_AMPM', isPositioned); var objDate = getByName(objName + '_date', isPositioned); var objDateDummy = getByName(objName + '_date_dummy', isPositioned); web_data_iu_TimeEditUI_onBlur( object, objHours, objMinutes, objTime, objAMPM, objDate, objDateDummy, decimalMinutes, decimalPlaces, nullable, type, look, timeStandard, date, minHour, maxHour, minMinutes, maxMinutes); } function getByName(objName, isPositioned) { if (document.layers && isPositioned) return findElementForName(objName + '_Form', objName); else return document.forms[0].elements[objName]; } // - = 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, decimalPlaces, nullable, type, look, timeStandard, date, minHour, maxHour, minMinutes, maxMinutes) { //clean up hidden field object.value = ''; if (objTime) setFieldValue(objTime,StringReplace(objTime.value,' ','')); if (objHours) setFieldValue(objHours,StringReplace(objHours.value,' ','')); if (objMinutes) setFieldValue(objMinutes,StringReplace(objMinutes.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,''); if (objTime.value.indexOf(decimalMinutes == 'true' ? ':' : '.')!=-1) { wbAlert(getLocalizedMessage_INVALID_SEPARATOR()); objTime.wbValid = false; return false; } if (decimalMinutes == 'true') { var tempVal = new String(Math.round( objTime.value * Math.pow (10, decimalPlaces)) / Math.pow( 10, decimalPlaces)); if (isNaN(tempVal)) { wbAlert(getLocalizedMessage_INVALID_TIME()); objTime.wbValid = false; return false; } var decimal = tempVal.indexOf('.'); var numOfZerosNeeded = 0; if (decimal == -1) { numOfZerosNeeded = decimalPlaces; tempVal += '.'; } else { numOfZerosNeeded = decimalPlaces - tempVal.substring(decimal + 1, tempVal.length).length; if (numOfZerosNeeded < 0) numOfZerosNeeded = 0; } for (var i = 0; i < numOfZerosNeeded; i++) { tempVal += '0'; } objTime.value = tempVal; } var x = objTime.value; var divider = (decimalMinutes == 'true' ? '.' : ':'); var oldLength = x.length; x = x.replace(/^0+/,''); var newLength = x.length; var noHours = (oldLength >= (newLength + 2)); if (x.indexOf(divider) == 0) x = '0'+ x; var dividerPos = x.indexOf(divider); if (dividerPos!=-1) x= x.substring(0,dividerPos) + x.substring(dividerPos+1); if (isNaN(x) || (x.indexOf(divider) != -1)) { wbAlert(getLocalizedMessage_INVALID_TIME()); objTime.wbValid = false; return false; } x += (x.length - dividerPos == 1 ? '0' : x.length - dividerPos == 0 ? '00' :''); var y; if(noHours) { y = x + (decimalMinutes=='true' && dividerPos < 0?'00': ''); y = (y.length == 1) ? '0' + y : y; setFieldValue(objHours, y.length <=2 ? '00' : y.substring(0,(dividerPos > 0 ? dividerPos : y.length-2))); } else { y = x + (decimalMinutes=='true' && dividerPos < 0?'00': x.length==1 ? '00' : x.length==2 ? (parseFloat(x)<24?'00':'0') : ''); setFieldValue(objHours, y.substring(0,(dividerPos > 0 ? dividerPos : 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); } } var tMin = '0.' + y.substring((dividerPos > 0 ? dividerPos : y.length-2),y.length); if (decimalMinutes == 'true') { tMin = Math.round(tMin * Math.pow (10, decimalPlaces)); setFieldValue(objMinutes, new String(tMin)); } else { tMin = Math.round (tMin * 100); setFieldValue(objMinutes,(tMin < 10 ? '0' : '') + new String(tMin)); } if (decimalMinutes != 'true') { 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 (getFieldValue(objHours) == '12') setFieldValue(objAMPM,'PM'); else setFieldValue(objAMPM,'AM'); } // tt 74276 - TimeEdit control in form builder does not allow reset to blank // The user should be allowed to go back to blank values ones a value has been // chosen in the drop down combo but the below code sets them to max/min values // accordingly when the user tries to select the blank. // if (objHours && getFieldValue(objHours) == '') // setFieldValue(objHours,(timeStandard == '12' ?'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)) { wbAlert(getLocalizedMessage_INVALID_HOURS()); if (objTime) objTime.wbValid = false; else objHours.wbValid = false; return false; } if ( isNaN(getFieldValue(objMinutes))|| (decimalMinutes!='true'&& parseFloat(getFieldValue(objMinutes))>=60)) { wbAlert(getLocalizedMessage_INVALID_MINUTES()); if (objTime) objTime.wbValid = false; else objMinutes.wbValid = false; return false; } var hours = parseFloat(getFieldValue(objHours)); var minutes = parseFloat(getFieldValue(objMinutes)); if (look=='text' && type=='time' && timeStandard=='12' && !isNaN(hours)) { if (hours>12) setFieldValue(objAMPM,'PM'); while (hours > 12) hours = hours - 12; setFieldValue(objHours,(''+hours).padLeft(2,'0',2)); } var ampm = (type=='time' && timeStandard=='12' ? getFieldValue(objAMPM) : ''); if ( ampm == '' && getFieldValue(objHours) && getFieldValue(objHours).substring(0,1) == '-' ) minutes *= -1; 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))) { wbAlert(getLocalizedMessage_TIME_LESS()); if (objTime) objTime.wbValid = false; else objHours.wbValid = false; return false; } if (look=='box' && testValue > (parseFloat(maxHour * 100) + parseFloat(maxMinutes))) { wbAlert(getLocalizedMessage_TIME_GREATER()); if (objTime) objTime.wbValid = false; else objHours.wbValid = false; return false; } if (decimalMinutes == 'true') minutes = Math.round((minutes / Math.pow(10,decimalPlaces)) * 60); 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; } } //---------------------------------------------------------------- // DatePickerUI updating procedure, #22622 function dBl(object,mask) { web_data_iu_DatePickerUI_onBlur(object,mask); } function web_data_iu_DatePickerUI_onBlur(object,mask) { var value = ""; if (object.value) value = object.value; else return; var maskTokens = new Array(); var mtIndex = 0; var pChar = ''; var token = ''; //mask tokens for (i=0; i<mask.length; i++) { pChar=mask.substring(i,i+1); token = pChar; for (i++;i<mask.length;i++){ if(mask.substring(i,i+1) != pChar) { i--; break; } token += mask.substring(i,i+1) } maskTokens[mtIndex] = token; mtIndex++; token = ''; } var digit = false; var pcDigit= false; var inputTokens = new Array(); var itIndex = 0; //value tokens for (i=0; i<value.length; i++) { pChar=value.substring(i,i+1); token = pChar; digit = isDigit(pChar); for (i++;i<value.length;i++){ pChar = value.substring(i,i+1); pcDigit = isDigit(pChar); if ( (digit && !pcDigit) || (!digit && pcDigit) ) { i--; break } token += value.substring(i,i+1) } inputTokens[itIndex] = token; itIndex++; token = ''; } var nMaskValueChars = 0; var nMaskSeparators = 0; for (i=0; i<maskTokens.length; i++) { pChar = maskTokens[i].substring(0,1); if (pChar == 'M' || pChar == 'd' || pChar == 'y') { nMaskValueChars += maskTokens[i].length; } else { nMaskSeparators++; } } var nInputValueChars = 0; var nInputSeparators = 0; for (i=0; i<inputTokens.length; i++) { pChar = inputTokens[i].substring(0,1); if (isDigit(pChar)) { nInputValueChars += inputTokens[i].length; } else { nInputSeparators++; } } if (maskTokens.length == inputTokens.length) { //'0' padLeft value tokens to mask width, if needed for (i=0; i<maskTokens.length; i++) { pChar = inputTokens[i].substring(0,1); if (isDigit(pChar)) { if (inputTokens[i].length > maskTokens[i].length) return; if (maskTokens[i].substring(0,1) == 'y') { //TT33930 if (inputTokens[i].length < maskTokens[i].length) return; } else inputTokens[i] = inputTokens[i].padLeft(maskTokens[i].length,'0'); } } } else if (inputTokens.length = 1 && nInputValueChars > 0 && nInputValueChars == nMaskValueChars) { //add separator tokens to input tokens var newInputTokens = new Array(); var nStartIndex = 0; for (i=0; i<maskTokens.length; i++) { pChar = maskTokens[i].substring(0,1); if (pChar == 'M' || pChar == 'd' || pChar == 'y') { newInputTokens[i] = inputTokens[0].substring(nStartIndex, nStartIndex + maskTokens[i].length); nStartIndex += maskTokens[i].length; } else { newInputTokens[i] = maskTokens[i]; } } inputTokens = newInputTokens; } var newValue = ''; for (i=0; i<inputTokens.length; i++) { newValue += inputTokens[i]; } if (newValue.isDate(mask)) object.value = newValue; } //---------------------------------------------------------------- // 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))) { wbAlert(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)); if (fraction.length<2) fraction = '0'+fraction; // 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)) { wbAlert(getLocalizedMessage_VALUE_OUT_OF_RANGE()); obj.wbValid=false; return false; } if (output.indexOf('NaN') >= 0) { wbAlert(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 wbAlert("Message is not found"); } //------------ Form Validation --------------- function wbValidateFields(theDocument,field) { var i, anObject, valid; if (theDocument.elements) { valid = checkFields(theDocument,field); } if( theDocument.forms ) { var formSize = theDocument.forms.length; for( i = 0 ; i < formSize ; i++ ) { anObject = theDocument.forms[ i ]; if (anObject.elements) { valid = checkFields(anObject,field); if(!valid) { return false; } } if(anObject.forms) { valid = wbValidateFields(anObject,field); if(!valid) { return false; } } // layers is only valid in Netscape 4 // leave this here as it is legacy code if(anObject.layers) { valid = wbValidateFields(anObject.document,field); if(!valid) { return false; } } } } // document.layers is only valid in Netscape 4 // leave this here as it is legacy code if(theDocument.layers) { for (i=0; i<theDocument.layers.length; i++) { anObject = theDocument.layers[i]; if (anObject.elements) { valid = checkFields(anObject,field); if(!valid) { return false; } } if(anObject.forms) { valid = wbValidateFields(anObject,field); if(!valid) { return false; } } if(anObject.layers) { valid = wbValidateFields(anObject.document,field); if(!valid) { return false; } } } } 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; } } else if (field == 'isValidating') { if(aForm.elements[i].isValidating!=null && aForm.elements[i].isValidating == true) { return false; } } else if (field == 'validNumber') { if(aForm.elements[i].validNumber!=null && aForm.elements[i].validNumber == false) { if (aForm.elements[i].focus) aForm.elements[i].focus(); return false; } } } } return true; } var gButton; function validateFormFields(execute) { if (!wbValidateFields(document,'isResolving')) { /* wait..... */ setTimeout('validateFormFields("' + execute + '")', 1000); return; } /* done waiting */ if (!wbValidateFields(document,'wbValid')) { alert(getLocalizedMessage_INCORRECT_VALUE()); if( gButton ) { gButton.disabled=false; } return false; } else { setTimeout(execute,500); return true; } } function validateNumberField(execute) { if (!wbValidateFields(document,'isValidating')) { /* wait..... */ setTimeout('validateNumberField("' + execute + '")', 1000); return; } /* done waiting */ if (!wbValidateFields(document,'validNumber')) { alert(getLocalizedMessage_INCORRECT_VALUE()); return false; } else { if(execute != null && execute != 'undefined' && execute != 'unassigned' && execute != '') { setTimeout(execute,500); } return true; } } function validateFormFieldsWithButtonsDisabled(button, execute) { gButton = button; if( gButton ) gButton.disabled=true; return validateFormFields(execute); } // 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'; } } } } } } // ------------------------------------------------------------------------ // decides whether or not scrollbars should be added to a popup window function areScrollbarsAdded(){ var scrollbars = 0; // Always show scrollbars for netscape if(document.layers) scrollbars = 1; // In IE show scrollbars if screen resolution is less <= 800x600 else if(screen.width <= 800) scrollbars = 1; return scrollbars; } //-------------------- // replaces the long 'getElementAddWhere thing function geAW( fieldName ) { return escape(getElementAddWhere((document.all ? document.forms[0].name : fieldName + '_Form') , fieldName )) ; } function seAW( fieldName, value ) { return setElementAddWhere((document.all ? document.forms[0].name : fieldName + '_Form') , fieldName, value ) ; } //--------------- // outsources onClick function in timesheet function tsOCl(colName, recCnt, object) { document.forms[0].elements['CHECKBOX_' + colName + '_' + recCnt].value = (object.checked ? 'Y' : 'N'); } // function cbYN(object) { object.value =(object.checked?'Y':'N'); } // function cbaYN(name,object) { document.forms[0].elements[name].value =(object.checked?'Y':'N'); } function StringReplace(sInput, sFind, sReplace) { if (sInput == '') return ''; var sTemp = sInput; while (sTemp.indexOf(sFind) != -1) { sTemp = sTemp.replace(sFind, sReplace); } return sTemp; } function enableParentSubmit() { elements = window.opener.document.forms[0].elements; oldLabel = window.opener.document.all.Submit_Label.value; if (elements.length > 0) { for (i = 0 ; i < elements.length ; i ++) { elements[i].disabled=false; if (elements[i].value=='Processing..') { elements[i].value=oldLabel; } } } window.opener._is_transaction_in_progress_=false; } // Display the status message on the top of the page // the value is extracted from the hidden object: // window.document." + WebConstants.WEB_PAGE_FORM_NAME + ".STATUS_MESSAGE_HIDDEN;" // and is called by onLoad event for each page (used in PageTag.java) function printPageActionStatus(obj) { if(obj!=null && obj!="undefined" && obj!="unassigned") { if(obj.value!=null && obj.value!="" && obj.value!="unassigned") { document.getElementById("statusLeft").innerHTML=obj.value; document.getElementById("pageStatusBox").style.display ="block"; } } window.status= "Done"; } function printUIPath(obj) { if(obj!=null && obj!="undefined" && obj!="unassigned") { if(obj.value!=null && obj.value!="" && obj.value!="unassigned") { document.getElementById("breadcrumb").innerHTML=obj.value; obj.value = ''; } } } function moveUIPathBox() { var topOffset = 0; var Dif = parseInt((document.body.scrollTop+topOffset-document.all.uiPathBoxSpan.offsetTop)*.25,10) // Work-around wierd Netscape NaN bug when Dif is 0 if (isNaN(Dif)) Dif=0 document.all.uiPathBoxSpan.style.pixelTop+=Dif; } function uiPathOnTop() { //window.setInterval("moveUIPathBox()",10); } // Following is used for maintaining the scroll position between page re-posts function setScrollPosition(){ try { document.getElementById("__x").value = document.body.scrollLeft; document.getElementById("__y").value = document.body.scrollTop; } catch (e) { alert("Error: setScrollPosition\n\n" + e.description); } } function jumpToSavedScrollPosition(){ try { if (document.getElementById("__x").value == "0" && document.getElementById("__y").value == 0) { return; } self.scrollTo(document.getElementById("__x").value, document.getElementById("__y").value); document.getElementById("__x").value = "0"; document.getElementById("__y").value = "0"; } catch (e) { alert("Error: jumpToSavedScrollPosition\n\n" + e.description); } } function jumpToLastScrollPos() { if (null == document.getElementById("__x") || null == document.getElementById("__y")) return; try { var lastPage = document.referrer; var thisPage = document.URL; lastPage = lastPage.indexOf("?") > 0 ? lastPage.substring(0,lastPage.indexOf("?")) : lastPage;// remove URL parameters thisPage = thisPage.indexOf("?") > 0 ? thisPage.substring(0,thisPage.indexOf("?")) : thisPage; //only jump to the last scroll position if this is a repost to the same page if (thisPage == lastPage) { setTimeout("jumpToSavedScrollPosition()",0); } } catch (e) { alert("Error: jumpToLastScrollPos\n\n" + e.description); } window.status= "Done"; } // Following is used for 'floating' page elements and keeping them in view as page is scrolled var floaters = new Array(3); floaters[0] = new Array(); floaters[1] = new Array(); floaters[2] = new Array(); Array.prototype.find = function(value, start, partial) { start = start || 0; for (var i=start; i<this.length; i++) if (partial) { if (this[i].indexOf(value) > -1) return i; } else { if (this[i]==value) return i; } return -1; } Array.prototype.has = function(value, partial) { return this.find(value,0, partial)!==-1; } function getElem(elem) { if (document.getElementById) { if (typeof elem == "string") { elem = document.getElementById(elem); if (elem===null) throw 'cannot get element: element does not exist'; } else if (typeof elem != "object") { throw 'cannot get element: invalid datatype'; } } else throw 'cannot get element: unsupported DOM'; return elem; } function hasClass(elem, className) { return getElem(elem).className.split(' ').has(className, false); } function hasClassContaining(elem, className) { return getElem(elem).className.split(' ').has(className, true); } function getClassContaining(elem, className) { var el = getElem(elem); var clsNum = el.className.split(' ').find(className, 0, true); if (clsNum > -1) { return el.className.split(' ')[clsNum]; } else { return ""; } } function addFloaterById(floaterId,clsName){ addFloater(document.getElementById(floaterId),clsName); } function addFloater(floater, clsName){ var pos = elPosition(floater); if (clsName == "xfloater") floaters[0][floaters[0].length] = {el:floater, x:pos.x, y:pos.y}; if (clsName == "yfloater") floaters[1][floaters[1].length] = {el:floater, x:pos.x, y:pos.y}; if (clsName == "xyfloater") floaters[2][floaters[2].length] = {el:floater, x:pos.x, y:pos.y}; } function elPosition(element){ var x=0, y=0; while (element!=null){ x += element.offsetLeft-element.scrollLeft; y += element.offsetTop-element.scrollTop; element = element.offsetParent; } return {x:x, y:y}; } function repositionFloaters() { for (var j = 0; j < floaters.length; j++) { for (var i = 0; i < floaters[j].length; i++) { scrLeft = document.body.scrollLeft; scrTop = document.body.scrollTop; floater = floaters[j][i]; //window.status = floater.x + " , " + floater.y + " : " + floater.el.style.left + " , " + floater.el.style.top + " : " + scrLeft + " , " + scrTop; if ((j == 0 || j == 2)) { if (scrLeft > floater.x) { floater.el.style.left = document.body.scrollLeft - floater.x; } else { floater.el.style.left = "0px"; } } if ((j == 1 || j == 2)) { if (scrTop > floater.y) { floater.el.style.top = document.body.scrollTop - floater.y; } else { floater.el.style.top = "0px"; } } } } } function addFloatersByTag(tagList){ tags = tagList.split(","); for (var t = 0; t < tags.length; t++) { elements = document.getElementsByTagName(tags[t]); for (var i=0; i<elements.length; i++) { try { if (hasClassContaining(elements[i],"floater")) { clsName = getClassContaining(elements[i],"floater"); addFloater(elements[i], clsName); } } catch (e) { alert("ERROR addFloatersByTag " + e.description); return; } } } } // Following is used to display context senstive Robohelp function popupContextSensitiveHelp(topicId, languageId){ // var msg = "Context Sensitive RoboHelp for topic ID " + topicId + " , language ID " + languageId; // msg+= " will be displayed here.\n"; // msg+= "Waiting for Topic IDs to be implemented in a new RoboHelp build."; // alert(msg); RH_ShowHelp(0, contextPath + "/help/" + languageId + "/Workbrain_Help.htm", 15, topicId); return false; } // --------------------- copied content of RoboHelp_CHS.js --------------------- // // This is likely temporary addition, for getting online help stuff ready for QA // // eHelp® Corporation // Copyright© 1998-2002 eHelp® Corporation.All rights reserved. // RoboHelp_CSH.js // The Helper function for WebHelp Context Sensitive Help // Syntax: // function RH_ShowHelp(hParent, a_pszHelpFile, uCommand, dwData) // // hParent // Reserved - Use 0 // // pszHelpFile // WebHelp: // Path to help system start page ("http://www.myurl.com/help/help.htm" or "/help/help.htm") // For custom windows (defined in Help project), add ">" followed by the window name ("/help/help.htm>mywin") // // WebHelp Enterprise: // Path to RoboEngine server ("http://RoboEngine/roboapi.asp") // If automatic merging is turned off in RoboEngine Configuration Manager, specify the project name in the URL ("http://RoboEngine/roboapi.asp?project=myproject") // For custom windows (defined in Help project), add ">" followed by the window name ("http://RoboEngine/roboapi.asp>mywindow") // // uCommand // Command to display help. One of the following: // HH_HELP_CONTEXT // Displays the topic associated with the Map ID sent in dwData // if 0, then default topic is displayed. // The following display the default topic and the Search, Index, or TOC pane. // Note: The pane displayed in WebHelp Enterprise will always be the window's default pane. // HH_DISPLAY_SEARCH // HH_DISPLAY_INDEX // HH_DISPLAY_TOC // // dwData // Map ID associated with the topic to open (if using HH_HELP_CONTEXT), otherwise 0 // // Examples: // <p>Click for <A HREF='javascript:RH_ShowHelp(0, "help/help.htm", 0, 10)'>Help</A> (map number 10)</p> // <p>Click for <A HREF='javascript:RH_ShowHelp(0, "help/help.htm>mywindow", 0, 100)'>Help in custom window (map number 100)</A></p> var gbNav6=false; var gbNav61=false; var gbNav4=false; var gbIE4=false; var gbIE=false; var gbIE5=false; var gbIE55=false; var gAgent=navigator.userAgent.toLowerCase(); var gbMac=(gAgent.indexOf("mac")!=-1); var gbSunOS=(gAgent.indexOf("sunos")!=-1); var gbOpera=(gAgent.indexOf("opera")!=-1); var HH_DISPLAY_TOPIC = 0; var HH_DISPLAY_TOC = 1; var HH_DISPLAY_INDEX = 2; var HH_DISPLAY_SEARCH = 3; var HH_HELP_CONTEXT = 15; var gVersion=navigator.appVersion.toLowerCase(); var gnVerMajor=parseInt(gVersion); var gnVerMinor=parseFloat(gVersion); gbIE=(navigator.appName.indexOf("Microsoft")!=-1); if(gnVerMajor>=4) { if(navigator.appName=="Netscape") { gbNav4=true; if(gnVerMajor>=5) gbNav6=true; } gbIE4=(navigator.appName.indexOf("Microsoft")!=-1); } if(gbNav6) { document.gnPageWidth=innerWidth; document.gnPageHeight=innerHeight; var nPos=gAgent.indexOf("netscape"); if(nPos!=-1) { var nVersion=parseFloat(gAgent.substring(nPos+10)); if(nVersion>=6.1) gbNav61=true; } }else if(gbIE4) { var nPos=gAgent.indexOf("msie"); if(nPos!=-1) { var nVersion=parseFloat(gAgent.substring(nPos+5)); if(nVersion>=5) gbIE5=true; if(nVersion>=5.5) gbIE55=true; } } function RH_ShowHelp(hParent, a_pszHelpFile, uCommand, dwData) { // this function only support WebHelp var strHelpPath = a_pszHelpFile; var strWnd = ""; var nPos = a_pszHelpFile.indexOf(">"); if (nPos != -1) { strHelpPath = a_pszHelpFile.substring(0, nPos); strWnd = a_pszHelpFile.substring(nPos+1); } if (isServerBased(strHelpPath)) RH_ShowWebHelp_Server(hParent, strHelpPath, strWnd, uCommand, dwData); else RH_ShowWebHelp(hParent, strHelpPath, strWnd, uCommand, dwData); } function RH_ShowWebHelp_Server(hParent, strHelpPath, strWnd, uCommand, dwData) { // hParent never used. ShowWebHelp_Server(strHelpPath, strWnd, uCommand, dwData); } function RH_ShowWebHelp(hParent, strHelpPath, strWnd, uCommand, dwData) { // hParent never used. ShowWebHelp(strHelpPath, strWnd, uCommand, dwData); } function ShowWebHelp_Server(strHelpPath, strWnd, uCommand, nMapId) { var a_pszHelpFile = ""; if (uCommand == HH_HELP_CONTEXT) { if (strHelpPath.indexOf("?") == -1) a_pszHelpFile = strHelpPath + "?ctxid=" + nMapId; else a_pszHelpFile = strHelpPath + "&ctxid=" + nMapId; } else { if (strHelpPath.indexOf("?") == -1) a_pszHelpFile = strHelpPath + "?ctxid=0"; else a_pszHelpFile = strHelpPath + "&ctxid=0"; } if (strWnd) a_pszHelpFile += ">" + strWnd; if (gbIE4) { a_pszHelpFile += "&cmd=newwnd&rtype=iefrm"; loadData(a_pszHelpFile); } else if (gbNav4) { a_pszHelpFile += "&cmd=newwnd&rtype=nswnd"; var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100"; window.open(a_pszHelpFile, "__webCshStub", sParam); } else { var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100"; if (gbIE5) window.open("about:blank", "__webCshStub", sParam); window.open(a_pszHelpFile, "__webCshStub"); } } function ShowWebHelp(strHelpPath, strWnd, uCommand, nMapId) { var a_pszHelpFile = ""; if (uCommand == HH_DISPLAY_TOPIC) { a_pszHelpFile = strHelpPath + "#<id=0"; } if (uCommand == HH_HELP_CONTEXT) { a_pszHelpFile = strHelpPath + "#<id=" + nMapId; } else if (uCommand == HH_DISPLAY_INDEX) { a_pszHelpFile = strHelpPath + "#<cmd=idx"; } else if (uCommand == HH_DISPLAY_SEARCH) { a_pszHelpFile = strHelpPath + "#<cmd=fts"; } else if (uCommand == HH_DISPLAY_TOC) { a_pszHelpFile = strHelpPath + "#<cmd=toc"; } if (strWnd) a_pszHelpFile += ">>wnd=" + strWnd; if (a_pszHelpFile) { if (gbIE4) loadData(a_pszHelpFile); else if (gbNav4) { var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100"; window.open(a_pszHelpFile, "__webCshStub", sParam); } else { var sParam = "left="+screen.width+",top="+screen.height+",width=100,height=100"; if (gbIE5) window.open("about:blank", "__webCshStub", sParam); window.open(a_pszHelpFile, "__webCshStub"); } } } function isServerBased(a_pszHelpFile) { if (a_pszHelpFile.length > 0) { var nPos = a_pszHelpFile.lastIndexOf('.'); if (nPos != -1 && a_pszHelpFile.length >= nPos + 4) { var sExt = a_pszHelpFile.substring(nPos, nPos + 4); if (sExt.toLowerCase() == ".htm") { return false; } } } return true; } function getElementFromId(sID) { if(document.getElementById) return document.getElementById(sID); else if(document.all) return document.all(sID); return null; } function loadData(sFileName) { if(!getElementFromId("dataDiv")) { if(!insertDataDiv()) { gsFileName=sFileName; return; } } var sHTML=""; if(gbMac) sHTML+="<iframe name=\"__WebHelpCshStub\" src=\""+sFileName+"\"></iframe>"; else sHTML+="<iframe name=\"__WebHelpCshStub\" style=\"visibility:hidden;width:0;height:0\" src=\""+sFileName+"\"></iframe>"; var oDivCon=getElementFromId("dataDiv"); if(oDivCon) { if(gbNav6) { if(oDivCon.getElementsByTagName&&oDivCon.getElementsByTagName("iFrame").length>0) { oDivCon.getElementsByTagName("iFrame")[0].src=sFileName; } else oDivCon.innerHTML=sHTML; } else oDivCon.innerHTML=sHTML; } } function insertDataDiv() { var sHTML=""; if(gbMac) sHTML+="<div id=dataDiv style=\"display:none;\"></div>"; else sHTML+="<div id=dataDiv style=\"visibility:hidden\"></div>"; document.body.insertAdjacentHTML("beforeEnd",sHTML); return true; } function disableAllButtons() { if ( document && document.page_form && document.page_form.elements ) { for ( var i=0; i<document.page_form.elements.length; i++ ) { var element = document.page_form.elements[i]; if ( element && element.type && (element.type == "button" || element.type == "submit") ) { element.disabled = true; } } } } function normalize12HourTimeString( timeString ) { var ts = timeString.toLowerCase(); var matches = ts.match( /^(\d{1,2})(?:[:|\.](\d{2}))? ?(a|p)m?$/ ); if( matches == null ) return timeString; var hour = parseInt(matches[1],10); var minute = matches[2] == '' ? 0 : parseInt(matches[2],10); var am_pm = matches[3]; if( hour > 12 ) { hour -= 12; am_pm = 'p'; } var result = hour.toString() + ':' + (minute < 10 ? '0' : '') + minute.toString() + am_pm ; return result; } function tBl2(objName, decimalMinutes, decimalPlaces, nullable, type, look, timeStandard, date, minHour, maxHour, minMinutes, maxMinutes, isPositioned, padHours) { var object = getByName(objName, isPositioned); var objHours = getByName(objName + '_hours', isPositioned); var objMinutes = getByName(objName + '_minutes', isPositioned); var objTime = getByName(objName + '_time', isPositioned); var objDate = getByName(objName + '_date', isPositioned); var objDateDummy = getByName(objName + '_date_dummy', isPositioned); if( objTime ) objTime.value = normalize12HourTimeString( objTime.value ); web_data_iu_TimeEdit2UI_onBlur( object, objHours, objMinutes, objTime, objDate, objDateDummy, decimalMinutes, decimalPlaces, nullable, type, look, timeStandard, date, minHour, maxHour, minMinutes, maxMinutes, padHours); } function web_data_iu_TimeEdit2UI_onBlur( object, objHours, objMinutes, objTime, objDate, objDateDummy, decimalMinutes, decimalPlaces, nullable, type, look, timeStandard, date, minHour, maxHour, minMinutes, maxMinutes, padHours) { //clean up hidden field object.value = ''; if (objTime) setFieldValue(objTime,StringReplace(objTime.value,' ','')); if (objHours) setFieldValue(objHours,StringReplace(objHours.value,' ','')); if (objMinutes) setFieldValue(objMinutes,StringReplace(objMinutes.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,''); if (objTime.value.indexOf(decimalMinutes == 'true' ? ':' : '.')!=-1) { wbAlert(getLocalizedMessage_INVALID_SEPARATOR()); objTime.wbValid = false; return false; } if (decimalMinutes == 'true') { var tempVal = new String(Math.round( objTime.value * Math.pow (10, decimalPlaces)) / Math.pow( 10, decimalPlaces)); if (isNaN(tempVal)) { wbAlert(getLocalizedMessage_INVALID_TIME()); objTime.wbValid = false; return false; } var decimal = tempVal.indexOf('.'); var numOfZerosNeeded = 0; if (decimal == -1) { numOfZerosNeeded = decimalPlaces; tempVal += '.'; } else { numOfZerosNeeded = decimalPlaces - tempVal.substring(decimal + 1, tempVal.length).length; if (numOfZerosNeeded < 0) numOfZerosNeeded = 0; } for (var i = 0; i < numOfZerosNeeded; i++) { tempVal += '0'; } objTime.value = tempVal; } var ampmtemp = objTime.value; var ampmchar = ''; var x = ampmtemp; if (ampmtemp.indexOf(getAMString()) > -1 || ampmtemp.indexOf(getPMString()) > -1) { ampmchar = ampmtemp.substring(ampmtemp.length - getAMString().length); x = ampmtemp.substring(0, ampmtemp.length - getAMString().length); } else { ampmchar = getAMString(); } var divider = (decimalMinutes == 'true' ? '.' : ':'); var oldLength = x.length; x = x.replace(/^0+/,''); var newLength = x.length; var noHours = (oldLength >= (newLength + 2)); if (x.indexOf(divider) == 0) x = '0'+ x; var dividerPos = x.indexOf(divider); if (dividerPos!=-1) x= x.substring(0,dividerPos) + x.substring(dividerPos+1); if (isNaN(x) || (x.indexOf(divider) != -1)) { wbAlert(getLocalizedMessage_INVALID_TIME()); objTime.wbValid = false; return false; } x += (x.length - dividerPos == 1 ? '0' : x.length - dividerPos == 0 ? '00' :''); var y; if(noHours) { y = x + (decimalMinutes=='true' && dividerPos < 0?'00': ''); y = (y.length == 1) ? '0' + y : y; setFieldValue(objHours, y.length <=2 ? '00' : y.substring(0,(dividerPos > 0 ? dividerPos : y.length-2))); } else { y = x + (decimalMinutes=='true' && dividerPos < 0?'00': x.length==1 ? '00' : x.length==2 ? (parseFloat(x)<24?'00':'0') : ''); setFieldValue(objHours, y.substring(0,(dividerPos > 0 ? dividerPos : y.length-2))); } } if (timeStandard == '12') { if (getFieldValue(objHours) == 12 && ampmtemp.indexOf(getAMString()) == -1) { ampmchar = getPMString(); } if (getFieldValue(objHours)==0) { ampmchar = getAMString(); setFieldValue(objHours,12); } if (getFieldValue(objHours) > 12 && getFieldValue(objHours) < 24 ) { ampmchar = getPMString(); setFieldValue(objHours,getFieldValue(objHours)-12); } if (getFieldValue(objHours) == 24) { ampmchar = getAMString(); setFieldValue(objHours,12); } } else { if (ampmchar == getPMString() && getFieldValue(objHours) < 12) { setFieldValue(objHours,parseInt(getFieldValue(objHours)) + 12); } } if (objTime) { var tMin = '0.' + y.substring((dividerPos > 0 ? dividerPos : y.length-2),y.length); if (decimalMinutes == 'true') { tMin = Math.round(tMin * Math.pow (10, decimalPlaces)); setFieldValue(objMinutes, new String(tMin)); } else { tMin = Math.round (tMin * 100); setFieldValue(objMinutes,(tMin < 10 ? '0' : '') + new String(tMin)); } if (decimalMinutes != 'true') { objTime.value=( getFieldValue(objHours).length==1 && type=='time' && (timeStandard == '24' || padHours == 'true') ? '0' :'') + getFieldValue(objHours) + (getFieldValue(objHours) == '' && getFieldValue(objMinutes) == '' ? '' : divider ) + getFieldValue(objMinutes) + (timeStandard == '24' ? '' : ampmchar); } } if (getFieldValue(objHours) == '' && getFieldValue(objMinutes) == '' && (ampmchar == '') && (objDateDummy? objDateDummy.value == '' : true)) { if (nullable=='true') return; } else { if (ampmchar == '' && y != '') { if (y >= '12' && y <= '13') ampmchar = getPMString(); else ampmchar = getAMString(); } if (objHours && getFieldValue(objHours) == '') setFieldValue(objHours,(timeStandard == '12' ?'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)) { wbAlert(getLocalizedMessage_INVALID_HOURS()); if (objTime) objTime.wbValid = false; else objHours.wbValid = false; return false; } if ( isNaN(getFieldValue(objMinutes))|| (decimalMinutes!='true'&& parseFloat(getFieldValue(objMinutes))>=60)) { wbAlert(getLocalizedMessage_INVALID_MINUTES()); if (objTime) objTime.wbValid = false; else objMinutes.wbValid = false; return false; } var hours = parseFloat(getFieldValue(objHours)); var minutes = parseFloat(getFieldValue(objMinutes)); if (look=='text' && type=='time' && timeStandard=='12' && !isNaN(hours)) { if (hours>12) ampmchar = getPMString(); while (hours > 12) hours = hours - 12; setFieldValue(objHours,(''+hours).padLeft(2,'0',2)); } var ampm = (type=='time' && timeStandard=='12' ? ampmchar : ''); if ( ampm == '' && getFieldValue(objHours) && getFieldValue(objHours).substring(0,1) == '-' ) minutes *= -1; if (ampm==getAMString()) { if (hours==12) hours=0; } else if (ampm==getPMString() && hours!=12) hours=hours+12; var sHours = '' + hours; var testValue = parseFloat(hours * 100) + parseFloat(minutes); if (look=='box' && testValue < (parseFloat(minHour * 100) + parseFloat(minMinutes))) { wbAlert(getLocalizedMessage_TIME_LESS()); if (objTime) objTime.wbValid = false; else objHours.wbValid = false; return false; } if (look=='box' && testValue > (parseFloat(maxHour * 100) + parseFloat(maxMinutes))) { wbAlert(getLocalizedMessage_TIME_GREATER()); if (objTime) objTime.wbValid = false; else objHours.wbValid = false; return false; } if (decimalMinutes == 'true') minutes = Math.round((minutes / Math.pow(10,decimalPlaces)) * 60); 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; } } /*--dates functions--*/ var default_locale = { month:["January","February","March","April","May","June","July","August", "September","October","November","December"], shortMonth:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep", "Oct","Nov","Dec"], day:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"], shortDay:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"], eras:["BC","AD"], AmPm:["AM","PM"], usesAmPm:true, firstDayOfWeek:0, toOrdinal:function(number) { var numStr = String(number); var suffix; switch(numStr.substring(numStr.length-1)) { case "1": suffix = "st";break; case "2": suffix = "nd";break; case "3": suffix = "rd";break; default: suffix = "th";break; } return numStr + suffix; } }; function DateFormatter(format) { this.formatString = format; } DateFormatter.prototype.locale = default_locale; DateFormatter.prototype.setLocale = function (locale) { this.locale = locale; } DateFormatter.prototype.formatNumber = function formatNumber(number,digits,padChar,ordinal) { var numStr = String(number); while(numStr.length < digits) { numStr = padChar + numStr; } return ordinal?this.locale.toOrdinal(numStr):numStr; }; DateFormatter.prototype.parse = function parse (strDate) { var re = /([^a-z\\]*)((([a-z])\4*)(\.?)|\\([a-z]*\b||\.))/gi, match; var strDateLastIndex = 0; //var now=new Date(); //var year=now.getYear(); //var month=now.getMonth()+1; var date=1; //var hh=now.getHours(); //var mm=now.getMinutes(); //var ss=now.getSeconds(); var year=0; var month=1; var hh=0; var mm=0; var ss=0; var ampm=""; while((match = re.exec(this.formatString))) { //resultStr+=match[1]; var delimiterLength = match[1]?match[1].length:0; // the length of delimiter between pattern character var pattern = match[2]; var patternChar = match[4]; var patternLength = match[3]?match[3].length:0; var contentLength = patternLength; //the length of matched sub-string in "strDate" //var ordinal = match[5]=="."; //TO BE IMPLEMENTED switch (patternChar) { case undefined: break; case "y": // year if (patternLength == 2) { year=getInt(strDate,strDateLastIndex+delimiterLength,2,2); } else { year=getInt(strDate,strDateLastIndex+delimiterLength,4,4); } if (year==null) { return 0; } contentLength=year.length; if (year.length==2) { //the year is limited from 1971 to 2070 if (year > 70) { year=1900+(year-0); }//71'-99' => 1971-1999 else { year=2000+(year-0); }//00'-70' => 2000-2070 } break; case "M": // month if (patternLength<=2) { month=getInt(strDate,strDateLastIndex+delimiterLength,1,2); //more restrictive: //month=getInt(strDate,strDateLastIndex+delimiterLength,2,2); if(month==null||(month<1)||(month>12)){return 0;} contentLength = month.length; } else if (patternLength == 3) { month=0; for (var i=0; i<this.locale.shortMonth.length; i++) { var month_name=this.locale.shortMonth[i]; if (strDate.substring(strDateLastIndex+delimiterLength,strDateLastIndex+delimiterLength+month_name.length).toLowerCase()==month_name.toLowerCase()) { month=i+1; if ((month < 1)||(month>12)){return 0;} contentLength = month_name.length; break; } } if ((month < 1)||(month>12)){return 0;} } else { month=0; for (var i=0; i<this.locale.month.length; i++) { var month_name=this.locale.month[i]; if (strDate.substring(strDateLastIndex+delimiterLength,strDateLastIndex+delimiterLength+month_name.length).toLowerCase()==month_name.toLowerCase()) { month=i+1; if ((month < 1)||(month>12)){return 0;} contentLength = month_name.length; break; } } if ((month < 1)||(month>12)){return 0;} } break; case "d": // day of month in digits date=getInt(strDate,strDateLastIndex+delimiterLength,1,2); //more restrictive: //date=getInt(strDate,strDateLastIndex+delimiterLength,2,2); if(date==null||(date<1)||(date>31)){return 0;} contentLength = date.length break; case "E": // day of week if (patternLength<=2) { var day_of_week=getInt(strDate,strDateLastIndex+delimiterLength,1,2); if (day_of_week==null || day_of_week<=0 || day_of_week>7) {return 0;} contentLength = day_of_week.length; } else if (patternLength == 3) { var day_of_week = 0; for (var i=0; i<this.locale.shortDay.length; i++) { var short_day_name=this.locale.shortDay[i]; if (strDate.substring(strDateLastIndex+delimiterLength,strDateLastIndex+delimiterLength+short_day_name.length).toLowerCase()==short_day_name.toLowerCase()) { day_of_week =i+1; if ((day_of_week<=0) || (day_of_week>7)) {return 0} contentLength = short_day_name.length; break; } } if ((day_of_week<=0) || (day_of_week>7)) {return 0} } else { var day_of_week = 0; for (var i=0; i<this.locale.day.length; i++) { var day_name=this.locale.day[i]; if (strDate.substring(strDateLastIndex+delimiterLength,strDateLastIndex+delimiterLength+day_name.length).toLowerCase()==day_name.toLowerCase()) { day_of_week =i+1; if ((day_of_week<=0) || (day_of_week>7)) {return 0} contentLength = day_name.length; break; } } if ((day_of_week<=0) || (day_of_week>7)) {return 0} } break; case "h": // 12 hours AM/PM hh=getInt(strDate,strDateLastIndex+delimiterLength,2,2); if(hh==null||(hh<1)||(hh>12)){return 0;} contentLength = hh.length; break; case "H": // 24 hours hh=getInt(strDate,strDateLastIndex+delimiterLength,2,2); if(hh==null||(hh<0)||(hh>23)){return 0;} contentLength = hh.length; break; case "m": // minutes mm=getInt(strDate,strDateLastIndex+delimiterLength,2,2); if(mm==null||(mm<0)||(mm>59)){return 0;} contentLength = mm.length; break; case "s": // seconds ss=getInt(strDate,strDateLastIndex+delimiterLength,2,2); if(ss==null||(ss<0)||(ss>59)){return 0;} contentLength = ss.length; break; case "a": if (strDate.substring(strDateLastIndex+delimiterLength,strDateLastIndex+delimiterLength+this.locale.AmPm[0].length).toLowerCase()==this.locale.AmPm[0].toLowerCase()) { ampm="AM"; contentLength =this.locale.AmPm[0].length; } else if (strDate.substring(strDateLastIndex+delimiterLength,strDateLastIndex+delimiterLength+this.locale.AmPm[1].length).toLowerCase()==this.locale.AmPm[1].toLowerCase()) { ampm="PM"; contentLength =this.locale.AmPm[1].length; } else {return 0;} break; default: //invalid pattern return 0; } strDateLastIndex += delimiterLength + contentLength; } if (month==2) { // Check for leap year if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year if (date > 29){ return 0; } } else { if (date > 28) { return 0; } } } if ((month==4)||(month==6)||(month==9)||(month==11)) { if (date > 30) { return 0; } } // Correct hours value if (hh<12 && ampm=="PM") { hh=hh-0+12; } else if (hh>11 && ampm=="AM") { hh-=12; } var newdate=new Date(year,month-1,date,hh,mm,ss); return newdate; } DateFormatter.prototype.format = function format(date) { var re = /([^a-z\\]*)((([a-z])\4*)(\.?)|\\([a-z]*\b||\.))/gi, resultStr = "", locale = this.locale, pad = this.formatNumber, lastIndex = 0, match; while((match = re.exec(this.formatString))) { resultStr+=match[1]; var pattern = match[2]; var patternChar = match[4]; var patternLength = match[3]?match[3].length:0; var ordinal = match[5]=="."; switch (patternChar) { case undefined: // string is "\word" resultStr += pattern.substring(1); // skip backslash break; case "G": // era if (date.getFullYear() < 0) { resultStr += this.locale.eras[0]; } else { resultStr += this.locale.eras[1]; } break; case "y": // year if (patternLength == 2) { resultStr += pad(date.getFullYear()%100,2,"0",ordinal); } else { resultStr += pad(date.getFullYear(),patternLength,"0",ordinal); } break; case "M": // month if (patternLength<=2) { resultStr += pad(date.getMonth()+1,patternLength,"0",ordinal); } else if (patternLength == 3) { resultStr += this.locale.shortMonth[date.getMonth()]; } else { resultStr += this.locale.month[date.getMonth()]; } break; case "d": // day of month resultStr += pad(date.getDate(),patternLength,"0",ordinal); break; case "D": // day in year var firstDayOfYear = new Date(date.getFullYear(), 0, 1); var dayInYear = Math.round((date.getTime()-firstDayOfYear.getTime())/(24*60*60*1000)); resultStr += dayInYear; break; case "E": // day of week if (patternLength <= 2) { resultStr += pad((date.getDay()-locale.firstDayOfWeek + 7)%7+1, patternLength,"0",ordinal); } else if (patternLength == 3) { resultStr += locale.shortDay[date.getDay()]; } else { resultStr += locale.day[date.getDay()]; } break; case "h": // 12 hours AM/PM if (locale.usesAmPm) { var hour = date.getHours(); if (hour < 12) { resultStr += pad(hour,patternLength,"0")+locale.AmPm[0]; } else { resultStr += pad(hour-12,patternLength,"0")+locale.AmPm[1]; } break; } // else case "H": // 24 hours resultStr += pad(date.getHours(),patternLength,"0",ordinal); break; case "m": // minutes resultStr += pad(date.getMinutes(),patternLength,"0",ordinal); break; case "s": // seconds resultStr += pad(date.getSeconds(),patternLength,"0",ordinal); break; case "z": var tzOffsetMins = date.getTimezoneOffset(); var tzHour = pad(Math.round(tzOffsetMins/60),2,"0",0); var tzMin = pad(Math.round(tzOffsetMins%60),2,"0",0); if (tzOffsetMins >= 0) { resultStr += "GMT+"+tzHour+":"+tzMin; } else { resultStr += "GMT-"+tzHour+":"+tzMin; } break; default: resultStr += pattern; } lastIndex = re.lastIndex; } resultStr += this.formatString.substring(lastIndex); return resultStr; } function isInteger(val) { var digits="1234567890"; for (var i=0; i < val.length; i++) { if (digits.indexOf(val.charAt(i))==-1) { return false; } } return true; } function getInt(str,i,minlength,maxlength) { for (var x=maxlength; x>=minlength; x--) { var token=str.substring(i,i+x); if (token.length < minlength) { return null; } if (isInteger(token)) { return token; } } return null; } function readDate(hiddenInputDate){ if (hiddenInputDate == null || hiddenInputDate.length == 0) { return new Date(today.getFullYear(),today.getMonth(),today.getDate()); } var year = hiddenInputDate.substring(0, 4); var month = hiddenInputDate.substring(4, 6); var day = hiddenInputDate.substring(6, 8); return new Date(year, month - 1, day); } function getLocaleData() { return default_locale; } var dateFormatString = "MM/dd/yyyy"; function getDateFormatString() { return dateFormatString; } function toDateString(theDate) { if (theDate != null) { // Formatting the Date object as date string: var format = getDateFormatString(); if (format == null) { format = "MM/dd/yyyy"; } var formatter = new DateFormatter(format); var localeData = getLocaleData(); if (localeData != null) { formatter.setLocale(localeData); } var dateString = formatter.format(theDate); return(dateString); } else return ""; } /*--end of dates functions--*/